emptygif
Langue: Français

Le plus petit GIF transparent fait 43 octets.

Le voici en entier. Choisissez un octet pour voir son rôle, puis copiez le fichier, téléchargez-le, faites-y un lien direct ou servez-le depuis votre propre code.

Le GIF de 43 octets, agrandi : un pixel transparent
0000
0010
0020
Télécharger 1×1.gif

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

Le rôle de chaque octet

Un GIF est une suite de blocs. Celui-ci en compte sept, et chaque couleur de cette page correspond à l’un d’eux. Sélectionnez un octet ou un bloc pour lire sa description. Les nombres sont stockés en little-endian : l’octet de poids faible vient en premier, donc 01 00 signifie 1.

OctetsChampSignification
En-tête Indique au décodeur qu’il s’agit d’un GIF et quelle version du format attendre.
47 49 46SignatureLes lettres ASCII « GIF ». Tout fichier GIF commence par elles.
38 39 61Version« 89a ». La version 89a est nécessaire pour la transparence ; 87a n’a pas d’extension de contrôle graphique.
Descripteur d’écran logique La taille du canevas et la configuration de sa table des couleurs.
01 00Largeur du canevas1 px.
01 00Hauteur du canevas1 px.
80Indicateurs groupésQuatre réglages tassés dans un seul octet. Le bit de poids fort indique qu’une table des couleurs globale suit ; les trois derniers bits donnent sa taille.
00Index de la couleur de fondEntrée 0 de la palette. Les navigateurs l’ignorent et affichent ce qui se trouve derrière l’image.
00Rapport d’aspect des pixels0 signifie des pixels carrés, sans correction.
Table des couleurs globale La palette. Les pixels stockent un index dans cette liste plutôt qu’une couleur.
FF FF FFEntrée de paletteRouge, vert et bleu, un octet chacun : #ffffff. Deux entrées, c’est la plus petite table qu’un GIF puisse avoir.
00 00 00Entrée de paletteRouge, vert et bleu, un octet chacun : #000000. Deux entrées, c’est la plus petite table qu’un GIF puisse avoir.
Extension de contrôle graphique Bloc facultatif ajouté dans GIF89a. Ici, il rend transparente l’entrée 0 de la palette.
21Introducteur d’extension0x21 (« ! ») annonce un bloc d’extension.
F9Étiquette de contrôle graphique0xF9 indique que cette extension est une extension de contrôle graphique.
04Taille du blocSuivent 4 octets de réglages.
01Indicateurs groupésLe bit de poids faible est l’indicateur de transparence. Il est activé, donc l’index transparent ci-dessous est utilisé.
00 00Délai0 centièmes de seconde. Ne compte que pour les animations.
00Index de la couleur transparenteL’entrée 0 de la palette est rendue entièrement transparente.
00Terminateur de blocUn sous-bloc de longueur nulle qui ferme le bloc.
Descripteur d’image La position de l’image sur le canevas et sa taille.
2CSéparateur d’image0x2C (« , ») commence une image.
00 00GaucheL’image commence à 0 px du bord gauche du canevas.
00 00HautL’image commence à 0 px du bord supérieur du canevas.
01 00Largeur de l’image1 px.
01 00Hauteur de l’image1 px.
00Indicateurs groupésPas de table des couleurs locale, pas d’entrelacement. L’image utilise la palette globale.
Données d’image Les pixels, compressés en LZW et découpés en sous-blocs de 255 octets au maximum.
02Taille minimale de code LZW2, donc les codes compressés commencent sur 3 bits.
02Taille du sous-blocSuivent 2 octets de données compressées.
44 01Pixels compressésCodes LZW empaquetés à partir du bit de poids faible. Voyez plus bas comment ils se décodent.
00Terminateur de blocUn sous-bloc de longueur nulle qui ferme le bloc.
Marqueur de fin Un octet qui marque la fin du fichier.
3BMarqueur de fin0x3B (« ; ») termine le fichier.

À l’intérieur des octets groupés

Chacun de ces trois octets stocke plusieurs petits réglages. Le bit 7 est le plus à gauche.

Descripteur d’écran logique 0x80
1Table des couleurs globale présente
000Résolution des couleurs
0Palette triée par importance
000Taille de la table : 2^(n+1) entrées
Extension de contrôle graphique 0x01
000Réservé
000Méthode de disposition
0Attendre une action de l’utilisateur
1Transparence activée
Descripteur d’image 0x00
0Table des couleurs locale présente
0Entrelacé
0Palette triée par importance
00Réservé
000Taille de la table locale

Comment deux octets contiennent un pixel

Avec une taille minimale de code de 2, le décodeur lit des codes de 3 bits. Le code 4 réinitialise la table, le code 5 termine l’image, et les codes 0 à 3 sont des entrées de la palette. Les octets 44 01 se lisent à partir du bit de poids faible :

0x44 010001000x01 00000001

  1. 001100 = 4Réinitialisation : repartir d’une table vierge
  2. 000000 = 0Pixel : entrée 0 de la palette
  3. 101101 = 5Fin de l’image
  4. 0000000 Bits de remplissage inutilisés

