Ejemplo n.º 1
0
def clip_color(c):
    """
    :type c: tuple(ImageMath._Operand)
    :rtype: tuple(ImageMath._Operand)
    """
    l = lum(c)
    x = ImageMath.imagemath_max(ImageMath.imagemath_max(c[0], c[1]), c[2])
    n = ImageMath.imagemath_min(ImageMath.imagemath_min(c[0], c[1]), c[2])

    n_l_0 = ImageMath.imagemath_int(n < 0)
    x_b_1 = ImageMath.imagemath_int(x > 1.0)
    l_m_n = l - n
    x_m_l = x - l
    m_l = (1.0 - l)

    if bool(n_l_0):
        c = [
            (_c * (n_l_0 ^ 1)) + ((l + ((_c - l) * l / l_m_n)) * n_l_0)
            for _c in c
            ]

    if bool(x_b_1):
        c = [
            (_c * (x_b_1 ^ 1)) + ((l + ((_c - l) * m_l / x_m_l)) * x_b_1)
            for _c in c
            ]

    return c
Ejemplo n.º 2
0
def sat(c):
    """
    :type c: tuple(ImageMath._Operand)
    :rtype: ImageMath._Operand
    """
    x = ImageMath.imagemath_max(ImageMath.imagemath_max(c[0], c[1]), c[2])
    n = ImageMath.imagemath_min(ImageMath.imagemath_min(c[0], c[1]), c[2])
    return ImageMath.imagemath_float(x - n)
Ejemplo n.º 3
0
def set_sat(c, s):
    """
    :type c: tuple(ImageMath._Operand)
    :type s: ImageMath._Operand
    :rtype: tuple(ImageMath._Operand)
    """
    x = ImageMath.imagemath_max(ImageMath.imagemath_max(c[0], c[1]), c[2])
    n = ImageMath.imagemath_min(ImageMath.imagemath_min(c[0], c[1]), c[2])
    cs = x - n
    not_even_area = ImageMath.imagemath_int(x != n)

    result = []
    for cc in c:
        max_area = ImageMath.imagemath_int(x == cc)
        min_area = ImageMath.imagemath_int(n == cc)
        mid_area = (max_area ^ 1) & (min_area ^ 1)

        mid = (((cc - n) * s) / cs) * mid_area
        cc = ((s * max_area) + mid) * not_even_area
        result.append(cc)

    return tuple(result)