semmixkolor i percepcja

Nagłówek pliku GIF

Każdy plik GIF zaczyna się od sześciu bajtów: trzech liter sygnatury i trzech znaków wersji. To najprostszy blok formatu i jedyny bez bajtu rozpoznawczego.

Budowa

BajtyDługośćZawartość
0-23sygnatura: 47 49 46 = "GIF"
3-53wersja: 38 37 61 = "87a" albo 38 39 61 = "89a"

W przykładowym pliku (zob. wstęp):

47 49 46 38 39 61 → "GIF89a"

87a czy 89a

GIF89a dodał bloki rozszerzeń (bajt 21) i dwa nowe znaczenia w istniejących polach. Plik bez rozszerzeń jest w praktyce identyczny w obu wersjach.

Funkcja87a89a
obrazy, palety, LZW, przeplottaktak
przezroczystość, opóźnienie, sposób usuwania klatkinietak ($F9)
komentarzenietak ($FE)
tekst graficznynietak ($01)
dane aplikacji, pętla animacjinietak ($FF)
flaga sortowania palety, proporcje pikselipola zarezerwowanetak

Zalecenie specyfikacji: zapisywać "87a", jeśli plik nie używa niczego z 89a, a "89a" w przeciwnym razie. W praktyce prawie wszystkie programy zapisują zawsze "89a", a wszystkie współczesne dekodery czytają obie wersje tak samo.

Rozpoznawanie formatu

Pierwsze bajty pliku (tzw. magiczne liczby) pozwalają rozpoznać format bez patrzenia na rozszerzenie nazwy:

FormatPierwsze bajty
GIF47 49 46 38 ("GIF8")
PNG89 50 4E 47 0D 0A 1A 0A
JPEGFF D8 FF
WebP52 49 46 46 ("RIFF"), potem "WEBP" od bajtu 8
const isGif = (b) => b[0] === 0x47 && b[1] === 0x49 && b[2] === 0x46 && b[3] === 0x38;

Zaraz po nagłówku zaczyna się opis ekranu logicznego.