Les images plus grandes utilisent la même astuce : chaque nouveau code représente une suite plus longue d’un pixel que la précédente, si bien qu’un GIF transparent de 1000×1000 ne pèse que 1 743 octets.

Peut-il être plus petit ?

Oui, si vous supprimez des parties dont les décodeurs tolèrent l’absence. Nous avons soumis chaque variante à trois moteurs de navigateur et à Pillow, et noté ce qu’ils ont affiché.

TailleVarianteChromiumFirefoxWebKitPillow
43Le fichier standard de cette page.TransparentTransparentTransparentTransparent
42Pas d’octet de fin. Les décodeurs s’arrêtent de toute façon à la fin des données.TransparentTransparentTransparentTransparent
37Aucune palette. Toujours valide : la spécification autorise les décodeurs à utiliser leur propre palette, et l’index 0 est transparent de toute façon.TransparentTransparentTransparentTransparent
36Ni palette ni octet de fin.TransparentTransparentTransparentTransparent
35Pas de bloc de transparence : le pixel est dessiné avec la couleur 0 de la palette, du blanc.BlancBlancBlancBlanc
35Le format de 1987. Il ne permet pas de marquer une couleur comme transparente.BlancBlancBlancBlanc
34Bloc de transparence, mais aucun pixel compressé.TransparentTransparentTransparentErreur
33Pareil, sans l’octet de fin.TransparentTransparentTransparentErreur
29Ni palette ni transparence. Chaque moteur choisit sa propre couleur.NoirBlancTransparentNoir
26Une image sans aucune donnée compressée.TransparentTransparentTransparentErreur
14Seulement l’en-tête, la taille du canevas et l’octet de fin. Il ne contient aucune image.TransparentErreurTransparentErreur

Utilisez 43 octets quand cela doit fonctionner partout. Le fichier de 37 octets reste un GIF valide et s’est affiché transparent dans tous les moteurs testés. En dessous, vous dépendez de la tolérance du décodeur, et le fichier de 29 octets montre à quel point les moteurs divergent.

Vérifié le 23 septembre 2026 avec Chromium 153.0.8010.12, Firefox 155.0, WebKit 26.6, Pillow 12.2.0.

Générez-en un de n’importe quelle taille

Transparent ou d’une couleur unie, de 1×1 à 65535×65535. Il est généré dans votre navigateur ; rien n’est envoyé.

Remplissage
Tailles courantes

1×1 · 43 octets

Télécharger le GIF

Servez-le depuis votre stack

173 extraits prêts à l’emploi. Choisissez le vôtre : chacun répond sur le chemin de votre choix avec une réponse image/gif. Si vous avez changé la taille ou la couleur plus haut, les extraits utilisent ce GIF.

Elixir, Erlang & Gleam

Express JavaScript

Installer
npm i express
Fichier
server.mjs
Lancer
node server.mjs
import express from 'express';

const GIF = Buffer.from('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==', 'base64');

const app = express();

app.get('/pixel.gif', (req, res) => {
  res.set('Cache-Control', 'no-store');
  res.type('gif').send(GIF);
});

app.listen(8080);

Nous avons exécuté cet extrait et comparé les octets qu’il a renvoyés. Ouvrir la page

À quoi il sert

  • Pixels de suivi et beacons : le serveur journalise la requête et répond avec la plus petite image valide.
  • Espaces réservés pour les images en lazy loading, afin que la balise img soit valide avant l’arrivée de la vraie source.
  • Espaceurs de taille fixe dans les e-mails HTML, où la prise en charge de CSS est inégale.
  • Tests et mocks qui ont besoin d’une vraie image sans en embarquer une.

Les pixels de suivi sont moins fiables qu’il n’y paraît

Apple Mail précharge les images distantes via un proxy quand la Protection de la confidentialité dans Mail est activée : une « ouverture » n’a donc peut-être jamais été le fait d’une personne. Gmail récupère lui aussi les images via son propre proxy et les met en cache. De nombreux clients bloquent les images distantes par défaut. Pour l’analytique de pages, navigator.sendBeacon() ou une réponse 204 No Content conviennent souvent mieux qu’une image.

Questions fréquentes

Pourquoi « vide » alors qu’il contient un pixel ?
Un GIF doit contenir au moins un pixel. Celui-ci fait 1×1 et son unique couleur est marquée transparente, donc rien ne s’affiche.
Le fichier de 43 octets est-il valide ?
Oui. Il suit exactement la spécification GIF89a, et tous les moteurs du tableau ci-dessus l’affichent transparent.
Pourquoi un GIF et pas un PNG ou un WebP ?
Il est plus petit qu’un PNG transparent minimal, et tous les navigateurs, clients e-mail et bibliothèques d’images des 35 dernières années savent le lire.
Faut-il utiliser une data URI ou un fichier ?
Une data URI économise une requête et convient aux placeholders et au CSS. Un fichier ou un endpoint est nécessaire quand c’est la requête elle-même qui compte, comme pour les pixels de suivi.
Quel Content-Type envoyer ?
image/gif. Ajoutez Cache-Control: no-store si chaque requête doit atteindre votre serveur.