emptygif
Sprache: Deutsch

Das kleinste transparente GIF ist 43 Bytes groß.

Das ist alles. Wähle ein Byte, um zu sehen, was es tut, und kopiere die Datei dann, lade sie herunter, hotlinke sie oder liefere sie aus deinem eigenen Code aus.

Das 43-Byte-GIF, vergrößert: ein transparentes Pixel
0000
0010
0020
1×1.gif herunterladen

R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

Was jedes Byte tut

Ein GIF ist eine Folge von Blöcken. Dieses hat sieben, und jede Farbe auf dieser Seite gehört zu einem davon. Wähle ein Byte oder einen Block aus, um die Beschreibung zu lesen. Zahlen werden als Little-Endian gespeichert: Das niederwertige Byte kommt zuerst, 01 00 bedeutet also 1.

BytesFeldBedeutung
Header Teilt dem Decoder mit, dass dies ein GIF ist und welche Formatversion er erwarten soll.
47 49 46SignaturDie ASCII-Buchstaben „GIF“. Jede GIF-Datei beginnt damit.
38 39 61Version„89a“. Für Transparenz ist 89a nötig; 87a hat keine Grafiksteuerungserweiterung.
Logischer Bildschirmdeskriptor Die Größe der Leinwand und wie ihre Farbtabelle aufgebaut ist.
01 00Leinwandbreite1 px.
01 00Leinwandhöhe1 px.
80Gepackte FlagsVier Einstellungen, in ein Byte gequetscht. Das höchste Bit besagt, dass eine globale Farbtabelle folgt; die letzten drei Bits geben ihre Größe an.
00HintergrundfarbindexPaletteneintrag 0. Browser ignorieren ihn und zeigen, was hinter dem Bild liegt.
00Pixel-Seitenverhältnis0 bedeutet quadratische Pixel, ohne Korrektur.
Globale Farbtabelle Die Palette. Pixel speichern statt einer Farbe einen Index in diese Liste.
FF FF FFPaletteneintragRot, Grün und Blau, je ein Byte: #ffffff. Zwei Einträge sind die kleinste Tabelle, die ein GIF haben kann.
00 00 00PaletteneintragRot, Grün und Blau, je ein Byte: #000000. Zwei Einträge sind die kleinste Tabelle, die ein GIF haben kann.
Grafiksteuerungserweiterung Optionaler Block, eingeführt mit GIF89a. Hier macht er Paletteneintrag 0 transparent.
21Erweiterungseinleitung0x21 („!“) kündigt einen Erweiterungsblock an.
F9Grafiksteuerungs-Label0xF9 besagt, dass diese Erweiterung eine Grafiksteuerungserweiterung ist.
04BlockgrößeEs folgen 4 Bytes an Einstellungen.
01Gepackte FlagsDas niedrigste Bit ist das Transparenz-Flag. Es ist gesetzt, also wird der transparente Index unten verwendet.
00 00Verzögerung0 Hundertstelsekunden. Nur für Animationen relevant.
00TransparenzfarbindexPaletteneintrag 0 wird vollständig transparent gezeichnet.
00BlockterminatorEin Sub-Block der Länge null, der den Block abschließt.
Bilddeskriptor Wo das Bild auf der Leinwand liegt und wie groß es ist.
2CBildtrenner0x2C („,“) leitet ein Bild ein.
00 00LinksDas Bild beginnt 0 px vom linken Rand der Leinwand.
00 00ObenDas Bild beginnt 0 px vom oberen Rand der Leinwand.
01 00Bildbreite1 px.
01 00Bildhöhe1 px.
00Gepackte FlagsKeine lokale Farbtabelle, kein Interlacing. Das Bild verwendet die globale Palette.
Bilddaten Die Pixel, mit LZW komprimiert und in Sub-Blöcke von bis zu 255 Bytes aufgeteilt.
02LZW-Mindestcodegröße2, die komprimierten Codes sind also anfangs 3 Bits breit.
02Sub-Block-GrößeEs folgen 2 Bytes komprimierte Daten.
44 01Komprimierte PixelLZW-Codes, vom niedrigsten Bit an gepackt. Wie sie dekodiert werden, siehst du weiter unten.
00BlockterminatorEin Sub-Block der Länge null, der den Block abschließt.
Trailer Ein Byte, das das Ende der Datei markiert.
3BTrailer0x3B („;“) beendet die Datei.

In den gepackten Bytes

Drei Bytes speichern jeweils mehrere kleine Einstellungen. Bit 7 ist das linke.

Logischer Bildschirmdeskriptor 0x80
1Globale Farbtabelle vorhanden
000Farbauflösung
0Palette nach Wichtigkeit sortiert
000Tabellengröße: 2^(n+1) Einträge
Grafiksteuerungserweiterung 0x01
000Reserviert
000Disposal-Methode
0Auf Benutzereingabe warten
1Transparenz an
Bilddeskriptor 0x00
0Lokale Farbtabelle vorhanden
0Interlaced
0Palette nach Wichtigkeit sortiert
00Reserviert
000Größe der lokalen Tabelle

Wie zwei Bytes ein Pixel enthalten

Bei einer Mindestcodegröße von 2 liest der Decoder 3-Bit-Codes. Code 4 leert die Tabelle, Code 5 beendet das Bild, und die Codes 0 bis 3 sind Paletteneinträge. Die Bytes 44 01 werden vom niedrigsten Bit an gelesen:

