La GIF trasparente più piccola pesa 43 byte.
Eccola tutta. Scegli un byte per vedere cosa fa, poi copia il file, scaricalo, usalo in hotlink o servilo dal tuo codice.

Cosa fa ogni byte
Una GIF è una sequenza di blocchi. Questa ne ha sette, e ogni colore in questa pagina appartiene a uno di essi. Seleziona un byte o un blocco per leggerne la descrizione. I numeri sono memorizzati in little-endian: il byte meno significativo viene prima, quindi 01 00 significa 1.
| Byte | Campo | Significato |
|---|---|---|
| Intestazione Dice al decoder che si tratta di una GIF e quale versione del formato aspettarsi. | ||
| 47 49 46 | Firma | Le lettere ASCII «GIF». Ogni file GIF inizia con queste. |
| 38 39 61 | Versione | «89a». Per la trasparenza serve 89a; 87a non ha l'estensione di controllo grafico. |
| Descrittore dello schermo logico Le dimensioni del canvas e come è impostata la sua tabella dei colori. | ||
| 01 00 | Larghezza del canvas | 1 px. |
| 01 00 | Altezza del canvas | 1 px. |
| 80 | Flag compattati | Quattro impostazioni stipate in un byte. Il bit più alto indica che segue una tabella dei colori globale; gli ultimi tre bit ne indicano la dimensione. |
| 00 | Indice del colore di sfondo | Voce 0 della palette. I browser la ignorano e mostrano ciò che c'è dietro l'immagine. |
| 00 | Proporzioni dei pixel | 0 indica pixel quadrati, senza correzione. |
| Tabella dei colori globale La palette. I pixel memorizzano un indice in questa lista invece di un colore. | ||
| FF FF FF | Voce della palette | Rosso, verde e blu, un byte ciascuno: #ffffff. Due voci sono la tabella più piccola che una GIF possa avere. |
| 00 00 00 | Voce della palette | Rosso, verde e blu, un byte ciascuno: #000000. Due voci sono la tabella più piccola che una GIF possa avere. |
| Estensione di controllo grafico Blocco opzionale aggiunto in GIF89a. Qui rende trasparente la voce 0 della palette. | ||
| 21 | Introduttore di estensione | 0x21 («!») annuncia un blocco di estensione. |
| F9 | Etichetta di controllo grafico | 0xF9 indica che questa estensione è un'estensione di controllo grafico. |
| 04 | Dimensione del blocco | Seguono 4 byte di impostazioni. |
| 01 | Flag compattati | Il bit più basso è il flag di trasparenza. È attivo, quindi viene usato l'indice trasparente qui sotto. |
| 00 00 | Ritardo | 0 centesimi di secondo. Conta solo per le animazioni. |
| 00 | Indice del colore trasparente | La voce 0 della palette viene disegnata completamente trasparente. |
| 00 | Terminatore di blocco | Un sotto-blocco di lunghezza zero che chiude il blocco. |
| Descrittore dell'immagine Dove si trova l'immagine sul canvas e quanto è grande. | ||
| 2C | Separatore d'immagine | 0x2C («,») inizia un'immagine. |
| 00 00 | Sinistra | L'immagine inizia a 0 px dal bordo sinistro del canvas. |
| 00 00 | Alto | L'immagine inizia a 0 px dal bordo superiore del canvas. |
| 01 00 | Larghezza dell'immagine | 1 px. |
| 01 00 | Altezza dell'immagine | 1 px. |
| 00 | Flag compattati | Nessuna tabella dei colori locale, niente interlacciamento. L'immagine usa la palette globale. |
| Dati dell'immagine I pixel, compressi con LZW e divisi in sotto-blocchi di massimo 255 byte. | ||
| 02 | Dimensione minima del codice LZW | 2, quindi i codici compressi partono da 3 bit di larghezza. |
| 02 | Dimensione del sotto-blocco | Seguono 2 byte di dati compressi. |
| 44 01 | Pixel compressi | Codici LZW impacchettati a partire dal bit più basso. Qui sotto vedi come si decodificano. |
| 00 | Terminatore di blocco | Un sotto-blocco di lunghezza zero che chiude il blocco. |
| Marcatore di fine Un byte che segna la fine del file. | ||
| 3B | Marcatore di fine | 0x3B («;») chiude il file. |
Dentro i byte compattati
Tre byte memorizzano ciascuno diverse piccole impostazioni. Il bit 7 è quello più a sinistra.
0x800x010x00Come due byte contengono un pixel
Con una dimensione minima del codice di 2, il decoder legge codici da 3 bit. Il codice 4 azzera la tabella, il codice 5 termina l'immagine e i codici da 0 a 3 sono voci della palette. I byte 44 01 si leggono a partire dal bit più basso:
0x44 010001000x01 00000001
- 001100 = 4Clear: si riparte da una tabella nuova
- 000000 = 0Pixel: voce 0 della palette
- 101101 = 5Fine dell'immagine
- 0000000 Bit di riempimento inutilizzati
Le immagini più grandi usano lo stesso trucco: ogni nuovo codice rappresenta una sequenza più lunga di un pixel rispetto alla precedente, quindi una GIF trasparente 1000×1000 occupa solo 1743 byte.
Può essere più piccola?
Sì, se togli parti di cui i decoder tollerano l'assenza. Abbiamo dato ogni variante in pasto a tre motori di browser e a Pillow, e registrato cosa hanno disegnato.
| Dimensione | Variante | Chromium | Firefox | WebKit | Pillow |
|---|---|---|---|---|---|
| 43 | Il file standard di questa pagina. | Trasparente | Trasparente | Trasparente | Trasparente |
| 42 | Nessun byte finale. I decoder si fermano comunque alla fine dei dati. | Trasparente | Trasparente | Trasparente | Trasparente |
| 37 | Nessuna palette. Ancora valida: la specifica consente ai decoder di usare una propria palette, e l'indice 0 è comunque trasparente. | Trasparente | Trasparente | Trasparente | Trasparente |
| 36 | Niente palette e niente byte finale. | Trasparente | Trasparente | Trasparente | Trasparente |
| 35 | Nessun blocco di trasparenza: il pixel viene disegnato con il colore 0 della palette, il bianco. | Bianco | Bianco | Bianco | Bianco |
| 35 | Il formato del 1987. Non ha modo di rendere trasparente un colore. | Bianco | Bianco | Bianco | Bianco |
| 34 | Blocco di trasparenza, ma nessun pixel compresso. | Trasparente | Trasparente | Trasparente | Errore |
| 33 | Lo stesso, senza byte finale. | Trasparente | Trasparente | Trasparente | Errore |
| 29 | Niente palette e niente trasparenza. Ogni motore sceglie il proprio colore. | Nero | Bianco | Trasparente | Nero |
| 26 | Un'immagine senza alcun dato compresso. | Trasparente | Trasparente | Trasparente | Errore |
| 14 | Solo intestazione, dimensioni del canvas e byte finale. Non contiene alcuna immagine. | Trasparente | Errore | Trasparente | Errore |
Usa i 43 byte quando deve funzionare ovunque. Quella da 37 byte è ancora una GIF valida ed è risultata trasparente in tutti i motori che abbiamo testato. Sotto quella soglia dipendi dalla tolleranza del decoder, e il file da 29 byte mostra quanto i motori siano in disaccordo.
Verificato il 23 settembre 2026 con Chromium 153.0.8010.12, Firefox 155.0, WebKit 26.6, Pillow 12.2.0.
Creane una di qualsiasi dimensione
Trasparente o a tinta unita, da 1×1 fino a 65535×65535. Viene generata nel tuo browser; non viene caricato nulla.
Usala in hotlink
Collega direttamente questi file da qualsiasi sito, email o app. Sono serviti dall'edge di Cloudflare con cache di lunga durata, e CORS è aperto a tutti.
- Il file da 43 byte
https://emptygif.com/1x1.gif - Qualsiasi dimensione, trasparente
https://emptygif.com/px/300x250.gif - Qualsiasi dimensione, tinta unita
https://emptygif.com/px/300x250/ff5a1f.gif - API JSON: dimensione, base64 e data URI
https://emptygif.com/api/gif?w=300&h=250 - Tutti gli snippet in JSON
https://emptygif.com/snippets.json - Riepilogo per gli agenti IA
https://emptygif.com/llms.txt
Header di risposta
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: *Esempio
<img src="https://emptygif.com/1x1.gif" width="1" height="1" alt="">
Le dimensioni generate arrivano fino a 4096 px per lato. Se hai molto traffico, scarica il file e ospitalo sul tuo server.
Servila dal tuo stack
173 snippet pronti all'uso. Scegli il tuo: ognuno risponde sul percorso che scegli con una risposta image/gif. Se sopra hai cambiato dimensione o colore, gli snippet usano quella 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);
Abbiamo eseguito questo snippet e confrontato i byte che ha restituito. Apri pagina
A cosa serve
- Pixel di tracciamento e beacon: il server registra la richiesta e risponde con la più piccola immagine valida.
- Segnaposto per immagini in lazy loading, così il tag
imgè valido prima che arrivi la sorgente reale. - Spaziatori di dimensione fissa nelle email HTML, dove il supporto CSS è frammentario.
- Test e mock che hanno bisogno di un'immagine reale senza doverne includere una.
I pixel di tracciamento sono meno affidabili di quanto sembri
Apple Mail precarica le immagini remote tramite un proxy quando è attiva la Protezione della privacy di Mail, quindi un'«apertura» potrebbe non essere mai stata una persona. Anche Gmail recupera le immagini tramite un proprio proxy e le mette in cache. Molti client bloccano le immagini remote per impostazione predefinita. Per l'analisi delle pagine, navigator.sendBeacon() o una risposta 204 No Content sono spesso più adatti di un'immagine.
Domande frequenti
- Perché si chiama vuota se ha un pixel?
- Una GIF deve avere almeno un pixel. Questa è 1×1 e il suo unico colore è marcato come trasparente, quindi non si vede nulla.
- Il file da 43 byte è valido?
- Sì. Segue esattamente la specifica GIF89a, e tutti i motori nella tabella qui sopra lo disegnano trasparente.
- Perché una GIF e non un PNG o un WebP?
- È più piccola di un PNG trasparente minimo, e qualsiasi browser, client email o libreria di immagini degli ultimi 35 anni è in grado di leggerla.
- Meglio un data URI o un file?
- Un data URI risparmia una richiesta ed è adatto a segnaposto e CSS. Serve un file o un endpoint quando lo scopo è proprio la richiesta, come per i pixel di tracciamento.
- Quale Content-Type devo inviare?
image/gif. AggiungiCache-Control: no-storese ogni richiesta deve arrivare al tuo server.