你能将一种颜色的不同深浅/色调分组到一个组中/找到基础色吗?



是否有一种方法可以从该颜色的色调/阴影开始或将颜色的变化组合在一起?

例如:#9c2b2b/RGB(156,43,43)为暗红色#2354c4/RGB(132,162,232)为蓝色

但是给它两种颜色在Python中是否有办法确定这是红色(#FF0000 rgb(255, 0,0))或蓝色(#0000FF rgb(0, 0, 255))的变化

我知道怎么做,我在网上找到了很多教程和答案,关于如何通过基本色和乘法或减法来做渐变。

谢谢

我有几种方法可以做到这一点。下面的代码片段使用了库colorir

1。按感知距离对颜色进行分组

>>> from colorir import *
# These are the categories we want to fit the colors in
# You can use anything here, I just sampled a few CSS colors
>>> tints_dict = {  
'red': '#ff0000',
'yellow': '#ffff00',
'green': '#00ff00',
'blue': '#0000ff',
'black': '#000000',
'white': '#ffffff'
}
>>> tints = Palette('tints', **tints_dic)
# Now to get the tint of a given color:
>>> tints.most_similar('#9c2b2b')
HexRGB('#ff0000')  # Pure red
# If you want its name:
>>> tints.get_names(tints.most_similar('#9c2b2b'))[0]
'red'

这种方法的问题在于,我不认为你对"色调"的定义与对颜色距离的定义是相同的(颜色距离本身是非常有争议的,见此)。

这意味着如果我们向我们的'tints'数据集添加紫色,如'#800080',palette.most_similar('#9c2b2b')将返回'#800080'。

这是因为'#9c2b2b'的感知亮度更接近我们的紫色而不是红色。一个可能的解决方法是只使用类似亮度的参考"色调"。

2。按色调分组

但是,这个解决方案可能更合适。

在这里,我们只关注它们的色调成分,而不是根据总体相似性对颜色进行分组。色相是颜色的"颜料",是HSL和HSV颜色系统的组成部分之一。

>>> def closest_hue(target, tints):
# Interprets input target as hex string, convert to HSL and get hue component
target_hue = HexRGB(target).hsl()[0]  
closest = (None, 180)
for color in tints:
hue = color.hsl()[0]
hue_dist = (min(target_hue, hue) - max(target_hue, hue)) % 360
if hue_dist < closest[1]:
closest = (color, hue_dist)
return closest[0]
>>> closest_hue('#9c2b2b', tints)  # 'tints' is the same palette defined previously
HexRGB('ff0000')  # Pure red

这种方法的缺点,正如在原始帖子的评论中提到的,是它不能识别接近黑色,白色或灰色的颜色。

您还可以组合这些方法,例如,将非常接近黑色或白色的颜色与它们分组,否则它们应按色调排序。由于这个问题没有单一的答案,您必须尝试我所描述的方法,看看哪种方法最适合您。

相关内容

  • 没有找到相关文章