Page 1 sur 1

Infobulle des couleurs indexées

Publié : 06 mars 2020, 19:59
par sambricole
Bonsoir tout le monde,
je cherche comment faire apparaître en infobulle le nom des
couleurs d'une palette choisi en mode " couleur indexées "
En effet, si on choisit une palette de couleur, dans l'onglet
palette, le nom est indiqué ( si bien sur il est existant dans le fichier
GPL) lorsque l'on se déplace avec le curseur de la souris sur
les couleurs, les noms s'affichent.
Mais cela ne fonctionne pas lorsqu'elles sont indexées.
Auriez vous une astuce svp ?
Merci
Sam

Re: Infobulle des couleurs indexées

Publié : 22 mai 2020, 18:22
par Gimphried
Bonjour,

Liste des palettes à l'ouverture de Gimp sans image ouverte :
1. Gimp menu "Filtres" > "Script-Fu" > "Console"

Code : Tout sélectionner

(gimp-palettes-get-list "")
Coller l'expression parenthésée Lisp dans la zone de saisie de la console Script-Fu et valider par Entrée :
Doc Gimp Figure 13.3. Utilisation de la console.

Le résultat est une liste avec en premier élément le nombre de palettes :
(41 ("Historique des couleurs" "Bears" "Bgold" "Blues" "Borders" ... "Named Colors" ... "Visibone" "Visibone 2" "Volcano" "Warm Colors" "Web"))

2. Gimp menu "Fichier" > "Ouvrir..."
choisir par exemple n'importe quel GIF comme "IndexedPalette.gif" 96 Ko

3. Gimp menu "Fenêtres" > "Fenêtres ancrables" > "Palette des couleurs indexées"
Index couleur: 0
Notation HTML: 3a3747
Le nom n'est pas présenté que cela soit dans un champ ou sous forme de bulle d'aide.

4. Console Script-Fu : liste des palettes avec ce GIF ouvert :

Code : Tout sélectionner

(gimp-palettes-get-list "")
(42 ("Carte des couleurs de l’image n°8 ([Sans titre])" "Historique des couleurs" "Bears" "Bgold" "Blues" "Borders" ... "Named Colors" ... "Visibone" "Visibone 2" "Volcano" "Warm Colors" "Web"))

5. Script-Fu : extraction du nom de la palette associée :

Code : Tout sélectionner

(caadr (gimp-palettes-get-list ""))
"Carte des couleurs de l’image n°8 ([Sans titre])"

Le nom de cette palette importe peu. Elle a été générée à partir d'un JPEG par Gimp menu "Image" > "Mode" > "Couleurs indexées..."
C'est la fonction TinyScheme qui l'extrait qu'il faut retenir.

6. Script-Fu : nombre de couleurs dans la palette de couleurs indexées :

Code : Tout sélectionner

(gimp-palette-get-info (caadr (gimp-palettes-get-list "")))
(256)
Un GIF comporte bien jusqu'à 256 couleurs.

7. Le nom de la dernière couleur n'est pas spécifié :

Code : Tout sélectionner

(gimp-palette-entry-get-name (caadr (gimp-palettes-get-list "")) 255)
("#255")

9. La dernière couleur est :

Code : Tout sélectionner

(gimp-palette-entry-get-color (caadr (gimp-palettes-get-list "")) 255)
((254 254 244))

10. En hexa :

Code : Tout sélectionner

(color-rgb-to-hexa-decimal (car (gimp-palette-entry-get-color (caadr (gimp-palettes-get-list "")) 255)))
"#fefef4" :shock:

Cordialement.

Nom d'une couleur RGB

Publié : 22 mai 2020, 18:26
par Gimphried
Comment convertir le codage RGB d'une couleur indexée (ou pas) en nom ?

Bonjour,

1. Dans Win10 File Explorer, trier par taille : :idea:
C:\Program Files\GIMP\share\gimp\2.0\palettes
Named_Colors.gpl arrive en tête avec 17 Ko. Il y a de fortes chances que les couleurs soient nommées.

2. Nombre de couleurs dans la palette "Named Colors" :

Code : Tout sélectionner

(gimp-palette-get-info "Named Colors")
(448)

3. Nom et RGB de la dernière couleur de cette palette :

Code : Tout sélectionner

(gimp-palette-entry-get-name "Named Colors" 447)
("light green (144 238 144)")

4. Liste des 448 couleurs et noms de cette palette de référence :

Code : Tout sélectionner

(export-palette "Named Colors" color-rgb-to-hexa-decimal name-no-conversion "Begin\n" "" "" "" "" "" "\n" "\nEnd")

Code : Tout sélectionner

Begin
snow (255 250 250)#fffafa
ghost white (248 248 255)#f8f8ff
...
dark red (139   0   0)#8b0000
light green (144 238 144)#90ee90
End#t
5. A faire (to do) :
  1. Enregistrer ces noms de couleur dans un tableau associatif avec comme clef son codage RGB ;
  2. Compléter l'apprentissage de ce tableau associatif avec les paires (nom, codage RBG) de la palette "Visibone 2" en filtrant les doublons ;
  3. Interroger ce tableau associatif avec la clef de la couleur indexée n° 255 : "#fefef4" :shock:
Si l'association a été apprise, le nom correct sera retourné. :oops: Sinon :twisted:

6. Pour aller plus loin
Bing.com "List of color names with RGB and Hex values"

7. Sam, vous pourriez faire une demande d'évolution d'une prochaine version de Gimp pour l'affichage du nom de la couleur indexée en bulle d'aide. :mrgreen:

Cordialement.

