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.
| Cecha | GIF |
|---|---|
| barwy | paleta do 256 kolorów, każdy kolor 24 bity |
| kompresja | LZW, bezstratna |
| przezroczystość | jeden kolor palety (binarna) |
| przeplot | opcjonalny, 4 przebiegi |
| animacja | wiele obrazów z opóźnieniem (GIF89a) |
| kolejność bajtów | little-endian: najmłodszy bajt pierwszy |
Przykładowy plik
Obraz 4 × 2 piksele w czterech kolorach: #c85028, biel, czerń, #1b98e0.
Plik: przyklad.gif (65 bajtów). W powiększeniu wygląda tak: ![]()
Cały plik bajt po bajcie
| Adres | Bajty | Znaczenie | Więcej |
|---|---|---|---|
| 00-05 | 47 49 46 38 39 61 | "GIF89a" | nagłówek |
| 06-07 | 04 00 | szerokość 4 | opis ekranu logicznego |
| 08-09 | 02 00 | wysokość 2 | |
| 0A | F1 | paleta globalna, 4 kolory | |
| 0B | 00 | kolor tła: indeks 0 | |
| 0C | 00 | proporcje pikseli: nie podane | |
| 0D-18 | C8 50 28 FF FF FF 00 00 00 1B 98 E0 | paleta: 4 × 3 bajty | paleta globalna |
| 19-25 | 21 FE 09 73 65 6D 6D 69 78 2E 70 6C 00 | komentarz "semmix.pl" | komentarze |
| 26-2D | 21 F9 04 00 00 00 00 00 | sterowanie grafiką | sterowanie grafiką |
| 2E-37 | 2C 00 00 00 00 04 00 02 00 00 | deskryptor obrazu | blok obrazu |
| 38 | 02 | minimalna długość kodu LZW | |
| 39-3F | 05 04 12 30 13 05 00 | podblok 5 bajtów danych LZW, terminator | |
| 40 | 3B | koniec 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.