Section courante

A propos

Section administrative du site

Fiche technique
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
Date de conception 1987
Auteur CompuServe, Inc.
Plateforme MS-DOS, DR-DOS, Macintosh, Unix, Linux, Solaris, Amiga,...

Introduction

L'extension de fichier «.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. Une grande partie du succès du format provient de CompuServe lui-même, ayant sûrement été le plus célèbre de tous les systèmes BBS en ligne. L'entreprise CompuServe a déployé des efforts considérables pour contrôler le format GIF et sa diffusion. Le format GIF est l'un des très rares formats ayant été officiellement protégés par des droits d'auteur. Le format GIF est modérément complexe à mesure que les formats graphiques disparaissaient. Une grande partie de cette complexité est le résultat de sa conception pour une gestion optimale dans les paramètres de télécommunications, en particulier la transmission via modem. Lorsque le format est apparu pour la première fois, les modems à 300 bauds étaient encore communs et les modems à 2400 bauds étaient assez chers. Tout ce qui pouvait être fait pour raccourcir les temps de transmission était généralement utilisé. À cette fin, le format GIF a été conçu pour utiliser la compression LZW, pour prendre en charge l'entrelacement d'images et pour utiliser, entre autres, une structure orientée paquets. La spécification GIF originale a été publiée en 1987 et est appelée la version 87a du format. Une révision de format a été publiée deux ans plus tard et est connue sous le nom de version 89a. La version 89a apporte diverses extensions à la version 87a précédente sans altérer les spécificités de ce format, donc 89a est un véritable surensemble de 87a. Il s'avère que la version originale du format 87a définit un protocole de données pour les extensions de format mais ne définit aucune extension spécifique. Ils ont tous été ajoutés dans la version 89a. Tout décodeur de format mettant en oeuvre correctement la spécification 87a devrait être capable de lire les fichiers de la version 89a et de simplement ignorer les extensions. Cependant, de nombreux décodeurs de ce type recherchent la chaîne de format 87a dans l'entête d'un fichier GIF dans le cadre du processus de vérification de fichier et ne traitent généralement pas un fichier 89a. De plus, la plupart des extensions 89a ne sont pas pertinentes si le format est utilisé simplement comme support d'entreposage pour une seule image Bitmap. Les extensions définissent des éléments tels que les avertissements textuelle d'une image, des commentaires de nature non critique et la manière dont les interactions avec l'utilisateur d'un visualiseur GIF doivent être gérées. Ceux-ci sont principalement intéressants si l'intention est de créer une sorte de diaporama interactif à partir d'un fichier GIF.

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