Gimp Python tableaux associatifs : couleur RGB vs son nom

Publié : 22 mai 2020, 18:56
par Gimphried
Nom de couleur vers codage RGB en hexa et réciproquement en Python

Bonjour,

Gimp menu "Filtres" > "Python-Fu" > "Console"
GIMP 2.10.18 Python Console
Python 2.7.17 (default, Oct 23 2019, 05:20:31) [GCC 9.2.0 64 bit (AMD64)]
  • Copier l'expression Python située après l'invite ">>> "
  • Coller après l'invite ">>> " dans la console Python-Fu :

Code : Tout sélectionner

>>> print("Hello World!")
Hello World!

Code : Tout sélectionner

>>> gimp.version
(2, 10, 18)

Usage :
Il est facultatif de copier-coller les commentaires commençant par "#".
Il n'est pas possible de copier plusieurs lignes à cause des invites ">>> " à supprimer.
Copier-coller ligne à ligne.

Code : Tout sélectionner

>>> # Gimp menu "Aide" (Help) > "Navigateur de procédures" (Browser of procedures)
>>> # PDB stands for Procedure DataBase of scriptable functions
>>> # Get the colors of the palette named "Named Colors"
>>> nbrColor, arrColor = pdb.gimp_palette_get_colors("Named Colors")
>>> nbrColor
448
>>> arrColor[0]
gimpcolor.RGB(1.0, 0.9803921568627451, 0.9803921568627451, 1.0)

Code : Tout sélectionner

>>> # Define our RGB function in: red, green, blue in bytes. Out: hexa string
>>> RGB = lambda red, green, blue : "#%02x%02x%02x" % (red, green, blue)
>>> RGB(144, 238, 144) # Please note the comma as separator in the list of parameters
'#90ee90'

Code : Tout sélectionner

>>> # First color name of the palette named "Named Colors"
>>> entry_name = pdb.gimp_palette_entry_get_name("Named Colors", 0)
>>> entry_name
'snow (255 250 250)'

>>> # Extract the parenthesed RGB expression
>>> entry_name.split(" (")
['snow', '255 250 250)']
>>> entry_name.split(" (")[1] # List of RGB parameters without the comma
'255 250 250)'

Code : Tout sélectionner

>>> # Name of the last color with RGB TinyScheme list without comma
>>> pdb.gimp_palette_entry_get_name("Named Colors", nbrColor - 1)
'light green (144 238 144)'

>>> # hexa of the last color. Replace TinyScheme list with Python list having comma
>>> eval ("RGB(" + pdb.gimp_palette_entry_get_name("Named Colors", nbrColor - 1).split(" (")[1].replace(' ', ','))
'#90ee90'

Code : Tout sélectionner

>>> # Internal code of the last color with floats
>>> pdb.gimp_palette_entry_get_color("Named Colors", nbrColor - 1)
gimpcolor.RGB(0.5647058823529412, 0.9333333333333333, 0.5647058823529412, 1.0)

Adapter le chemin du script généré "dictPalette.py" :

Code : Tout sélectionner

>>> # Set the current palette as "Named Colors"
>>> pdb.gimp_context_set_palette("Named Colors")

>>> # Export the current palette as Python dictionnary called "colors" by default
>>> pdb.gimp_palette_export_python("C:/Tool/Gimp/python", "dictPalette.py")

Code : Tout sélectionner

>>> # Import the source file defining the dictionnary "colors"
>>> execfile("C:/Tool/Gimp/python/dictPalette.py")
				
>>> colors['gainsboro220220220'] # Associative array with the name of the color as key
'#dcdcdc'

Le codage RBG TinyScheme pollue un peu le nom de la couleur.
Supprimons les chiffres après le nom de la couleur :

Code : Tout sélectionner

>>> import re # (R)egular (E)xpression such as r'(\d+)' meaning only digits

>>> # Create another dictionnary removing any digit in the name of the color
>>> colorName2Hexa = {re.split(r'(\d+)', colorName)[0]: colorHexa for colorName, colorHexa in colors.items()}

>>> colorName2Hexa['gainsboro']
'#dcdcdc'

Finalement, comment à partir du code hexa de la couleur tenter de retrouver le nom de la couleur ?

Il faut échanger la paire (key, value) dans le tableau associatif en créant un nouveau tableau associatif :

Code : Tout sélectionner

>>> # Create the opposite dictionnary where the name key becomes the value
>>> colorHexa2Name = {colorHexa: colorName for colorName, colorHexa in colorName2Hexa.items()}

>>> colorHexa2Name['#dcdcdc']   # The key is the hexa code of the color
'gainsboro'

>>> colorName2Hexa['lightgray'] # The key is the name of the color
'#d3d3d3'

>>> colorHexa2Name['#d3d3d3']
'lightgray'

Les 256 couleurs indexées du GIF sont prises parmi les 16 777 215 couleurs = #FF FFFF = RBG(255, 255, 255) à plus ou moins un près.
Elles ne sont pas nommées pour alléger le poids du GIF.
Il y a peu de chance de les retrouver parmi les 448 couleurs nommées dans la palette "Named Colors".

Code : Tout sélectionner

>>> # Ask if the indexed color of the GIF is known. Oops! Not yet...
>>> colorHexa2Name['#fefef4']
Traceback (most recent call last):
  File "<input>", line 1, in <module>

KeyError: '#fefef4' :shock:

Cinquante-et-unième nuance de gris

Code : Tout sélectionner

>>> # identity function
>>> colorHexa2Name[colorName2Hexa['lightgray']]
'lightgray' :mrgreen:

Cordialement.