在绘制的色彩空间中查找两个其他颜色之间的算法
使用油漆时,混合不同的色调会产生与数字不同的变化RGB 颜色模型的领域。在物理颜料的世界中,颜色被吸收或反射而不是发射,从而产生独特的混合结果。
吸收概念
颜料吸收在混合过程。例如,“蓝色”涂料吸收红色和绿色波长,导致仅反射蓝光。同样,黄色涂料吸收蓝色波长,仅反射黄光。
涂料颜色混合的挑战
理论上,组合黄色和蓝色涂料应该产生黑色或泥灰色。然而,实际的限制,例如油漆中的杂质,通常会导致浑浊的绿色色调。通过混合蓝色和黄色来创建令人满意的绿色是绘画中的常见挑战。
HLS 色彩空间中的颜色插值
虽然物理模拟油漆混合可能不可行,可以使用 HSL(色调、饱和度、亮度)色彩空间插入颜色以获得所需的色调。 HSL 根据颜色的固有属性来表示颜色,使其更容易操作和混合。
Python 实现
以下 Python 代码演示了 HLS 颜色空间中的颜色平均:
from colorsys import rgb_to_hls, hls_to_rgb from math import sin, cos, atan2, pi def average_colors(rgb1, rgb2): # Convert RGB values to HLS 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.) # Calculate average saturation and lightness s = 0.5 * (s1 + s2) l = 0.5 * (l1 + l2) # Calculate average hue (considering hue wrapping) 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 # Convert HLS back to RGB 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)
注意:此实现不会复制油漆混合过程,而是提供令人愉悦的颜色插值。
以上是我们如何通过算法找到两种给定油漆颜色之间的中间颜色?的详细内容。更多信息请关注PHP中文网其他相关文章!