Qu’est-ce qu’un GIF entrelacé ?

Un GIF entrelacé stocke les lignes de l’image en quatre passes plutôt que séquentiellement. Un décodeur peut ainsi afficher une version sommaire de l’image entière avant d’avoir reçu suffisamment de données pour restituer chaque ligne.

Fonctionnement des GIF entrelacés

L’entrelacement GIF modifie uniquement l’ordre dans lequel les lignes d’une image sont intégrées aux données d’image compressées avec LZW. La première passe couvre toute la hauteur de manière espacée et les passes suivantes comblent les intervalles. L’aperçu obtenu relève du comportement du décodeur, et non d’une prescription du format : GIF89a définit l’ordre des lignes, et un décodeur peut les afficher à mesure qu’elles arrivent. Le filtre de désentrelacement de Firefox, par exemple, copie chaque ligne reçue dans les lignes voisines qui ne sont pas encore arrivées lorsque l’affichage progressif est activé. La table des couleurs, les dimensions, les règles de transparence et les pixels finaux sont les mêmes qu’avec un stockage séquentiel. Les bibliothèques diffèrent quant au composant qui rétablit l’ordre : dans giflib, DGifSlurp place les lignes d’une image entrelacée à leurs positions finales à l’aide des décalages des quatre passes, en appelant le lecteur de lignes une fois par ligne dans l’ordre de stockage.

Points clés

  1. Dans quel ordre les lignes sont-elles stockées ? La passe 1 contient une ligne toutes les 8 lignes à partir de la ligne 0, la passe 2 une ligne toutes les 8 lignes à partir de la ligne 4, la passe 3 une ligne toutes les 4 lignes à partir de la ligne 2, et la passe 4 une ligne toutes les 2 lignes à partir de la ligne 1. GIF89a impose ce schéma ; un décodeur dispose donc d’environ un huitième des lignes après la passe 1, d’un quart après la passe 2 et de la moitié après la passe 3 (ces proportions sont exactes lorsque la hauteur est un multiple de 8). Dans les images de faible hauteur, certaines passes restent vides : avec quatre lignes ou moins, aucune ligne n’appartient à la passe 2, et une image d’une seule ligne n’a que la passe 1. Un désentrelaceur doit comparer la ligne de départ de chaque passe à la hauteur de l’image avant de copier une ligne : un rapport de bug public concernant le décodeur GIF d’APNG4Android décrit une écriture au-delà de son tampon de sortie sur une image entrelacée de deux lignes, parce qu’il copiait d’abord une ligne de la passe 2.
  2. Comment savoir si un GIF est entrelacé ? La vérification se fait par image, pas par fichier. L’indicateur d’entrelacement est un bit de l’octet de champs de bits de chaque descripteur d’image (giflib le teste avec le masque 0x40), et chaque image du flux de données possède son propre descripteur ; les images d’une même animation peuvent donc différer. Les outils n’exposent pas toujours cet indicateur : une personne utilisant libvips a demandé un champ interlaced dans la sortie de l’en-tête GIF après l’ajout d’une option interlace à gifsave.
  3. L’entrelacement apporte-t-il autre chose que l’aperçu ? Non. Les lignes réordonnées restent des indices dans la table des couleurs active, compressés avec LZW, et la transparence reste définie par l’unique indice indiqué dans l’extension de contrôle graphique. L’entrelacement n’ajoute ni couleurs ni transparence partielle.
  4. Mes outils écriront-ils des GIF entrelacés sans demande explicite ? Certains le feront, mais pas dans tous les chemins d’exécution. Le manuel de Pillow indique que son option d’enregistrement interlace est activée par défaut, sauf si l’image mesure moins de 16 pixels de large ou de haut. Dans le code source de Pillow (version 12.0.0 et branche principale telles que consultées en octobre 2026), seul le module d’écriture d’images uniques l’applique : lui passer interlace=False la désactive, tandis que les images écrites lors d’un enregistrement de plusieurs images (save_all produisant plus d’une image) ont toujours un indicateur d’entrelacement désactivé et des lignes séquentielles. Gifsicle laisse ce choix à l’appelant : --interlace active l’entrelacement, et --same-interlace conserve le réglage existant de chaque entrée. Définissez explicitement l’option lorsqu’un composant en aval attend une disposition précise, et lisez l’indicateur des images que vous avez écrites plutôt que de le déduire du réglage par défaut.

Quand les GIF entrelacés sont utiles

L’entrelacement compte dans deux situations. Pour la distribution, il modifie l’ordre d’arrivée des lignes, ce qui permet à un décodeur d’afficher rapidement une version sommaire de l’image entière. Il s’agit d’un ordre des lignes, pas d’un réglage de compression, mais ce sont ces lignes réordonnées que LZW compresse ; la taille encodée n’est donc pas garantie identique à celle de l’encodage séquentiel. GIF89a ne précise pas l’effet de l’entrelacement sur la taille ; comparez donc les deux sorties plutôt que de supposer qu’elles sont égales ou que l’une est plus petite. Pour le traitement, des fichiers entrelacés continuent d’être produits, puisque Pillow entrelace par défaut les GIF à image unique lors de leur enregistrement ; tout code qui lit les données d’image GIF ligne par ligne doit donc rétablir l’ordre des lignes avant de recadrer, de redimensionner ou de convertir une image.

Références

Transformer vos connaissances sur les médias en une chaîne de traitement opérationnelle

Reliez les téléversements, le traitement, l’IA, le stockage et la diffusion via une seule API déclarative — la pile d’encodage, la montée en charge et l’évolution constante des formats sont prises en charge pour vous.

Essayer Transloadit gratuitement