Necesito convertir (0, 128, 64) a algo así como # 008040. No estoy seguro de cómo llamar a este último, lo que dificulta la búsqueda.Convertir una tupla de color RGB a un código de seis dígitos, en Python
Respuesta
usar el operador de formato %
:
>>> '#%02x%02x%02x' % (0, 128, 64)
'#008040'
Tenga en cuenta que no va a revisar los límites ...
>>> '#%02x%02x%02x' % (0, -1, 9999)
'#00-1270f'
def clamp(x):
return max(0, min(x, 255))
"#{0:02x}{1:02x}{2:02x}".format(clamp(r), clamp(g), clamp(b))
Esto utiliza el método preferido de formato de cadenas, como described in PEP 3101. También usa min()
y max
para asegurar que 0 <= {r,g,b} <= 255
.
La actualización agregó la función de pinza como se sugiere a continuación.
actualización Desde el título de la pregunta y el contexto dado, debe ser obvio que esta espera 3 enteros en [0255] y siempre devolverá un color cuando está pasado 3 de tales enteros. Sin embargo, a partir de los comentarios, esto puede no ser evidente para todos, por lo que dejar que se afirma explícitamente:
proporcionan tres valores
int
, esto va a devolver un triplete hexadecimal válido que representa un color. Si esos valores están entre [0,255], los tratará como valores RGB y devolverá el color correspondiente a esos valores.
Solo una sugerencia: 'def clamp (x): return max (0, min (x, 255))' –
Buena sugerencia. Gracias Mark, actualizaré la solución. –
@Jesse Dhillon: "sujeción" == "falla silenciosa". Pruebe algo como esto: 'if not (0 <= x <= 255): raise ValueError ('rgb (% r) no en rango (256)'% x)' –
triplet = (0, 128, 64)
print '#'+''.join(map(chr, triplet)).encode('hex')
o
from struct import pack
print '#'+pack("BBB",*triplet).encode('hex')
python3 es ligeramente diferente
from base64 import b16encode
print(b'#'+b16encode(bytes(triplet)))
Ésta es una cuestión de edad, sino de información, he desarrollado un paquete con algunas empresas de servicios relacionados con los colores y mapas de colores y contiene la función rgb2hex que buscaba convertir triplete en valor hexa (que se puede encontrar en muchos otros paquetes, p. matplotlib). Está en PyPI
pip install colormap
y luego se comprueba
>>> from colormap import rgb2hex
>>> rgb2hex(0, 128, 64)
'##008040'
Validez de las entradas (valores deben estar entre 0 y 255).
He creado un programa completo de python para que las siguientes funciones puedan convertir rgb en hexadecimal y viceversa.
def rgb2hex(r,g,b):
return "#{:02x}{:02x}{:02x}".format(r,g,b)
def hex2rgb(hexcode):
return tuple(map(ord,hexcode[1:].decode('hex')))
Se puede ver el código completo y un tutorial en el siguiente enlace: RGB to Hex and Hex to RGB conversion using Python
En Python 3.6, puede utilizar f-cuerdas para hacer este limpiador:
rgb = (0,128, 64)
f'#{rgb[0]:02x}{rgb[1]:02x}{rgb[2]:02x}'
por supuesto se puede poner esto en una función, y como un bono, valores conseguir redondeado y convertido a int:
def rgb2hex(r,g,b):
return f'#{int(round(r)):02x}{int(round(g)):02x}{int(round(b)):02x}'
rgb2hex(*rgb)
def RGB(red,green,blue): return '#%02x%02x%02x' % (red,green,blue)
background = RGB(0, 128, 64)
yo sé de una sola línea en Python no son nece ssarily miró amablemente. Pero hay momentos en los que no puedo resistirme a aprovechar lo que el analizador de Python permite. Es la misma respuesta que la solución de Dietrich Epp (la mejor), pero envuelta en una sola función de línea. Entonces, ¡gracias Dietrich!
lo estoy usando ahora con tkinter :-)
Aquí es una función más completa para el manejo de situaciones en las que puede tener valores RGB en el rango [0,1] o el rango [ 0,255].
def RGBtoHex(vals, rgbtype=1):
"""Converts RGB values in a variety of formats to Hex values.
@param vals An RGB/RGBA tuple
@param rgbtype Valid valus are:
1 - Inputs are in the range 0 to 1
256 - Inputs are in the range 0 to 255
@return A hex string in the form '#RRGGBB' or '#RRGGBBAA'
"""
if len(vals)!=3 and len(vals)!=4:
raise Exception("RGB or RGBA inputs to RGBtoHex must have three or four elements!")
if rgbtype!=1 and rgbtype!=256:
raise Exception("rgbtype must be 1 or 256!")
#Convert from 0-1 RGB/RGBA to 0-255 RGB/RGBA
if rgbtype==1:
vals = [255*x for x in vals]
#Ensure values are rounded integers, convert to hex, and concatenate
return '#' + ''.join(['{:02X}'.format(int(round(x))) for x in vals])
print(RGBtoHex((0.1,0.3, 1)))
print(RGBtoHex((0.8,0.5, 0)))
print(RGBtoHex(( 3, 20,147), rgbtype=256))
print(RGBtoHex(( 3, 20,147,43), rgbtype=256))
- 1. ¿Convertir color RGB a CMYK?
- 2. RGB Int a RGB - Python
- 3. convertir color html o rgb a system.drawing.brush
- 4. Convertir RGB color para identificar el color Inglés, como 'verde' con Python
- 5. Convertir de HEX color a estructura RGB en C
- 6. Cómo convertir color hexadecimal hexadecimal de 3 dígitos a color hexadecimal de 6 dígitos
- 7. Convertir lista a tupla en Python
- 8. Cómo convertir códigos de color HEX RGB a UIColor?
- 9. Convertir valores RGB al nombre de color
- 10. Python convertir diccionario en tupla
- 11. ¿Cómo convertir un color de cadena a su código hexadecimal o RGB?
- 12. Convertir un valor de color RGB en hexadecimal
- 13. Cómo generar un código alfanumérico único de seis dígitos en Ruby
- 14. Cómo convertir Hex a RGB?
- 15. ¿Cómo convertir una matriz a una Tupla?
- 16. ¿Cómo puedo convertir una imagen RGB a escala de grises pero mantener un solo color?
- 17. Java: cómo convertir el color RGB a CIE Lab
- 18. Convertir RGB a ColorName Cadena Javascript
- 19. Cómo convertir el "color de fondo" al formato rgb()?
- 20. Convertir letra a dígitos
- 21. ¿Cómo convertir un color RGB al color de 8 bits más parecido?
- 22. color RGB a HSV en javascript?
- 23. ¿Cómo puedo convertir un nombre de color en un vector RGB de 3 elementos?
- 24. Convertir valores RGB a Entero
- 25. cómo convertir hexadecimal a RGB
- 26. Asignando un entero a un color RGB en C#
- 27. Convierta un valor de color RGB en Decimal
- 28. Convertir RGB RGBA a tomar en consideración fondo
- 29. Cómo convertir de hex a rgb usando Java?
- 30. Código de color RGB para el acero inoxidable
Ver respuesta para antes http://stackoverflow.com/questions/214359/converting-hex-to-rgb-and-vice-versa --de las tres respuestas, el que tiene la mayoría de votos incluye una fragmento de código python para hacer lo que creo que está buscando. – doug
El término que estás buscando es Hex Triplet. http://en.wikipedia.org/wiki/Hex_color#Hex_triplet –