La conversion d'une couleur RVB tuple à un code à six chiffres, en Python
J'ai besoin de convertir (0, 128, 64) à quelque chose comme ceci #008040. Je ne suis pas sûr de ce que pour appeler le dernier, en faisant une recherche difficile.
- Voir l'avant AFIN de répondre à stackoverflow.com/questions/214359/... --trois réponses, l'une avec le plus de votes comprend un long extrait de code python pour faire ce que je crois que vous êtes après.
- Le terme que vous cherchez est Triplet de sortilège. en.wikipedia.org/wiki/Hex_color#Hex_triplet
Vous devez vous connecter pour publier un commentaire.
Utiliser le format de l'opérateur
%
:Notez qu'il ne vérifie pas les limites...
Il utilise la méthode préférée de la chaîne de formatage, comme décrit dans le PEP 3101. Il utilise également
min()
etmax
pour s'assurer que0 <= {r,g,b} <= 255
.Mise à jour ajouté la pince fonction comme indiqué ci-dessous.
Mise à jour à Partir du titre de la question et le contexte, il devrait être évident qu'il s'attend à 3 ints dans [0,255] et retournera toujours une couleur lorsqu'il est passé 3 ints. Cependant, à partir des commentaires, cela peut ne pas être évident pour tout le monde, qu'elle soit explicitement dit:
def clamp(x): return max(0, min(x, 255))
if not(0 <= x <= 255): raise ValueError('rgb (%r) not in range(256)' % x)
0 <= obj <= 255
?type(x).__name__ != 'list' and type(x).__name__ != 'brunette'
. Il est possible de transmettre ces valeurs dansclamp
que c'est de passerint
s'. À moins que vous proposez que l'on observe une sorte de convention à passerint
valeurs dans cette fonction? Un accord sur les entrées valides? Peut-être un pacte de conditions mutuellement acceptables?type(x).__name__ != 'list' etc
est ridicule-essayezisinstance(x, int)
. L'effet pratique: si "quelqu'un" le fait de leur travail, un code supplémentaire ici est gaspillée. Sinon, la vérification met en évidence le problème de serrage renferme. Dissimulation des erreurs est mauvais. Fin de l'histoire.C'est une vieille question, mais pour information, j'ai développé un package avec des utilitaires relative aux couleurs et carte des couleurs et contient les rgb2hex de la fonction vous avez été à la recherche pour convertir triplet en valeur hexa (qui peut être trouvé dans de nombreux autres paquets, par exemple, matplotlib). C'est sur pypi
et puis
Validité des données est vérifiée (les valeurs doivent être comprises entre 0 et 255).
J'ai créé un plein programme en python pour cela les fonctions suivantes peuvent convertir rvb en hexadécimal et vice versa.
Vous pouvez voir le code complet et tutoriel sur le lien suivant : RVB en Hexadécimal et en Hex de conversion RGB à l'aide de Python
ou
python3 est légèrement différente
Je sais, one-liners en Python ne sont pas nécessairement regarda gentiment. Mais il y a des moments où je ne peux pas résister à prendre avantage de ce que le Python analyseur ne le permettent. C'est la même réponse que Dietrich du Ppe solution (la meilleure), mais enveloppée dans une seule ligne de la fonction. Donc, merci à vous Dietrich!
Je l'utilise maintenant avec tkinter 🙂
vous pouvez utiliser lambda et f-cordes(disponible en python 3.6+)
utilisation
rgb2hex(r,g,b) #output = #hexcolor
hex2rgb("#hex") #output = (r,g,b) hexcolor must be in #hex format
Dans Python 3.6, vous pouvez utiliser f-chaînes pour faire de ce nettoyant:
Bien sûr, vous pouvez mettre dans un fonction, et comme un bonus, obtenir des valeurs arrondies et converti en int:
Ici est le plus complet de la fonction de gestion des situations dans lesquelles vous pourriez avoir des valeurs RVB dans la gamme [0,1] ou la gamme [0,255].
Notez que cela fonctionne uniquement avec python3.6 et au-dessus.
Ci-dessus est l'équivalent de: