⚠️ Ceci est un site de traduction non officiel, sans lien avec ImageMagick Studio LLC. Pour des informations officielles, consultez la page originale (https://imagemagick.org/color-management/).

Gestion des couleurs

En raison de la standardisation de sRGB sur Internet, la plupart des formats d'image utilisent sRGB comme espace colorimétrique de travail par défaut. Si l'espace colorimétrique d'une image est inconnu et qu'il s'agit d'un format d'image de 8 à 16 bits, supposer qu'elle est dans l'espace colorimétrique sRGB est un choix sûr. Cela s'étend également aux niveaux de gris. Nous supposons des niveaux de gris non linéaires. Ces hypothèses sont remplacées si un format d'image particulier inclut des métadonnées d'espace colorimétrique et / ou de gamma. ImageMagick suppose une couleur linéaire si l'espace colorimétrique est RGB au lieu de sRGB. Vous pouvez également remplacer les hypothèses d'espace colorimétrique par défaut avec des profils de couleur ou l'option -set.

ImageMagick prend en charge les profils de couleur, cependant, pour les images sans profil ni déclaration d'espace colorimétrique, ImageMagick suppose un sRGB non linéaire. La plupart des algorithmes de traitement d'image supposent un espace colorimétrique linéaire, il peut donc être prudent de convertir en couleur linéaire ou de supprimer la fonction gamma avant d'appliquer certains algorithmes de traitement d'image. Par exemple,

magick myimage.jpg -colorspace RGB -resize 200% -colorspace sRGB mybigimage.jpg

Pour déclarer qu'une image est en RGB linéaire plutôt qu'en sRGB, vous pouvez utiliser l'option set :

magick myimage.png -set colorspace RGB myRGBimage.png

Notez que déclarer une image comme linéaire n'est pas la même chose que convertir l'image en linéaire. La déclarer comme linéaire ne fait que définir les métadonnées et ne modifie pas les données de pixels. Tandis que la conversion en linéaire modifie réellement les données de pixels comme décrit plus en détail ci-dessous.

Ensuite, les informations verbeuses du fichier de sortie indiquent l'espace colorimétrique comme RGB. Cela ne fonctionne que sur les types d'image contenant des métadonnées qui distinguent le RGB linéaire du sRGB non linéaire, comme PNG et GIF. Par conséquent, si la commande ci-dessus est exécutée avec un format de sortie JPG ou TIF, les informations verbeuses de l'espace colorimétrique affichent toujours sRGB. Pour que la sortie JPG sache correctement qu'elle est en RGB linéaire, incluez un profil de couleur approprié.

Par défaut, la conversion d'images couleur en niveaux de gris renvoie des niveaux de gris non linéaires. Pour convertir plutôt en niveaux de gris linéaires, utilisez les options -set, -intensity ou -grayscale :

convert myimage.png -colorspace LinearGray myRGBimage.png
convert myimage.png -colorspace RGB -colorspace Gray myRGBimage.png
convert myimage.png -intensity Rec709luminance -colorspace gray myRGBimage.png
convert myimage.png -grayscale Rec709luminance myRGBimage.png

Notez que LinearGray est nouveau depuis ImageMagick 6.9.9-29 et 7.0.7-17.

Le même concept est nécessaire lors de la séparation des canaux. Normalement, la conversion visant à séparer chaque canal d'une image couleur sRGB produit des images en niveaux de gris non linéaires distinctes. Cependant, le même concept peut être appliqué si l'on souhaite conserver les canaux séparés en niveaux de gris linéaires. Par exemple, la commande suivante produit des canaux en niveaux de gris linéaires.

magick myimage.png -colorspace RGB -separate myimage_channels_%d.png

Lors de la séparation et de la recombinaison des canaux, avec un éventuel traitement intermédiaire, il est important d'identifier l'espace colorimétrique utilisé, en particulier lors de la recombinaison. Par exemple,

magick myimage.png -separate myimage_channels_%d.png
magick myimage_channels_*.png -combine myimage2.png

Dans l'exemple ci-dessus, les canaux séparés sont non linéaires et la valeur par défaut de -combine est de supposer des canaux non linéaires. Le résultat est donc le même que l'entrée.

Si l'on souhaite séparer en canaux de niveaux de gris linéaires, puis les recombiner ultérieurement en couleur non linéaire, peut-être après un certain traitement, utilisez alors le même concept que ci-dessus pour conserver les niveaux de gris linéaires :

magick myimage.png -set colorspace RGB -separate myimage_channels_%d.png
magick myimage_channels_*.png -set colorspace RGB -combine -colorspace sRGB myimage2.png

Lors d'une conversion vers un autre espace colorimétrique puis du retour, par exemple entre sRGB et HSL, les deux commandes suivantes traitent le premier cas des canaux non linéaires et le second cas des canaux linéaires :

magick myimage.png -colorspace HSL -separate myimage_channels_%d.png
magick myimage_channels_*.png -set colorspace HSL -combine -colorspace sRGB myimage2.png


magick myimage.png -set colorspace RGB -colorspace HSL -separate myimage_channels_%d.png
magick myimage_channels_*.png -set colorspace HSL -combine -colorspace RGB -set colorspace sRGB myimage2.png

La majorité des formats d'image supposent un espace colorimétrique sRGB (par exemple JPEG, PNG, etc.). Quelques-uns ne prennent en charge que le RGB linéaire (par exemple EXR, DPX, CIN, HDR) ou uniquement le GRAY linéaire. Quelques formats prennent en charge CMYK. Par exemple, JPG le fait, mais PNG non. Il existe ensuite le format occasionnel qui prend également en charge LAB (c'est-à-dire CIELAB) (par exemple TIFF, PSD, JPG, JP2). Pour plus d'informations, consultez les pages Colorspace et Supported Formats.

Lors de la spécification de couleurs individuelles sous forme de rgb(...) ou hexadécimale, ces couleurs seront toujours interprétées comme non linéaires, c'est-à-dire comme des couleurs sRGB. Cependant, si l'on souhaite créer des couleurs linéaires, utilisez icc-color(rgb,r,g,b), où r, g et b sont compris entre 0 et 1. Consultez la page Color.