Les sorties GIF
Le LibGD offre des fonctionnalités robustes pour produire des images au format GIF, un format d'image couramment utilisé pour des animations simples ou des graphiques statiques avec une palette de couleurs limitée. Grâce aux fonctions de sortie GIF, LibGD permet aux développeurs de convertir leurs images internes en un format compressé et largement compatible avec les navigateurs Web, les logiciels de traitement d'images, et diverses applications. Cela rend la bibliothèque très utile pour générer dynamiquement des images GIF adaptées aux besoins du web ou d'autres contextes logiciels.
La fonction principale utilisée pour la sortie GIF est gdImageGif, écrivant l'image LibGD fournie dans un fichier au format GIF. Cette fonction est simple à utiliser et nécessite un fichier ouvert en écriture pour y écrire les données de l'image. En interne, LibGD prend en charge la compression et le traitement nécessaires pour convertir les données d'image internes (truecolor ou palette) en un fichier GIF valide. Cette méthode est idéale pour générer des fichiers GIF prêts à l'emploi pour le stockage ou la distribution.
Pour plus de flexibilité, LibGD propose également des fonctions comme gdImageGifPtr et gdImageGifCtx. gdImageGifPtr permet de générer une image GIF directement en mémoire, en renvoyant un pointeur vers les données du fichier GIF généré et sa taille. Cela est particulièrement utile dans les applications où les images sont transmises directement via un réseau ou intégrées dans une autre structure de données, sans passer par un fichier intermédiaire. D'autre part, gdImageGifCtx utilise un contexte d'entrée/sortie abstrait (gdIOCtx) pour permettre l'écriture des données GIF dans des flux ou des systèmes personnalisés.
Enfin, les fonctionnalités de sortie GIF de LibGD prennent également en charge la gestion des images interlacées et des couleurs transparentes, ce qui offre une personnalisation accrue lors de la génération des images. La compatibilité avec des concepts comme la transparence rend LibGD encore plus utile pour les graphiques Web modernes. En résumé, les fonctions de sortie GIF de LibGD sont conçues pour répondre à une variété de scénarios, allant de la simple génération de fichiers statiques à des cas d'utilisation plus avancés où les images doivent être manipulées ou distribuées de manière dynamique.
Les fonctions
Voici les fonctions proposé par LibGD pour les sorties GIF :
Nom | Description |
---|---|
gdImageGifPtr | Identique à gdImageGif, sauf qu'elle retourne un pointeur vers une zone mémoire contenant les données GIF. |
gdImageGif | gdImageGif écrit l'image spécifiée dans le fichier désigné au format GIF. |
gdImageGifCtx | Écrit une image GIF via un gdIOCtx. |
gdImageGifAnimBeginPtr | Semblable à gdImageGifAnimBegin, sauf qu'elle écrit les données dans un tampon mémoire. |
gdImageGifAnimBegin | Cette fonction doit être appelée en premier lors de la création d'une animation GIF. |
gdImageGifAnimBeginCtx | Semblable à gdImageGifAnimBegin, sauf qu'elle écrit les données via un gdIOCtx. |
gdImageGifAnimAddPtr | Similaire à gdImageGifAnimAdd (qui contient plus d'informations), sauf qu'elle stocke les données à écrire en mémoire et retourne un pointeur vers celles-ci. |
gdImageGifAnimAdd | Cette fonction écrit des images d'animation GIF comme des frames dans une animation GIF initialisée avec gdImageGifAnimBegin. |
gdImageGifAnimAddCtx | Ajoute une frame d'animation via un gdIOCtxPtr. |
gdImageGifAnimEnd | Termine correctement le fichier GIF. |
gdImageGifAnimEndPtr | Semblable à gdImageGifAnimEnd (contenant plus d'informations), sauf qu'elle stocke les données à écrire en mémoire et retourne un pointeur vers celles-ci. |
gdImageGifAnimEndCtx | Similaire à gdImageGifAnimEnd, mais écrit ses données via un gdIOCtx. |
gdImageGifPtr
void * gdImageGifPtr(gdImagePtr im, int *size); |
Identique à gdImageGif sauf qu'il renvoie un pointeur vers une zone mémoire contenant les données GIF. Cette mémoire doit être libérée par l'appelant lorsqu'elle n'est plus nécessaire.
L'appelant doit appeler gdFree, et non free(). En effet, il n'est pas garanti que LibGD utilisera la même implémentation de malloc, free,... que votre programme.
Le paramètre «size» reçoit la taille totale du bloc de mémoire.
Paramètre
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image à écrire. |
size | Ce paramètre permet d'indiquer la taille de la sortie de l'image résultante. |
Retour
Valeur | Description |
---|---|
Pointeur | Un pointeur vers les données GIF ou NULL si une erreur s'est produite. |
gdImageGif
void gdImageGif(gdImagePtr im, FILE *outFile); |
gdImageGif génère l'image spécifiée dans le fichier spécifié au format GIF. Le fichier doit être ouvert pour l'écriture binaire. (Sous MS-DOS et toutes les versions de Windows, il est important d'utiliser «wb» plutôt que simplement «w» comme mode lors de l'ouverture du fichier ; sous Unix, il n'y a aucune pénalité pour cela). gdImageGif ne ferme pas le fichier ; votre code doit le faire.
Le format GIF ne prend pas en charge les couleurs vraies ; les images GIF peuvent contenir un maximum de 256 couleurs. Si l'image à écrire est une image en couleurs vraies, comme celles créées avec gdImageCreateTrueColor ou chargées à partir d'un fichier image JPEG ou PNG en couleurs vraies, une image temporaire basée sur une palette sera automatiquement créée en interne à l'aide de la fonction gdImageCreatePaletteFromTrueColor. Les pixels de l'image d'origine ne sont pas modifiés. Cette conversion produit des palettes de haute qualité mais nécessite un peu de temps de microprocesseur. Si vous convertissez régulièrement des couleurs vraies en palette de cette manière, vous devriez envisager de créer votre image en tant qu'image basée sur une palette en premier lieu.
Variantes
- gdImageGifCtx génère l'image via une structure gdIOCtx.
- gdImageGifPtr entrepose l'image dans un grand tableau d'octets.
Paramètre
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image à écrire. |
outFile | Ce paramètre permet d'indiquer le pointeur FILE dans lequel écrire l'image. |
Retour
Rien
Exemple
- gdImagePtr im;
- int black, white;
- FILE *out;
- /* Créer l'image */
- im = gdImageCreate(100, 100);
- /* Attribuer l'arrière-plan */
- white = gdImageColorAllocate(im, 255, 255, 255);
- /* Attribuer la couleur du dessin */
- black = gdImageColorAllocate(im, 0, 0, 0);
- /* Dessiner un rectangle */
- gdImageRectangle(im, 0, 0, 99, 99, black);
- /* Ouvrir le fichier de sortie en mode binaire */
- out = fopen("rect.gif", "wb");
- /* Écrire un GIF */
- gdImageGif(im, out);
- /* Fermer le fichier */
- fclose(out);
- /* Détruire l'image */
- gdImageDestroy(im);
gdImageGifCtx
void gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out); |
Écrit une image GIF via un gdIOCtx. Voir gdImageGif.
Paramètre
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image à écrire. |
out | Ce paramètre permet d'indiquer la structure gdIOCtx utilisée pour effectuer l'écriture. |
Retour
Rien
gdImageGifAnimBeginPtr
void * gdImageGifAnimBeginPtr(gdImagePtr im, int *size, int GlobalCM, int Loops); |
Comme gdImageGifAnimBegin, sauf qu'il génère une sortie vers un tampon mémoire. Voir gdImageGifAnimBegin.
La mémoire renvoyée doit être libérée par l'appelant lorsqu'elle n'est plus nécessaire. **L'appelant doit appeler gdFree(), et non free()**, à moins qu'il ne soit absolument certain que les mêmes implémentations de malloc, free,... sont utilisées à la fois au moment de la construction de la bibliothèque et au moment de la construction de l'application (mais ne le faites pas ; cela pourrait toujours changer).
Le paramètre «size» reçoit la taille totale du bloc de mémoire.
Paramètre
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image de référence. |
size | Ce paramètre permet d'indiquer la taille de sortie en octets du résultat. |
GlobalCM | Ce paramètre permet d'indiquer le drapeau de palette de couleurs global : 1 → oui, 0 → non, -1 → faire la valeur par défaut. |
Loops | Ce paramètre permet d'indiquer le nombre de boucles ; 0 → infini, -1 signifie aucune boucle. |
Retour
Valeur | Description |
---|---|
Pointeur | Un pointeur vers les données résultantes (le contenu du début du GIF) ou NULL si une erreur s'est produite. |
gdImageGifAnimBegin
void gdImageGifAnimBegin(gdImagePtr im, FILE *outFile, int GlobalCM, int Loops); |
Cette fonction doit être appelée en tant que première fonction lors de la création d'une animation GIF. Elle écrit les entêtes de fichier GIF corrects dans la sortie du fichier sélectionné et prépare l'ajout d'images pour l'animation. L'argument image n'est pas utilisé pour produire une image dans le fichier, il est uniquement utilisé pour établir la taille de l'image de l'animation GIF, les options d'entrelacement et la palette de couleurs. gdImageGifAnimAdd est utilisé pour ajouter la première image et les suivantes à l'animation, et l'animation doit être terminée en y écrivant un caractère point-virgule (;) ou en utilisant gdImageGifAnimEnd pour le faire.
L'indicateur GlobalCM indique si une carte de couleurs globale (ou une palette) est utilisée dans l'entête GIF89A. Une valeur différente de zéro spécifie qu'une carte de couleurs globale doit être utilisée pour réduire la taille de l'animation. Bien entendu, si les cartes de couleurs des images individuelles diffèrent considérablement, une carte de couleurs globale peut ne pas être une bonne idée. GlobalCM=1 signifie écrire la carte de couleurs globale, GlobalCM=0 signifie ne pas le faire et GlobalCM=-1 signifie effectuer la valeur par défaut, qui consiste actuellement à utiliser une carte de couleurs globale.
Si Loops est égal à 0 ou plus, l'extension Netscape 2.0 pour le nombre de boucles d'animation est écrite. 0 signifie un nombre de boucles infini. -1 signifie que l'extension n'est pas ajoutée, ce qui n'entraîne aucune boucle. -1 est la valeur par défaut.
Variantes
gdImageGifAnimBeginCtx génère l'image via une structure gdIOCtx.
gdImageGifAnimBeginPtr entrepose l'image dans un grand tableau d'octets.
Paramètre
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image de référence. |
outfile | Ce paramètre permet d'indiquer le fichier de sortie FILE*. |
GlobalCM | Ce paramètre permet d'indiquer le drapeau de palette de couleurs global : 1 → oui, 0 → non, -1 → faire la valeur par défaut. |
Loops | Ce paramètre permet d'indiquer le nombre de boucles ; 0 → infini, -1 signifie aucune boucle. |
Retour
Rien
Exemple
Voir gdImageGifAnimBegin.
gdImageGifAnimBeginCtx
void gdImageGifAnimBeginCtx(gdImagePtr im, gdIOCtxPtr out, int GlobalCM, int Loops); |
Comme gdImageGifAnimBegin, sauf qu'il génère une sortie vers gdIOCtx. Voir gdImageGifAnimBegin.
Paramètre
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image de référence. |
out | Ce paramètre permet d'indiquer un pointeur vers la sortie gdIOCtx. |
GlobalCM | Ce paramètre permet d'indiquer le drapeau de palette de couleurs global : 1 → oui, 0 → non, -1 → faire la valeur par défaut. |
Loops | Ce paramètre permet d'indiquer le nombre de boucles ; 0 → infini, -1 signifie aucune boucle. |
Retour
Rien
gdImageGifAnimAddPtr
void * gdImageGifAnimAddPtr(gdImagePtr im, int *size, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm); |
Comme gdImageGifAnimAdd (contenant plus d'informations) sauf qu'il entrepose les données à écrire en mémoire et renvoie un pointeur vers celles-ci.
Cette mémoire doit être libérée par l'appelant lorsqu'elle n'est plus nécessaire. **L'appelant doit appeler gdFree(), et non free(),** à moins qu'il ne soit absolument certain que les mêmes implémentations de malloc, free,... sont utilisées à la fois au moment de la construction de la bibliothèque et au moment de la construction de l'application (mais ne le faites pas ; cela pourrait toujours changer).
Le paramètre «size» reçoit la taille totale du bloc de mémoire.
Paramètre
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image à ajouter. |
size | Ce paramètre permet d'indiquer la taille du tampon de sortie résultant. |
LocalCM | Ce paramètre permet d'indiquer un drapeau. Si 1, utilisez une palette de couleurs locale pour cette image. |
LeftOfs | Ce paramètre permet d'indiquer le déplacement gauche de l'image dans le cadre. |
TopOfs | Ce paramètre permet d'indiquer le déplacement supérieur de l'image dans le cadre. |
Delay | Ce paramètre permet d'indiquer le délai avant la prochaine image (en 1/100 secondes). |
Disposal | Ce paramètre permet d'indiquer le MODE : Comment traiter cette image lorsque la suivante se charge. |
previm | Ce paramètre permet d'indiquer NULL ou un pointeur vers l'image précédente écrite. |
Retour
Valeur | Description |
---|---|
Pointeur | Pointeur vers les données résultantes ou NULL si une erreur s'est produite. |
gdImageGifAnimAdd
void gdImageGifAnimAdd(gdImagePtr im, FILE *outFile, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm); |
Cette fonction écrit des images d'animation GIF dans une animation GIF, ayant été initialisée avec gdImageGifAnimBegin. Avec LeftOfs et TopOfs, vous pouvez placer cette image dans un décalage différent de (0,0) à l'intérieur de l'écran d'image tel que défini dans gdImageGifAnimBegin. Le délai entre l'image précédente et cette image est en unités de 1/100 s. Disposal est généralement gdDisposalNone, ce qui signifie que les pixels modifiés par cette image doivent rester sur l'écran lorsque l'image suivante commence à s'afficher, mais peut également être gdDisposalUnknown (non recommandé), gdDisposalRestoreBackground (restaure la première couleur allouée de la palette globale) ou gdDisposalRestorePrevious (restaure l'apparence de la zone affectée avant le rendu de l'image). Seul gdDisposalNone est un choix judicieux pour la première image. Si previm est passé, l'optimiseur GIF intégré utilisera toujours gdDisposalNone quel que soit le paramètre Disposal.
La définition de l'indicateur LocalCM sur 1 ajoute une palette locale pour cette image à l'animation. Sinon, la palette globale est supposée et l'utilisateur doit s'assurer que les palettes correspondent. Utilisez gdImagePaletteCopy pour le faire.
L'optimisation automatique est activée en donnant l'image précédente comme paramètre. Cette fonction compare ensuite les images et écrit uniquement les pixels modifiés dans la nouvelle image de l'animation. Le paramètre Disposal pour les animations optimisées doit être défini sur 1, également pour la première image. Les paramètres LeftOfs et TopOfs sont ignorés pour les images optimisées. Pour obtenir une bonne optimisation, il est généralement préférable d'utiliser une seule carte de couleurs globale. Pour permettre à gdImageGifAnimAdd de compresser les pixels inchangés via l'utilisation d'une couleur transparente, l'image doit inclure une couleur transparente.
Variantes
gdImageGifAnimAddCtx génère ses données via une structure gdIOCtx.
gdImageGifAnimAddPtr génère ses données dans une mémoire tampon qu'il renvoie.
Paramètre
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image à ajouter. |
outfile | Ce paramètre permet d'indiquer le fichier de sortie FILE* en cours d'écriture. |
LocalCM | Ce paramètre permet d'indiquer le drapeau. Si 1, utilisez une palette de couleurs locale pour cette image. |
LeftOfs | Ce paramètre permet d'indiquer le déplacement gauche de l'image dans le cadre. |
TopOfs | Ce paramètre permet d'indiquer le déplacement supérieur de l'image dans le cadre. |
Delay | Ce paramètre permet d'indiquer le délai avant la prochaine image (en 1/100 secondes). |
Disposal | Ce paramètre permet d'indiquer le MODE : Comment traiter cette image lorsque la suivante se charge. |
previm | Ce paramètre permet d'indiquer NULL ou un pointeur vers l'image précédente écrite. |
Retour
Rien
Exemple
- {
- gdImagePtr im, im2, im3;
- int black, white, trans;
- FILE *out;
-
- im = gdImageCreate(100, 100); /* Créer l'image */
- white = gdImageColorAllocate(im, 255, 255, 255); /* Attribuer l'arrière-plan */
- black = gdImageColorAllocate(im, 0, 0, 0); /* Attribuer la couleur du dessin */
- trans = gdImageColorAllocate(im, 1, 1, 1); /* trans vide pour la compression */
- gdImageRectangle(im, 0, 0, 10, 10, black); /* Dessiner un rectangle */
-
- out = fopen("anim.gif", "wb"); /* Ouvrir le fichier de sortie en mode binaire */
- gdImageGifAnimBegin(im, out, 1, 3); /* Écrire un GIF hdr, une carte clr globale, des boucles */
- /* Écrire la première image. Pas de palette de couleurs locale. Délai = 1 s */
- gdImageGifAnimAdd(im, out, 0, 0, 0, 100, 1, NULL);
-
- /* construire le deuxième cadre */
- im2 = gdImageCreate(100, 100);
- (void)gdImageColorAllocate(im2, 255, 255, 255); /* Fond blanc */
- gdImagePaletteCopy (im2, im); /* Assurez-vous que la palette est identique */
- gdImageRectangle(im2, 0, 0, 15, 15, black); /* Dessine quelque chose */
- /* Autoriser la compression d'animation avec des pixels transparents */
- gdImageColorTransparent (im2, trans);
- gdImageGifAnimAdd(im2, out, 0, 0, 0, 100, 1, im); /* Ajouter un deuxième cadre */
-
- /* construire le troisième cadre */
- im3 = gdImageCreate(100, 100);
- (void)gdImageColorAllocate(im3, 255, 255, 255); /* fond blanc */
- gdImagePaletteCopy (im3, im); /* Assurez-vous que la palette est identique */
- gdImageRectangle(im3, 0, 0, 15, 20, black); /* Dessine quelque chose */
- /* Autoriser la compression d'animation avec des pixels transparents */
- gdImageColorTransparent (im3, trans);
- /* Ajoutez le troisième cadre en le compressant par rapport au deuxième */
- gdImageGifAnimAdd(im3, out, 0, 0, 0, 100, 1, im2);
- gdImageGifAnimEnd(out); /* Marqueur de fin, identique à putc(';', out); */
- fclose(out); /* Ferme le fichier */
-
- /* Détruire les images */
- gdImageDestroy(im);
- gdImageDestroy(im2);
- gdImageDestroy(im3);
- }
gdImageGifAnimAddCtx
void gdImageGifAnimAddCtx(gdImagePtr im, gdIOCtxPtr out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm); |
Ajoute une image d'animation via un gdIOCtxPtr. Voir gdImageGifAnimAdd.
Paramètre
Nom | Description |
---|---|
im | Ce paramètre permet d'indiquer l'image à ajouter. |
out | Ce paramètre permet d'indiquer la sortie gdIOCtxPtr. |
LocalCM | Ce paramètre permet d'indiquer le drapeau. Si 1, utilisez une palette de couleurs locale pour cette image. |
LeftOfs | Ce paramètre permet d'indiquer le déplacement gauche de l'image dans le cadre. |
TopOfs | Ce paramètre permet d'indiquer le déplacement supérieur de l'image dans le cadre. |
Delay | Ce paramètre permet d'indiquer le délai avant la prochaine image (en 1/100 secondes). |
Disposal | Ce paramètre permet d'indiquer le MODE : Comment traiter cette image lorsque la suivante se charge. |
previm | Ce paramètre permet d'indiquer le NULL ou un pointeur vers l'image précédente écrite. |
Retour
Rien
gdImageGifAnimEnd
void gdImageGifAnimEnd(FILE *outFile); |
Termine correctement le fichier GIF.
(Les versions précédentes de la documentation de cette fonction suggéraient simplement d'écrire manuellement un point-virgule (';') à la place, car c'est tout ce que fait cette fonction. Bien que cela n'ait plus changé, nous vous suggérons désormais de ne pas le faire et d'appeler à la place toujours gdImageGifAnimEnd (ou équivalent) car les versions ultérieures pourraient éventuellement faire plus ou des choses différentes.)
Variantes
gdImageGifAnimEndCtx génère ses données via une structure gdIOCtx.
gdImageGifAnimEndPtr génère ses données dans une mémoire tampon qu'il renvoie.
Paramètre
Nom | Description |
---|---|
outfile | Ce paramètre permet d'indiquer le fichier de destination *FILE. |
Retour
Rien
gdImageGifAnimEndPtr
void * gdImageGifAnimEndPtr(int *size); |
Comme gdImageGifAnimEnd (contenant plus d'informations) sauf qu'il entrepose les données à écrire en mémoire et renvoie un pointeur vers celles-ci.
Cette mémoire doit être libérée par l'appelant lorsqu'elle n'est plus nécessaire. **L'appelant doit invoquer gdFree(), et non free(),** à moins qu'il ne soit absolument certain que les mêmes implémentations de malloc, free,... sont utilisées à la fois au moment de la construction de la bibliothèque et au moment de la construction de l'application (mais ne le faites pas ; cela pourrait toujours changer).
Le paramètre «size» reçoit la taille totale du bloc de mémoire.
Paramètre
Nom | Description |
---|---|
size | Ce paramètre permet d'indiquer la taille du tampon de sortie résultant. |
Retour
Valeur | Description |
---|---|
Pointeur | Pointeur vers les données résultantes ou NULL si une erreur s'est produite. |
gdImageGifAnimEndCtx
void gdImageGifAnimEndCtx(gdIOCtx * out); |
Comme gdImageGifAnimEnd, mais écrit ses données via un gdIOCtx.
Paramètre
Nom | Description |
---|---|
out | Ce paramètre permet d'indiquer la destination gdIOCtx. |
Retour
Rien
Remarques
- Si vous devez uniquement manipuler le format d'image GIF, vous devriez envisager la bibliothèque GIFLIB.