0x44 010001000x01 00000001

  1. 001100 = 4Clear: mit frischer Tabelle beginnen
  2. 000000 = 0Pixel: Paletteneintrag 0
  3. 101101 = 5Bildende
  4. 0000000 Ungenutzte Füllbits

Größere Bilder nutzen denselben Trick: Jeder neue Code steht für eine Folge, die ein Pixel länger ist als die vorige, daher braucht ein transparentes 1000×1000-GIF nur 1.743 Bytes.

Geht es kleiner?

Ja, wenn du Teile weglässt, deren Fehlen Decoder tolerieren. Wir haben jede Variante drei Browser-Engines und Pillow vorgesetzt und festgehalten, was sie gezeichnet haben.

GrößeVarianteChromiumFirefoxWebKitPillow
43Die Standarddatei dieser Seite.TransparentTransparentTransparentTransparent
42Kein Trailer-Byte. Decoder hören am Ende der Daten ohnehin auf.TransparentTransparentTransparentTransparent
37Gar keine Palette. Trotzdem gültig: Die Spezifikation erlaubt Decodern eine eigene Palette, und Index 0 ist ohnehin transparent.TransparentTransparentTransparentTransparent
36Keine Palette und kein Trailer.TransparentTransparentTransparentTransparent
35Kein Transparenzblock: Das Pixel wird in Palettenfarbe 0 gezeichnet, Weiß.WeißWeißWeißWeiß
35Das Format von 1987. Es kann keine Farbe als transparent markieren.WeißWeißWeißWeiß
34Transparenzblock, aber keine komprimierten Pixel.TransparentTransparentTransparentFehler
33Dasselbe ohne Trailer.TransparentTransparentTransparentFehler
29Keine Palette und keine Transparenz. Jede Engine wählt ihre eigene Farbe.SchwarzWeißTransparentSchwarz
26Ein Bild ganz ohne komprimierte Daten.TransparentTransparentTransparentFehler
14Nur Header, Leinwandgröße und Trailer. Es enthält kein Bild.TransparentFehlerTransparentFehler

Nimm die 43 Bytes, wenn es überall funktionieren muss. 37 Bytes sind noch ein gültiges GIF und waren in jeder getesteten Engine transparent. Darunter bist du auf die Nachsicht des Decoders angewiesen, und die 29-Byte-Datei zeigt, wie uneinig sich die Engines sind.

Geprüft am 23. September 2026 mit Chromium 153.0.8010.12, Firefox 155.0, WebKit 26.6, Pillow 12.2.0.

In beliebiger Größe erzeugen

Transparent oder in einer Vollfarbe, von 1×1 bis 65535×65535. Es wird in deinem Browser erzeugt; nichts wird hochgeladen.

Füllung
Gängige Größen

1×1 · 43 Bytes

GIF herunterladen

Aus deinem Stack ausliefern

173 sofort lauffähige Snippets. Such dir deins aus: Jedes antwortet unter dem gewählten Pfad mit einer image/gif-Antwort. Wenn du oben Größe oder Farbe geändert hast, verwenden die Snippets dieses GIF.

Elixir, Erlang & Gleam

Express JavaScript

Installieren
npm i express
Datei
server.mjs
Ausführen
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);

Wir haben dieses Snippet ausgeführt und die zurückgegebenen Bytes verglichen. Seite öffnen

Wofür man es verwendet

  • Tracking-Pixel und Beacons: Der Server protokolliert die Anfrage und antwortet mit dem kleinstmöglichen gültigen Bild.
  • Platzhalter für Lazy-Loading-Bilder, damit das img-Tag gültig ist, bevor die echte Quelle geladen ist.
  • Abstandhalter fester Größe in HTML-E-Mails, wo die CSS-Unterstützung lückenhaft ist.
  • Tests und Mocks, die ein echtes Bild brauchen, ohne eines mitzuliefern.

Tracking-Pixel sind weniger zuverlässig, als sie scheinen

Apple Mail lädt entfernte Bilder über einen Proxy vorab, wenn der Mail-Datenschutz („Mail-Aktivität schützen“) aktiv ist, eine „Öffnung“ stammt also womöglich nie von einem Menschen. Auch Gmail ruft Bilder über einen eigenen Proxy ab und cacht sie. Viele Clients blockieren entfernte Bilder standardmäßig. Für Seitenanalysen passen navigator.sendBeacon() oder eine 204 No Content-Antwort oft besser als ein Bild.

Häufige Fragen

Warum heißt es leer, wenn es ein Pixel hat?
Ein GIF muss mindestens ein Pixel haben. Dieses ist 1×1 groß, und seine einzige Farbe ist als transparent markiert, also ist nichts zu sehen.
Ist die 43-Byte-Datei gültig?
Ja. Sie folgt exakt der GIF89a-Spezifikation, und jede Engine in der Tabelle oben zeichnet sie transparent.
Warum GIF und nicht PNG oder WebP?
Es ist kleiner als ein minimales transparentes PNG, und jeder Browser, jeder E-Mail-Client und jede Bildbibliothek der letzten 35 Jahre kann es lesen.
Soll ich eine Data-URI oder eine Datei verwenden?
Eine Data-URI spart eine Anfrage und eignet sich für Platzhalter und CSS. Eine Datei oder ein Endpoint ist nötig, wenn es gerade um die Anfrage selbst geht, wie bei Tracking-Pixeln.
Welchen Content-Type soll ich senden?
image/gif. Ergänze Cache-Control: no-store, wenn jede Anfrage deinen Server erreichen muss.