La quantification des couleurs
La quantification des couleurs (ou color quantization en anglais) dans LibGD fait référence à la réduction du nombre de couleurs utilisées dans une image tout en préservant autant que possible sa qualité visuelle. Ce processus est crucial pour diminuer la taille des images et les rendre plus adaptées à des formats avec des limitations de couleurs, comme le GIF ou le PNG-8. La quantification est souvent utilisée pour convertir des images en couleurs vraies (24 bits) en images à une palette réduite de couleurs, ce qui est particulièrement utile dans les contextes où la taille de fichier et les performances sont importantes. En réduisant le nombre de couleurs, les images peuvent être plus facilement manipulées et affichées dans des environnements où les ressources sont limitées.
Méthodes de quantification des couleurs
LibGD utilise plusieurs algorithmes pour effectuer la quantification des couleurs. L'un des plus courants est l'algorithme Median Cut, divisant l'espace des couleurs en sous-espaces en fonction de la distribution des couleurs dans l'image. Cet algorithme est efficace pour créer une palette représentant au mieux les couleurs les plus significatives de l'image. Un autre algorithme utilisé est l'octree quantization, construisant un arbre octal pour représenter les couleurs. Cette méthode est plus complexe mais permet d'obtenir des résultats plus fins et précis dans la quantification, en particulier pour les images ayant des dégradés subtils.
Optimisation et limites
Bien que la quantification des couleurs soit utile pour réduire la taille des images, elle présente des limitations. En effet, lors de la réduction du nombre de couleurs, certaines informations sont perdues, ce qui peut entraîner des artefacts visuels comme des bandes de couleurs ou des dégradés moins fluides. LibGD permet d'ajuster le nombre de couleurs dans la palette pour trouver un compromis entre la qualité visuelle et la taille du fichier. Il est essentiel d'optimiser cette réduction pour maintenir un bon équilibre entre les deux, surtout dans des applications où la performance est primordiale, telles que les sites web ou les applications mobiles.
Applications et cas d'utilisation
La quantification des couleurs est souvent utilisée dans les applications web et les jeux vidéo où les images doivent être compactes mais avec une qualité visuelle acceptable. Dans LibGD, la quantification des couleurs est particulièrement utile lors de la conversion d'images vers des formats comme GIF, ne supportant qu'une palette de 256 couleurs, ou PNG-8, qui est une version optimisée du PNG pour les images avec une palette réduite. Ces formats sont largement utilisés pour la transparence et les petites icônes, où une taille de fichier minimale est essentielle. Grâce à la quantification, LibGD permet aux développeurs de créer des images adaptées aux contraintes des plateformes tout en maintenant une bonne qualité visuelle.
Les fonctions
Voici les fonctions proposé par LibGD pour la conversion de couleur vraie vers une palette :
Nom | Description |
---|---|
gdImageTrueColorToPaletteSetMethod | Cette fonction permet de sélectionner la méthode de quantification. |
gdImageTrueColorToPaletteSetQuality | Cette fonction permet de choisir un intervalle de qualité pour la quantification. |
gdImageCreatePaletteFromTrueColor | Cette fonction permet de créer une nouvelle image avec palette à partir d'une image en couleur vraie. |
gdImageTrueColorToPalette | Cette fonction permet de convertir une image en couleur vraie en une image avec palette. |
gdImageTrueColorToPaletteSetMethod
int gdImageTrueColorToPaletteSetMethod(gdImagePtr im, int method, int speed); |
Cette fonction permet de sélectionner la méthode de quantification. Cette méthode de quantification est utilisée pour tous les appels ultérieurs à gdImageTrueColorToPaletteet gdImageCreatePaletteFromTrueColor.
Paramètre
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image. |
method | Ce paramètre permet d'indiquer la méthode de quantification, voir gdPaletteQuantizationMethod. |
speed | Ce paramètre permet d'indiquer la vitesse de quantification entre 1 (qualité la plus élevée) et 10 (la plus rapide). 0 sélectionne une valeur par défaut spécifique à la méthode (recommandée). |
Retour
Valeur | Description |
---|---|
Entier | Zéro si la méthode donnée n'est pas valide ou n'est pas disponible ; différent de zéro dans le cas contraire. |
Voir également
gdImageTrueColorToPaletteSetQuality
void gdImageTrueColorToPaletteSetQuality(gdImagePtr im, int min_quality, int max_quality); |
Cette fonction permet de choisir un intervalle de qualité pour la quantification. Cette intervalle de qualité est utilisée dans tous les appels ultérieurs à gdImageTrueColorToPalette et gdImageCreatePaletteFromTrueColor si la méthode de quantification est GD_QUANT_LIQ.
Paramètres
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image. |
min_quality | La qualité minimale est comprise entre 1 et 100 (1 = moche, 100 = parfait). Si la palette ne peut pas représenter l'image avec au moins min_quality, aucune conversion n'est effectuée. |
max_quality | La qualité maximale dans l'intervalle 1 à 100 (1 = moche, 100 = parfait), qui doit être supérieure à la qualité minimale. Si la palette peut représenter l'image avec une qualité supérieure à la qualité maximale, alors moins de couleurs que demandé seront utilisées. |
gdImageCreatePaletteFromTrueColor
gdImagePtr gdImageCreatePaletteFromTrueColor(gdImagePtr im, int dither, int colorsWanted); |
Cette fonction permet de créer une nouvelle image de palette à partir d'une image en vraies couleurs.
Paramètres
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image. |
dither | Ce paramètre permet d'indiquer si le tramage doit être appliqué. |
colorsWanted | Le nombre d'entrées de palette souhaitées. |
Retour
Valeur | Description |
---|---|
Pointeur | Une image de palette nouvellement créée ; NULL en cas d'échec. |
Voir également
gdImageTrueColorToPalette
int gdImageTrueColorToPalette(gdImagePtr im, int dither, int colorsWanted); |
Cette fonction permet de convertir une image en vraies couleurs en une image de palette.
Paramètres
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image. |
dither | Ce paramètre permet d'indiquer si le tramage doit être appliqué. |
colorsWanted | Ce paramètre permet d'indiquer le nombre d'entrées de palette souhaitées. |
Retour
Valeur | Description |
---|---|
Entier | Différent de zéro si la conversion a réussi, zéro sinon. |
Voir également
Utilisation pratique
Voici comment utiliser les fonctions de quantification des couleurs dans LibGD, en partant de la conversion d'une image en couleur vraie (truecolor) vers une image avec palette (palette-based). Le processus implique la sélection d'une méthode de quantification, le réglage de la qualité et la conversion proprement dite.
Initialisation de la bibliothèque et création de l'image en couleur vraie
Avant de commencer à manipuler les fonctions de quantification, vous devez charger ou créer une image en couleur vraie (24 bits, 8 bits par composante de couleur). Voici comment créer une image en couleur vraie simple avec LibGD :
- #include <gd.h>
- #include <stdio.h>
-
- int main() {
- /* Créer une image en couleur vraie de 100x100 pixels */
- gdImagePtr img = gdImageCreateTrueColor(100, 100);
-
- /* Définir quelques couleurs */
- int red = gdImageColorAllocate(img, 255, 0, 0);
- int green = gdImageColorAllocate(img, 0, 255, 0);
- int blue = gdImageColorAllocate(img, 0, 0, 255);
-
- /* Dessiner un rectangle de couleur rouge */
- gdImageFilledRectangle(img, 10, 10, 50, 50, red);
-
- /* Dessiner un rectangle de couleur verte */
- gdImageFilledRectangle(img, 60, 10, 90, 50, green);
-
- /* Dessiner un rectangle de couleur bleue */
- gdImageFilledRectangle(img, 10, 60, 50, 90, blue);
-
- /* Sauvegarder l'image pour visualisation (optionnel) */
- FILE *out = fopen("output_truecolor.png", "wb");
- gdImagePng(img, out);
- fclose(out);
-
- /* Libérer la mémoire */
- gdImageDestroy(img);
-
- return 0;
- }
Sélectionner la méthode de quantification
LibGD propose différentes méthodes de quantification des couleurs. Vous pouvez choisir celle correspondant le mieux à vos besoins. Voici comment sélectionner une méthode de quantification à l'aide de la fonction gdImageTrueColorToPaletteSetMethod :
- #include <gd.h>
- #include <stdio.h>
-
- int main() {
- /* Charger une image en couleur vraie (par exemple, une image préexistant) */
- FILE *in = fopen("input_truecolor.png", "rb");
- gdImagePtr img = gdImageCreateFromPng(in);
- fclose(in);
-
- /* Sélectionner la méthode de quantification (par exemple, Median Cut) */
- gdImageTrueColorToPaletteSetMethod(img, GD_QUANTIZE_MEDIAN_CUT);
-
- /* Sauvegarder l'image pour visualisation */
- FILE *out = fopen("output_palette.png", "wb");
- gdImagePng(img, out);
- fclose(out);
-
- /* Libérer la mémoire */
- gdImageDestroy(img);
-
- return 0;
- }
Choisir une plage de qualité pour la quantification
La fonction gdImageTrueColorToPaletteSetQuality permet d'ajuster la qualité de la quantification. Vous pouvez spécifier un facteur de qualité pour obtenir un meilleur compromis entre la taille du fichier et la fidélité des couleurs. Voici un exemple de réglage de la qualité de quantification :
- #include <gd.h>
- #include <stdio.h>
-
- int main() {
- /* Charger une image en couleur vraie */
- FILE *in = fopen("input_truecolor.png", "rb");
- gdImagePtr img = gdImageCreateFromPng(in);
- fclose(in);
-
- /* Choisir un niveau de qualité pour la quantification (entre 0 et 100) */
- gdImageTrueColorToPaletteSetQuality(img, 90); // 90 pour une qualité élevée
-
- /* Sauvegarder l'image avec palette */
- FILE *out = fopen("output_quality_palette.png", "wb");
- gdImagePng(img, out);
- fclose(out);
-
- /* Libérer la mémoire */
- gdImageDestroy(img);
-
- return 0;
- }
Convertir l'image en couleur vraie en image avec palette
La fonction gdImageTrueColorToPalette effectue la conversion finale d'une image en couleur vraie vers une image avec une palette de couleurs réduite. Vous pouvez spécifier la taille de la palette (généralement 256 couleurs au maximum pour le format GIF ou PNG-8).
- #include <gd.h>
- #include <stdio.h>
-
- int main() {
- /* Charger l'image en couleur vraie */
- FILE *in = fopen("input_truecolor.png", "rb");
- gdImagePtr img = gdImageCreateFromPng(in);
- fclose(in);
-
- /* Convertir l'image en couleur vraie en image avec palette */
- gdImageTrueColorToPalette(img, 256); /* Utilise une palette de 256 couleurs */
-
- /* Sauvegarder l'image avec palette */
- FILE *out = fopen("output_converted_palette.png", "wb");
- gdImagePng(img, out);
- fclose(out);
-
- /* Libérer la mémoire */
- gdImageDestroy(img);
-
- return 0;
- }
Finalisation et nettoyage
Assurez-vous de libérer la mémoire après chaque manipulation d'image avec la fonction gdImageDestroy. Cela est essentiel pour éviter les fuites de mémoire dans votre programme :
- gdImageDestroy(img);