作为Wedge said,您想要乘以使事物更亮,但这仅在其中一种颜色饱和(即达到 255 或更大)之前有效。那时,您可以将值限制为 255,但随着颜色变浅,您会巧妙地改变色调。要保持色调,您需要保持 (middle-lowest)/(highest-lowest) 的比率。
这里有两个 Python 函数。第一个实现了简单的方法,如果它们超过,它只会将 RGB 值钳制为 255。第二个重新分配多余的值以保持色调不变。
def clamp_rgb(r, g, b):
return min(255, int(r)), min(255, int(g)), min(255, int(b))
def redistribute_rgb(r, g, b):
threshold = 255.999
m = max(r, g, b)
if m <= threshold:
return int(r), int(g), int(b)
total = r + g + b
if total >= 3 * threshold:
return int(threshold), int(threshold), int(threshold)
x = (3 * threshold - total) / (3 * m - total)
gray = threshold - x * m
return int(gray + x * r), int(gray + x * g), int(gray + x * b)
我创建了一个渐变,从 RGB 值 (224,128,0) 开始,然后将其乘以 1.0、1.1、1.2 等,直到 2.0。上半部分是使用clamp_rgb 的结果,下半部分是使用redistribute_rgb 的结果。我认为很容易看出重新分配溢出会产生更好的结果,而不必离开 RGB 颜色空间。
为了比较,这里是 HLS 和 HSV 颜色空间中的相同渐变,由 Python 的 colorsys 模块实现。仅修改了L 组件,并对生成的 RGB 值执行了钳位。结果相似,但需要对每个像素进行色彩空间转换。