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 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.
| Octets | Champ | Signification |
|---|---|---|
| En-tête Indique au décodeur qu’il s’agit d’un GIF et quelle version du format attendre. | ||
| 47 49 46 | Signature | Les lettres ASCII « GIF ». Tout fichier GIF commence par elles. |
| 38 39 61 | Version | « 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 00 | Largeur du canevas | 1 px. |
| 01 00 | Hauteur du canevas | 1 px. |
| 80 | Indicateurs groupés | Quatre 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. |
| 00 | Index de la couleur de fond | Entrée 0 de la palette. Les navigateurs l’ignorent et affichent ce qui se trouve derrière l’image. |
| 00 | Rapport d’aspect des pixels | 0 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 FF | Entrée de palette | Rouge, vert et bleu, un octet chacun : #ffffff. Deux entrées, c’est la plus petite table qu’un GIF puisse avoir. |
| 00 00 00 | Entrée de palette | Rouge, 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. | ||
| 21 | Introducteur d’extension | 0x21 (« ! ») annonce un bloc d’extension. |
| F9 | Étiquette de contrôle graphique | 0xF9 indique que cette extension est une extension de contrôle graphique. |
| 04 | Taille du bloc | Suivent 4 octets de réglages. |
| 01 | Indicateurs groupés | Le bit de poids faible est l’indicateur de transparence. Il est activé, donc l’index transparent ci-dessous est utilisé. |
| 00 00 | Délai | 0 centièmes de seconde. Ne compte que pour les animations. |
| 00 | Index de la couleur transparente | L’entrée 0 de la palette est rendue entièrement transparente. |
| 00 | Terminateur de bloc | Un sous-bloc de longueur nulle qui ferme le bloc. |
| Descripteur d’image La position de l’image sur le canevas et sa taille. | ||
| 2C | Séparateur d’image | 0x2C (« , ») commence une image. |
| 00 00 | Gauche | L’image commence à 0 px du bord gauche du canevas. |
| 00 00 | Haut | L’image commence à 0 px du bord supérieur du canevas. |
| 01 00 | Largeur de l’image | 1 px. |
| 01 00 | Hauteur de l’image | 1 px. |
| 00 | Indicateurs groupés | Pas 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. | ||
| 02 | Taille minimale de code LZW | 2, donc les codes compressés commencent sur 3 bits. |
| 02 | Taille du sous-bloc | Suivent 2 octets de données compressées. |
| 44 01 | Pixels compressés | Codes LZW empaquetés à partir du bit de poids faible. Voyez plus bas comment ils se décodent. |
| 00 | Terminateur de bloc | Un sous-bloc de longueur nulle qui ferme le bloc. |
| Marqueur de fin Un octet qui marque la fin du fichier. | ||
| 3B | Marqueur de fin | 0x3B (« ; ») 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.
0x800x010x00Comment 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
- 001100 = 4Réinitialisation : repartir d’une table vierge
- 000000 = 0Pixel : entrée 0 de la palette
- 101101 = 5Fin de l’image
- 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é.
| Taille | Variante | Chromium | Firefox | WebKit | Pillow |
|---|---|---|---|---|---|
| 43 | Le fichier standard de cette page. | Transparent | Transparent | Transparent | Transparent |
| 42 | Pas d’octet de fin. Les décodeurs s’arrêtent de toute façon à la fin des données. | Transparent | Transparent | Transparent | Transparent |
| 37 | Aucune palette. Toujours valide : la spécification autorise les décodeurs à utiliser leur propre palette, et l’index 0 est transparent de toute façon. | Transparent | Transparent | Transparent | Transparent |
| 36 | Ni palette ni octet de fin. | Transparent | Transparent | Transparent | Transparent |
| 35 | Pas de bloc de transparence : le pixel est dessiné avec la couleur 0 de la palette, du blanc. | Blanc | Blanc | Blanc | Blanc |
| 35 | Le format de 1987. Il ne permet pas de marquer une couleur comme transparente. | Blanc | Blanc | Blanc | Blanc |
| 34 | Bloc de transparence, mais aucun pixel compressé. | Transparent | Transparent | Transparent | Erreur |
| 33 | Pareil, sans l’octet de fin. | Transparent | Transparent | Transparent | Erreur |
| 29 | Ni palette ni transparence. Chaque moteur choisit sa propre couleur. | Noir | Blanc | Transparent | Noir |
| 26 | Une image sans aucune donnée compressée. | Transparent | Transparent | Transparent | Erreur |
| 14 | Seulement l’en-tête, la taille du canevas et l’octet de fin. Il ne contient aucune image. | Transparent | Erreur | Transparent | Erreur |
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é.
Lien direct
Faites un lien direct vers ces fichiers depuis n’importe quel site, e-mail ou application. Ils sont servis depuis l’edge de Cloudflare avec de longues durées de cache, et CORS est ouvert à tous.
- Le fichier de 43 octets
https://emptygif.com/1x1.gif - Toute taille, transparent
https://emptygif.com/px/300x250.gif - Toute taille, couleur unie
https://emptygif.com/px/300x250/ff5a1f.gif - API JSON : taille, base64 et data URI
https://emptygif.com/api/gif?w=300&h=250 - Tous les extraits en JSON
https://emptygif.com/snippets.json - Résumé pour les agents IA
https://emptygif.com/llms.txt
En-têtes de réponse
HTTP/2 200
content-type: image/gif
content-length: 43
cache-control: public, max-age=31536000, immutable
access-control-allow-origin: *
cross-origin-resource-policy: cross-origin
timing-allow-origin: *Exemple
<img src="https://emptygif.com/1x1.gif" width="1" height="1" alt="">
Les tailles générées vont jusqu’à 4096 px par côté. Si vous avez beaucoup de trafic, merci de télécharger le fichier et de l’héberger vous-même.
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.
JavaScript & TypeScript
Edge & serverless
- Cloudflare Workers
- Cloudflare Workers (Rust, workers-rs)
- Cloudflare Pages Functions
- Deno Deploy (deno serve)
- Vercel Functions
- Netlify Functions
- Netlify Edge Functions
- AWS Lambda (Node.js)
- AWS Lambda (Python)
- AWS Lambda (Go)
- AWS Lambda (Rust, lambda_http)
- AWS Lambda@Edge (CloudFront)
- Google Cloud Run functions (Node.js)
- Google Cloud Run functions (Python)
- Firebase Cloud Functions + Hosting
- Azure Functions (Node.js v4 model)
- Fastly Compute (JavaScript)
Python
JVM
PHP
Elixir, Erlang & Gleam
Functional languages
C, C++ & systems languages
Swift, Dart & other languages
Web servers & proxies
Command line & one-liners
Express JavaScript
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
imgsoit 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. AjoutezCache-Control: no-storesi chaque requête doit atteindre votre serveur.