Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
Rust
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Les fichiers d'entête de bibliothèque
Les fichiers de code source
Référence des fonctions
Les premiers pas
Les formats d'image
La quantification des couleurs
Le recadrage d'image
Le rendu des polices de caractères FreeType dans LibGD
Les filtres d'image
Polices de caractères intégrées
Les matrices
Les transformations
Les entrées/sorties AVIF
Les entrées/sorties BMP
Les entrées/sorties GD
Les entrées/sorties GD2
Les entrées GIF
Les sorties GIF
Les entrées/sorties HEIF
Les entrées/sorties JPEG
Les entrées/sorties PNG
Les entrées TGA
Les entrées/sorties TIFF
Les entrées/sorties WBMP
Les entrées/sorties WebP
Les entrées/sorties XBM
Les entrées XPM
Police de caractères géante
Grande police de caractères
Police de caractères moyennement grasse
Petite police de caractères
Très petite police de caractères
Préface
Notes légales
Dictionnaire
Recherche

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 :

  1. #include <gd.h>
  2. #include <stdio.h>
  3.  
  4. int main() {
  5.     /* Créer une image en couleur vraie de 100x100 pixels */
  6.     gdImagePtr img = gdImageCreateTrueColor(100, 100);
  7.  
  8.     /* Définir quelques couleurs */
  9.     int red = gdImageColorAllocate(img, 255, 0, 0);
  10.     int green = gdImageColorAllocate(img, 0, 255, 0);
  11.     int blue = gdImageColorAllocate(img, 0, 0, 255);
  12.  
  13.     /* Dessiner un rectangle de couleur rouge */
  14.     gdImageFilledRectangle(img, 10, 10, 50, 50, red);
  15.  
  16.     /* Dessiner un rectangle de couleur verte */
  17.     gdImageFilledRectangle(img, 60, 10, 90, 50, green);
  18.  
  19.     /* Dessiner un rectangle de couleur bleue */
  20.     gdImageFilledRectangle(img, 10, 60, 50, 90, blue);
  21.  
  22.     /* Sauvegarder l'image pour visualisation (optionnel) */
  23.     FILE *out = fopen("output_truecolor.png", "wb");
  24.     gdImagePng(img, out);
  25.     fclose(out);
  26.  
  27.     /* Libérer la mémoire */
  28.     gdImageDestroy(img);
  29.  
  30.     return 0;
  31. }

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 :

  1. #include <gd.h>
  2. #include <stdio.h>
  3.  
  4. int main() {
  5.     /* Charger une image en couleur vraie (par exemple, une image préexistant) */
  6.     FILE *in = fopen("input_truecolor.png", "rb");
  7.     gdImagePtr img = gdImageCreateFromPng(in);
  8.     fclose(in);
  9.  
  10.     /* Sélectionner la méthode de quantification (par exemple, Median Cut) */
  11.     gdImageTrueColorToPaletteSetMethod(img, GD_QUANTIZE_MEDIAN_CUT);
  12.  
  13.     /* Sauvegarder l'image pour visualisation */
  14.     FILE *out = fopen("output_palette.png", "wb");
  15.     gdImagePng(img, out);
  16.     fclose(out);
  17.  
  18.     /* Libérer la mémoire */
  19.     gdImageDestroy(img);
  20.  
  21.     return 0;
  22. }

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 :

  1. #include <gd.h>
  2. #include <stdio.h>
  3.  
  4. int main() {
  5.     /* Charger une image en couleur vraie */
  6.     FILE *in = fopen("input_truecolor.png", "rb");
  7.     gdImagePtr img = gdImageCreateFromPng(in);
  8.     fclose(in);
  9.  
  10.     /* Choisir un niveau de qualité pour la quantification (entre 0 et 100) */
  11.     gdImageTrueColorToPaletteSetQuality(img, 90);  // 90 pour une qualité élevée
  12.  
  13.     /* Sauvegarder l'image avec palette */
  14.     FILE *out = fopen("output_quality_palette.png", "wb");
  15.     gdImagePng(img, out);
  16.     fclose(out);
  17.  
  18.     /* Libérer la mémoire */
  19.     gdImageDestroy(img);
  20.  
  21.     return 0;
  22. }

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).

  1. #include <gd.h>
  2. #include <stdio.h>
  3.  
  4. int main() {
  5.     /* Charger l'image en couleur vraie */
  6.     FILE *in = fopen("input_truecolor.png", "rb");
  7.     gdImagePtr img = gdImageCreateFromPng(in);
  8.     fclose(in);
  9.  
  10.     /* Convertir l'image en couleur vraie en image avec palette */
  11.     gdImageTrueColorToPalette(img, 256);  /* Utilise une palette de 256 couleurs */
  12.  
  13.     /* Sauvegarder l'image avec palette */
  14.     FILE *out = fopen("output_converted_palette.png", "wb");
  15.     gdImagePng(img, out);
  16.     fclose(out);
  17.  
  18.     /* Libérer la mémoire */
  19.     gdImageDestroy(img);
  20.  
  21.     return 0;
  22. }

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 :

  1. gdImageDestroy(img);


PARTAGER CETTE PAGE SUR
Dernière mise à jour : Mardi, le 8 octobre 2024