寻找绘画色调之间的中间颜色
混合颜料时,所得的颜色会受到颜料吸收特性的影响。蓝色涂料吸收红光和绿光,而黄色涂料吸收蓝光。当组合时,这些颜料理论上会产生浑浊的灰色或黑色。然而,在实践中,蓝色油漆偏向绿色通常会导致浑浊的绿色色调。
沿着色轮插值颜色的算法可以提供直观的结果,而不是模拟油漆混合。 HSL(色调、饱和度、亮度)颜色空间特别有用,因为它允许对色调进行平均。
Python 实现
下面的 Python 代码实现了插值算法:
from colorsys import rgb_to_hls,hls_to_rgb from math import sin,cos,atan2,pi def average_colors(rgb1, rgb2): h1, l1, s1 = rgb_to_hls(rgb1[0]/255., rgb1[1]/255., rgb1[2]/255.) h2, l2, s2 = rgb_to_hls(rgb2[0]/255., rgb2[1]/255., rgb2[2]/255.) s = 0.5 * (s1 + s2) l = 0.5 * (l1 + l2) x = cos(2*pi*h1) + cos(2*pi*h2) y = sin(2*pi*h1) + sin(2*pi*h2) if x != 0.0 or y != 0.0: h = atan2(y, x) / (2*pi) else: h = 0.0 s = 0.0 r, g, b = hls_to_rgb(h, l, s) return (int(r*255.), int(g*255.), int(b*255.))
结果
使用蓝色和黄色作为输入颜色,算法产生绿色色调:
>>> average_colors((255,255,0),(0,0,255)) (0, 255, 111)
混合蓝色和青色产生青色:
>>> average_colors((255,255,0),(0,255,255)) (0, 255, 0)
局限性
需要注意的是,该算法不能准确模拟油漆混合。油漆混合涉及光的吸收,这是一个更复杂的过程。 HSL 插值算法提供了直观的颜色混合,但不以物理现实为基础。
以上是如何使用 Python 找到两个给定 RGB 颜色之间的中间颜色?的详细内容。更多信息请关注PHP中文网其他相关文章!