Format Gif de CompuServe

Cette section présente le format d'images Graphics Interchange Format (GIF) de CompuServe utilisé par Up ! Graphics Interchange Format.

Une image au format Graphics Interchange Format (GIF) est encodée avec la convention d'Intel i.e. Little Endian.

La résolution est de 72 Dot Per Inch (DPI).

Les palettes de couleurs possibles sont noir et blanc, 16 couleurs ou 256 couleurs.

Une image logique peut être animée sous forme d'un petit film. Ce qui signifie qu'il peut exister plusieurs images physiques.

Il peut exister une palette de couleurs globale à toutes les images physiques et une palette de couleurs locale propre à une image physique.

Blocs du flux Gif

Le format Graphics Interchange Format (GIF) est flux composé d'une succession de blocs caractérisés par un identifiant.

Voici les codifications des blocs :

IdentifiantDescription
En-têteEn-tête du fichier.
Fenêtre logiqueFenêtre d'affichage de l'image.
Descripteur d'imageDescription d'une image physique.
Image physiquePartie d'une image physique.
Extension graphiqueDescription de l'extension graphique.
CommentaireCommentaire, copyright, etc.
TexteTexte des données du graphique.
ApplicationDescription de l'application.
TerminateurTerminaison du fichier.

Bloc En-tête

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Signature3.Signature du format. GIF.
Version3.Version du format. 87a ou 89a.

Bloc Fenêtre logique

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
LargeurPixels2.Largeur de l'image non signée en pixels.
HauteurPixels2.Hauteur de l'image non signée en pixels.
Options1.Options d'affichage.
CouleurFond1.Index de la couleur d'affichage.
RatioPixel1.Ratio de largeur d'un pixel par rapport à sa hauteur - 0 pour des pixels carrés.

Les valeurs possibles de la propriété Options sont :

Les couleurs sont enregistrées sur trois octets qui sont dans l'ordre Rouge, Vert, Bleu.

Bloc Descripteur d'image

Ce bloc est répété autant de fois qu'il existe d'images physiques.

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Séparateur d'image1.0x2C.
PositionX2.Abscisse de la position de l'image non signée en pixels dans la fenêtre logique.
PositionY2.Ordonnée de la position de l'image non signée en pixels dans la fenêtre logique.
LargeurPixels2.Largeur de l'image non signée en pixels.
HauteurPixels2.Hauteur de l'image non signée en pixels.
Options1.Options d'affichage.

Les valeurs possibles de la propriété Options sont :

Les couleurs sont enregistrées sur trois octets qui sont dans l'ordre Rouge, Vert, Bleu.

Bloc Image

Ce bloc est répété autant de fois que nécessaire pour construire l'image physique.

L'en-tête d'un bloc d'image est un octet définissant la taille du contenu du bloc, hormis son en-tête. Ainsi, un bloc d'image contient au plus 255 octets.

Bloc Extension graphique

Ce bloc est uniquement supporté en version 89a.

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Marqueur1.0x21.
Marqueur21.0xF9.
TailleSousBloc1.4.
Options1.Options d'affichage.
Delai2.Délai non signé d'enchaînement des images.
CouleurTransparente1.Index de la couleur transparente.
Terminateur1.0x00.

Les valeurs possibles de la propriété Options sont :

Bloc Commentaire

Ce bloc est uniquement supporté en version 89a.

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Marqueur1.0x21.
Marqueur21.0xFE.
CommentaireVariable.Chaîne de caractères Ascii.
Terminateur1.0x00.

Le commentaire est découpé en une successions de blocs de commentaire unitaire.

L'en-tête d'un bloc de commentaire unitaire est un octet définissant la taille du contenu du bloc, hormis son en-tête. Ainsi, un bloc de commentaire unitaire contient au plus 255 octets.

Bloc Texte

Ce bloc est uniquement supporté en version 89a.

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Marqueur1.0x21.
Marqueur21.0x01.
Taille1.12.
PositionX2.Abscisse de la position du texte non signée en pixels dans la fenêtre logique.
PositionY2.Ordonnée de la position du texte non signée en pixels dans la fenêtre logique.
LargeurPixels2.Largeur du texte en pixels.
HauteurPixels2.Hauteur du texte non signée en pixels.
LargeurCaracterePixels1.Largeur d'un caractère en pixels.
HauteurCaracterePixels1.Hauteur d'un caractère non signée en pixels.
IndexCouleurAvantPlan1.Index de la couleur d'avant plan.
IndexCouleurArrierePlan1.Index de la couleur d'arrière plan.
TexteVariable.Chaîne de caractères Ascii.
Terminateur1.0x00.

Le texte est découpé en une successions de blocs de texte unitaire.

L'en-tête d'un bloc de texte unitaire est un octet définissant la taille du contenu du bloc, hormis son en-tête. Ainsi, un bloc de texte unitaire contient au plus 255 octets.

Bloc Application

Ce bloc est uniquement supporté en version 89a.

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Marqueur1.0x21.
Marqueur21.0xFF.
Taille1.11.
Identifiant8.Identifiant de l'application en Ascii.
Code3.Code d'unicité.
DonnéesVariable.Données de l'application.
Terminateur1.0x00.

Les données sont découpées en une successions de blocs de données unitaires.

L'en-tête d'un bloc de données unitaires est un octet définissant la taille du contenu du bloc, hormis son en-tête. Ainsi, un bloc de données unitaires contient au plus 255 octets.

Bloc Terminateur

Voici les propriétés du bloc :

PropriétéTaille en octetsDescription
Marqueur1.0x3B.

Enchaînement des blocs du flux Gif

Voici la grammaire d'enchaînement des blocs dans le flux Gif :

FluxGif :

TableCouleursOption : ListeContenus : Contenu : ExtensionGraphiqueOption :

Codage des pixels de l'image Gif

Les lignes de pixels sont stockées du haut vers le bas de l'image.

L'image est compressée avec l'algorithme Lempel, Ziv and Welch (LZW) avec une taille de codage variable. Le premier octet des données d'image définit la taille du codage TailleCodage.

La table des chaînes contient donc au plus 2^TailleCodage. Le marqueur de réinitialisation de la table est TailleCodage+1. Le marqueur de fin des données de l'image est TailleCodage+2.

Entrelaçage des images Gif

L'entrelaçage des images Gif s'effectue en quatre passes dont voici la matrice :

1 1 1 1 1 1 1 1
4 4 4 4 4 4 4 4
3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4
2 2 2 2 2 2 2 2
4 4 4 4 4 4 4 4
3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4