我有一个颜色字典(如下)和一个颜色,例如 #4a7dac
,它是 'steelblue'。我想在字典中找到与这种颜色最接近的十六进制颜色的名称。因此算法将决定 #0000ff
并返回 'blue'。
colors= {
"red":"#FF0000",
"yellow":"#FFFF00",
"green":"#008000",
"blue":"#0000FF",
"black":"#000000",
"white":"#FFFFFF",
"gray":"#808080",
}
我考虑过计算颜色之间的某种“距离”,但不知道如何着手编写。
最佳答案
我们可以创建一个函数,它接受两个十六进制字符串并返回各个颜色分量之间的差异之和。如果您无法理解以下内容的工作原理,请发表评论。
def diff(h1, h2):
def hexs_to_ints(s):
return [int(s[i:i+2], 16) for i in range(1,7,2)]
return sum(abs(i - j) for i, j in zip(*map(hexs_to_ints, (h1, h2))))
我们可以测试它:
>>> diff('#ff00ff', '#0000ff')
255
>>> diff('#0000ff', '#00000a')
245
那么现在,我们可以创建一个使用这个函数来完成任务的函数:
def get_col_name(hex, colors):
return min([(n,diff(hex,c)) for n,c in colors.items()], key=lambda t: t[1])[0]
不幸的是,这对您的颜色不起作用,因为它选择了 gray
,即 [128, 128, 128]
非常接近 steelblue
即 [74, 125, 172]
- 比 blue
更接近 [0, 0, 255]
。这意味着 gray
的差异小于 blue
的差异。我会尝试想出更好的方法,但也许有人有一些见解并可以发表评论?
关于python - 计算字典中最接近输入的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52078258/