转换RGB颜色英文颜色的名称,如与Python
问题描述:
我想一个颜色元组转换为一种颜色的名称,如“黄色”或“蓝色”转换RGB颜色英文颜色的名称,如与Python
>>> im = Image.open("test.jpg")
>>> n, color = max(im.getcolors(im.size[0]*im.size[1]))
>>> print color
(119, 172, 152)
“绿色”是否有一个简单的方法python来做到这一点?
答
它看起来像webcolors将允许你这样做:
rgb_to_name(rgb_triplet,规格= 'CSS3')
转换整数3元组,适合使用在RGB( )颜色三元组,如果存在任何此类名称,则将其转换为其对应的标准化颜色名称;有效值为html4,css2,css21和css3,默认值为css3。
例子:
>>> rgb_to_name((0, 0, 0))
'black'
是反之亦然-能够:
>>> name_to_rgb('navy')
(0, 0, 128)
要找到最接近的颜色名称:
然而webcolors
如果可以”抛出一个异常找到所需颜色的匹配。我写了一个小小的修复程序,为请求的RGB颜色提供最接近的匹配名称。它与RGB空间中的欧几里德距离相匹配。
import webcolors
def closest_colour(requested_colour):
min_colours = {}
for key, name in webcolors.css3_hex_to_names.items():
r_c, g_c, b_c = webcolors.hex_to_rgb(key)
rd = (r_c - requested_colour[0]) ** 2
gd = (g_c - requested_colour[1]) ** 2
bd = (b_c - requested_colour[2]) ** 2
min_colours[(rd + gd + bd)] = name
return min_colours[min(min_colours.keys())]
def get_colour_name(requested_colour):
try:
closest_name = actual_name = webcolors.rgb_to_name(requested_colour)
except ValueError:
closest_name = closest_colour(requested_colour)
actual_name = None
return actual_name, closest_name
requested_colour = (119, 172, 152)
actual_name, closest_name = get_colour_name(requested_colour)
print "Actual colour name:", actual_name, ", closest colour name:", closest_name
输出:
Actual colour name: None , closest colour name: cadetblue
答
有一个名为pynche程序,它可以改变RGB用英语颜色名称为Python。
您可以尝试使用方法ColorDB.nearest()
在ColorDB.py
,它可以做你想做的。
您可以找到有关此方法在这里更多的信息:ColorDB Pynche
答
一个解决问题的方法包括在RGB值映射到HSL色彩空间。
一旦在HSL色彩空间中有颜色,就可以使用H(色相)组件将其映射为颜色。请注意,颜色是一种有点主观的概念,所以您必须定义H的哪个范围对应给定的颜色。
答
对于那些谁和我一样,希望有一个更熟悉的颜色名称,你可以使用CSS 2.1 colour names,还webcolors
提供:
- AQUA:
#00ffff
- 黑色:
#000000
- 蓝色:
#0000ff
- 紫红色:
#ff00ff
- 绿色:
#008000
- 灰色:
#808080
- 石灰:
#00ff00
- 栗色:
#800000
- 海军:
#000080
- 橄榄:
#808000
- 紫色:
#800080
- 红:
#ff0000
- 银:
#c0c0c0
- 水鸭:
#008080
- 白:
#ffffff
- 黄:
#ffff00
- 橙色:
#ffa500
只要使用飞梭的出色答卷,并为获得最接近的颜色代码,适用于CSS 2.1:
def get_colour_name(rgb_triplet):
min_colours = {}
for key, name in webcolors.css21_hex_to_names.items():
r_c, g_c, b_c = webcolors.hex_to_rgb(key)
rd = (r_c - rgb_triplet[0]) ** 2
gd = (g_c - rgb_triplet[1]) ** 2
bd = (b_c - rgb_triplet[2]) ** 2
min_colours[(rd + gd + bd)] = name
return min_colours[min(min_colours.keys())]
我想我找到了你正在寻找的机器人...... http://pypi.python.org/pypi/webcolors/1.3#conversions-from-integer-rgb-triplets – mVChr 2012-03-14 00:19:32
我不知道这是否已经有解决方案,但是任何这样的映射都必然是启发式的,并且完全是主观的......虽然有趣的问题! – 2012-03-14 00:21:24
你想_precise_颜色名称或近似值?例如,“绿色”显然是(0,255,0)'。你想要什么颜色((0,254,0))? – katrielalex 2012-03-14 00:25:05