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
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)
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)