Ho bisogno di convertire (0, 128, 64) in qualcosa del genere # 008040. Non sono sicuro di cosa chiamare quest'ultimo, rendendo difficile la ricerca.Conversione di una tupla di colori RGB in un codice a sei cifre, in Python
risposta
Utilizzare l'operatore di formato %
:
>>> '#%02x%02x%02x' % (0, 128, 64)
'#008040'
noti che non controllerà limiti ...
>>> '#%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))
Questo utilizza il metodo preferito di formattazione di stringhe, come described in PEP 3101. Utilizza anche min()
e max
per garantire che 0 <= {r,g,b} <= 255
.
L'aggiornamento ha aggiunto la funzione di serraggio come suggerito di seguito.
Aggiornamento Dal titolo della domanda e dal contesto indicato, dovrebbe essere ovvio che ciò richiede 3 pollici in [0,255] e restituirà sempre un colore quando viene passato 3 di tali valori. Tuttavia, dai commenti, questo potrebbe non essere evidente a tutti, in modo da lasciarlo essere esplicitamente dichiarato:
fornito tre
int
valori, questo restituirà una tripletta esadecimale valida che rappresenta un colore. Se tali valori sono compresi tra [0,255], verranno trattati come valori RGB e restituiranno il colore corrispondente a tali valori.
Un solo suggerimento: 'pinza def (x): return max (0, min (x, 255))' –
Buon suggerimento. Grazie Marco, aggiornerò la soluzione. –
@Jesse Dhillon: "clamping" == "fail in modo silenzioso". Prova qualcosa del tipo: 'se non (0 <= x <= 255): genera ValueError ('rgb (% r) non compreso nell'intervallo (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 è leggermente diverso
from base64 import b16encode
print(b'#'+b16encode(bytes(triplet)))
Questa è una vecchia questione, ma per informazioni, ho sviluppato un pacchetto con alcune utilità relative ai colori e mappe di colori e contiene la funzione rgb2hex che stavi cercando per convertire la tripletta in valore hexa (che può essere trovato in molti altri pacchetti, ad es. matplotlib). È sulla pypi
pip install colormap
e poi
>>> from colormap import rgb2hex
>>> rgb2hex(0, 128, 64)
'##008040'
validità degli ingressi è selezionata (valori devono essere tra 0 e 255).
Ho creato un programma Python completo per esso le seguenti funzioni possono convertire rgb in esadecimale e 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')))
È possibile vedere il codice completo e un'esercitazione al seguente link: RGB to Hex and Hex to RGB conversion using Python
In Python 3.6, è possibile utilizzare F-stringhe per rendere questo più pulita:
rgb = (0,128, 64)
f'#{rgb[0]:02x}{rgb[1]:02x}{rgb[2]:02x}'
Naturalmente si può mettere che in una funzione, e come bonus, valori ottenere arrotondata e convertito 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)
so one-liner in Python non sono nece ssarily guardò gentilmente. Ma ci sono momenti in cui non riesco a resistere sfruttando ciò che il parser Python consente. È la stessa risposta della soluzione di Dietrich Epp (la migliore), ma racchiusa in una singola linea. Quindi, grazie Dietrich!
lo sto usando ora con tkinter :-)
Ecco una funzione più completa per le situazioni di gestione in cui si possono avere valori RGB nella gamma [0,1] o la gamma [ 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. RGB a XYZ e colori Lab conversione
- 2. RGB a colori HSV in javascript?
- 3. Python: conversione da tupla a stringa?
- 4. Separatori di cifre in codice Python
- 5. Come creare una tupla di una tupla vuota in Python?
- 6. da RGB a YCbCr Problemi di conversione
- 7. Python conversione di una tupla (di stringhe) di lunghezza sconosciuta in una lista di stringhe
- 8. Estrarre il codice RGB o a 6 cifre dalla tavolozza Seaborn
- 9. Conversione di un elenco di liste ad una tupla in Python
- 10. SASS: la conversione da RGB a RGBA
- 11. Conversione di Scala Iterable [tupla] in RDD
- 12. Tupla multipla a tupla a due coppie in Python?
- 13. Confronta i colori RGB in C#
- 14. RGB Algoritmo di approssimazione dei colori
- 15. Filtra una tupla con un'altra tupla in Python
- 16. Fless Actionscript: conversione di # colori in uint
- 17. Come inizializzare un'istanza di una sottoclasse di tupla in Python?
- 18. SPOJ PPATH, Conversione di un dato primo di 4 cifre in un altro numero a 4 cifre
- 19. Aggiunta di un valore a una tupla
- 20. Esiste un plug-in Vim per evidenziare esadecimale, Rgb, colori
- 21. Conversione di una stringa in un elenco in Python
- 22. conversione di un codice in lattice in codice mathml o svg in python
- 23. Corretta conversione da YUV422 a RGB
- 24. Inserimento di un elemento in una tupla
- 25. 1000 cifre di pi in python
- 26. OpenCV conversione di immagini da RGB a HSV
- 27. conversione di una stringa in dizionario Python
- 28. Conversione da int RGB in esadecimale
- 29. Conversione di un'immagine in pygame in una matrice 2D di valori RGB
- 30. Conversione immagine da RGB a spazio di colore HSV
Vedi prima SO rispondere http://stackoverflow.com/questions/214359/converting-hex-to-rgb-and-vice-versa of le tre risposte, quello con il maggior numero di voti include un snippet di codice python stand-alone per fare ciò che credo tu stia cercando. – doug
Il termine che stai cercando è Hex Triplet. http://en.wikipedia.org/wiki/Hex_color#Hex_triplet –