Maison  >  Article  >  interface Web  >  Comment convertir un tuple de couleur RVB en un nom de couleur anglais en Python ?

Comment convertir un tuple de couleur RVB en un nom de couleur anglais en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 13:37:03485parcourir

How to Convert an RGB Color Tuple to an English Color Name in Python?

Convertir la couleur RVB en nom de couleur anglais en Python

Vous souhaitez transformer un tuple de couleur RVB en un nom de couleur, tel que « jaune » ' ou 'bleu'.

Considérez le code suivant :

<code class="python">import Image
im = Image.open("test.jpg")
n, color = max(im.getcolors(im.size[0]*im.size[1]))
print color
# (119, 172, 152)</code>

Ce code extrait la couleur dominante d'une image et la stocke sous forme de tuple. Comment pouvez-vous convertir ce tuple en nom de couleur en Python ?

Solution :

Le package webcolors propose une fonction utile appelée rgb_to_name() :

rgb_to_name(rgb_triplet, spec='css3')

Cette fonction convertit un triplet de valeurs RVB entières en son nom de couleur correspondant dans une spécification de couleur spécifiée (par exemple, « css3 »). Par exemple :

<code class="python">import webcolors
rgb_to_name((0, 0, 0)) # 'black'</code>

Pour trouver le nom de couleur le plus proche d'un tuple RVB donné, vous pouvez utiliser une fonction personnalisée comme la suivante :

<code class="python">import math
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())]</code>

Vous pouvez ensuite utiliser la fonction suivante pour récupérer à la fois le nom réel de la couleur s'il existe et le nom correspondant le plus proche :

<code class="python">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</code>

Avec cette fonction, vous pouvez obtenir à la fois le nom exact de la couleur ou l'approximation la plus proche pour un tuple RVB donné.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn