Section courante

A propos

Section administrative du site

Introduction

L'extension «.GIF» permet d'indiquer un fichier graphique de format GIF (abréviation de «Graphics Interchange Format»). Il s'agit d'un format de fichier développé par CompuServe en 1987 utilisant un algorithme de compression LZW. Il fut très populaire dans les années 1990.

Spécification

Spécification Description
Type Bitmap
Méthode de compression LZW
Nombre maximum de couleurs 256 couleurs
Taille maximum de l'image 65536 x 65536 pixels (il est recommandé de ne pas dépasser la limitation de nombreux logiciels tiers à 16000 x 16000)
Supporte plusieurs images Oui, plusieurs images peuvent être présente dans un même fichier
Supporte la transparence Oui
Format des nombres Little-endian
Auteur CompuServe, Inc.
Plateforme MS-DOS, DR-DOS, Macintosh, Unix, Linux, Solaris, Amiga,...

Structure du fichier

Un fichier GIF est constitué d'un ensemble de blocs de données différents. Le diagramme suivant montre les différents types de blocs et leur emplacement logique dans le fichier. Le fichier commence en haut et se termine en bas et certaines parties (la partie médiane) peuvent se répété afin d'inclure plusieurs images. A chaque branche du diagramme, vous pouvez aller dans une direction un autre. Ainsi, elle peut être répété autant de fois que nécessaire ou simplement être omis (dans le cas ou l'image en entier serait transparent).

Structure d'entête du fichier

Tous les fichiers GIF doivent commencer par un bloc d'entête de fichier. Elle commence pour indiquer la signature qu'il s'agit d'un GIF (nom du format GIF) occupe les 6 premiers octets du fichier. Elle est suivi des informations d'écran logiques, d'une table de couleur (aussi parfois appeler une palette de couleur). Voici la structure de l'en-tête d'un fichier GIF 87a et 89a :

Déplacement Taille Description
00h à 05h 6 octets Ce champ permet d'indiquer le nom du format GIF ('GIF87a' ou 'GIF89a')
06h à 07h 1 mot Ce champ permet d'indiquer le nombre de pixels sur l'axe des X (horizontal)
08h à 09h 1 mot Ce champ permet d'indiquer le nombre de pixels sur l'axe des Y (vertical)
0Ah 1 octet Ce champ permet d'indiquer les informations étendue suivant :
Bit(s) Description
0 à 2 Nombre de palettes :
 0: 2 palettes
 1: 4 palettes
 2: 8 palettes
 3: 16 palettes
 4: 32 palettes
 5: 64 palettes
 6: 128 palettes
 7: 256 palettes
3 à 7 Réservé
0Bh 1 octet Ce champ permet d'indiquer l'arrière plan (Background)
0Ch 1 octet Ce champ permet d'indiquer le ratio
0Dh 3 * 2 << (déplacement 0Ah) 7 octets Ce champ permet d'indiquer la table de couleur (Color Map)
3 * 2 << (déplacement 0Ah) 7 1 octet + Extra Ce champ permet d'indiquer l'identificateur
... 1 octet Ce champ permet d'indiquer l'identificateur

NB: Les symboles «<<» permettent d'indiquer un opérateur de décalage de bit à gauche (SHL en langage de programmation Turbo Pascal ou «<<» en langage de programmation C). Les symboles «» permettent d'indiquer un opérateur «Et binaire logique», soit une table de vérité appliqué à chacun des bits de la valeur. Le terme «Extra» permet d'indiquer les informations supplémentaire de taille variable contenu avec la structure de l'identificateur. L'expression «déplacement 0Ah» permet d'indiquer la valeur contenu dans le champ en déplacement 0Ah.

Structure de l'identificateur

Type Description
';' Fin
'!' Extension
Taille Description
Jusqu'à un code ASCII 0 soit rencontré Donnée de compression de l'image
',' Séparateur d'image
Déplacement Taille Description
00h à 03h 4 octets Ce champ est réservé
04h à 05h 1 Mot Ce champ permet d'indiquer la longueur (Nombre de pixels X)
06h à 07h 1 Mot Ce champ permet d'indiquer la largeur (Nombre de pixels Y)
08h 1 octet Bits 0 à 2: Nombre de palettes :
Code Description
0 2 palettes
1 4 palettes
2 8 palettes
3 16 palettes
4 32 palettes
5 64 palettes
6 128 palettes
7 256 palettes
Bit 3 à 5: Réservé (??)
Bit 6: Interlacé
Bit 7: Drapeau de la table de couleur (Color Map Flag)
09h 1 octet Taille du code d'entrée (Valide de 2 à 11) Image...

Donnée de compression de l'image

Cette partie contient les données d'images réelles. Ainsi, les données sont composées d'une série de codes de sortie indiquant au décodeur les couleurs à produire sur le résultat de l'image. Ces codes sont combinés dans les octets constituant le bloc. Le premier octet de ce bloc est la taille de code minimale de la compression LZW. Cette valeur est utilisée pour décoder les codes de sortie compressés. Le reste des octets représente des sous-blocs de données. Les sous-blocs de données sont des groupes de 1 à 256 octets. Le premier octet du sous-bloc vous indique le nombre d'octets de données réelles à suivre. Il peut être une valeur de 0 (00h) à 255 (FFh). Une fois que vous avez lu ces octets, le prochain octet que vous lisez vous indiquera maintenant que de nombreux autres octets de données suivent celui-ci. Vous continuez à lire jusqu'à atteindre un sous-bloc indiquant que 0 octet suit.

Exemple

Voici un exemple montrant la structure de ce format suivant en Turbo Pascal 7 :

  1. Type
  2.   {Entête de fichier de format GIF}
  3.  HeaderGIF=Record
  4.   Sign,Ver:Array[0..2]of Char; { Signature et version (GIF87a ou GIF89a)}
  5.   NumXPixels,NumYPixels:Word;  { Largeur et hauteur de l'image en pixels }
  6.   ExtInfo,                     { Information de palettes }
  7.   Background,                  { Arrière plan }
  8.   AspectRatio:Byte;            { Ratio }
  9.  End;
  10.  
  11.   {Entête d'image du fichier de format GIF}
  12.  HeaderImageGIF=Record
  13.   Seperator:Byte;             { Séparateur ',' }
  14.   X1,Y1:Word;                 { Position X,Y ou commence l'image }
  15.   NumXPixels,NumYPixels:Word; { Largeur et hauteur de l'image }
  16.   ExtInfo:Byte;               { Information de palettes }
  17.  End;

Voir également

Langage de programmation - Traitement d'image - Accueil
Langage de programmation - Théorie des codes - Compression - LZW

Dernière mise à jour : Samedi, le 18 mai 2019