Parece que webcolors le permitirá hacer esto:
rgb_to_name (rgb_triplet, espec = 'CSS3')
Convierte un 3-tupla de números enteros, adecuado para su uso en un rgb () color triplete, a su correspondiente nombre de color normalizado, si existe tal nombre; los valores válidos son html4, css2, css21 y css3, y el valor predeterminado es css3.
Ejemplo:
>>> rgb_to_name((0, 0, 0))
'black'
es viceversa-poder:
>>> name_to_rgb('navy')
(0, 0, 128)
para encontrar el nombre del color más cercano:
Sin embargo webcolors
lanza una excepción si se puede' t encuentra una coincidencia para el color solicitado. He escrito una pequeña corrección que ofrece el nombre más parecido para el color RGB solicitado. Se empareja por distancia euclidiana en el espacio 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
Salida:
Actual colour name: None , closest colour name: cadetblue
Creo que encontré los droides que está buscando ... http://pypi.python.org/pypi/webcolors/1.3#conversions-from-integer-rgb-triplets – mVChr
No sé si ya hay una solución para esto, pero cualquier mapeo será necesariamente heurístico y totalmente subjetivo ... ¡Interesante pregunta, sin embargo! –
¿Desea _precise_ nombres de colores o aproximaciones? Por ejemplo, "verde" es (obviamente) '(0,255,0)'. ¿Qué le gustaría que fuera 'color ((0,254,0))'? – katrielalex