semmixkolor i percepcja

Format GIF: wstęp

GIF to jeden z najprostszych formatów graficznych i jeden z najstarszych, które nadal są w użyciu. Ta część działu rozbiera go na bajty na przykładzie prawdziwego, 65-bajtowego pliku, który można pobrać i sprawdzić w dowolnym edytorze szesnastkowym.

Historia

Format opracowała firma CompuServe w 1987 roku jako GIF87a, żeby przesyłać obrazy przez modem. W 1989 roku powstała wersja GIF89a z blokami rozszerzeń: przezroczystością, opóźnieniem między klatkami i komentarzami. Na nich opierają się animowane GIF-y.

CechaGIF
barwypaleta do 256 kolorów, każdy kolor 24 bity
kompresjaLZW, bezstratna
przezroczystośćjeden kolor palety (binarna)
przeplotopcjonalny, 4 przebiegi
animacjawiele obrazów z opóźnieniem (GIF89a)
kolejność bajtówlittle-endian: najmłodszy bajt pierwszy

Przykładowy plik

Obraz 4 × 2 piksele w czterech kolorach: #c85028, biel, czerń, #1b98e0.

indeksy pikseli: wygląd: 0 0 1 1 0 3 3 1

Plik: przyklad.gif (65 bajtów). W powiększeniu wygląda tak: przykładowy obraz GIF 4 na 2 piksele

Cały plik bajt po bajcie

AdresBajtyZnaczenieWięcej
00-0547 49 46 38 39 61"GIF89a"nagłówek
06-0704 00szerokość 4opis ekranu logicznego
08-0902 00wysokość 2
0AF1paleta globalna, 4 kolory
0B00kolor tła: indeks 0
0C00proporcje pikseli: nie podane
0D-18C8 50 28 FF FF FF 00 00 00 1B 98 E0paleta: 4 × 3 bajtypaleta globalna
19-2521 FE 09 73 65 6D 6D 69 78 2E 70 6C 00komentarz "semmix.pl"komentarze
26-2D21 F9 04 00 00 00 00 00sterowanie grafikąsterowanie grafiką
2E-372C 00 00 00 00 04 00 02 00 00deskryptor obrazublok obrazu
3802minimalna długość kodu LZW
39-3F05 04 12 30 13 05 00podblok 5 bajtów danych LZW, terminator
403Bkoniec pliku (trailer)kolejność bloków

Najciekawsze są bajty 04 12 30 13 05: to osiem pikseli obrazu skompresowanych algorytmem LZW do 36 bitów. Ich rozkodowanie krok po kroku jest na stronach kompresja LZW w GIF i dekompresja LZW w GIF.

Plik został wygenerowany przez program napisany na potrzeby tego działu i sprawdzony niezależnym dekoderem systemowym: wszystkie piksele odczytują się zgodnie z zamierzeniem.