Bloki rozszerzeń ($21)
GIF89a dodał do formatu rozszerzenia: bloki, które nie zawierają pikseli, ale mówią, jak je pokazać, albo przechowują dodatkowe dane. Wszystkie mają tę samą budowę, więc dekoder może pominąć każde, którego nie zna.
Wspólna budowa
Formalnie blok stały to po prostu pierwszy podblok. Specyfikacja wyróżnia go, bo ma z góry ustaloną długość i znaczenie bajtów.
Cztery standardowe rozszerzenia
| Etykieta | Nazwa | Do czego | Używane? |
|---|---|---|---|
F9 | sterowanie grafiką | przezroczystość, opóźnienie klatki, sposób usuwania | bardzo często, w każdej animacji |
FF | rozszerzenie aplikacji | dane programu, np. liczba powtórzeń animacji | często (NETSCAPE2.0) |
FE | komentarz | tekst niewidoczny na obrazie | czasem |
01 | tekst graficzny | tekst rysowany na obrazie | prawie nigdy |
Etykiety 00-7F są przeznaczone na rozszerzenia, które coś rysują, 80-F9 na sterujące, FA-FF na specjalne. W praktyce nigdy nie dodano nowych oficjalnych etykiet. Nowe zastosowania (XMP, profile ICC) korzystają z rozszerzenia aplikacji $FF z własnym identyfikatorem.
Pomijanie nieznanego rozszerzenia
// pos wskazuje bajt 21; zwraca pozycję za terminatorem
function skipExtension(b, pos) {
pos += 2; // 21 i etykieta
for (let n = b[pos++]; n !== 0; n = b[pos++]) pos += n;
return pos;
}
Ta jedna funkcja wystarczy, żeby dekoder nie zatrzymał się na rozszerzeniu, którego nie rozumie. Dlatego stare przeglądarki z lat 90. poprawnie wyświetlały GIF-y z blokami dodanymi długo po ich wydaniu.
W przykładowym pliku
Cały plik jest rozpisany we wstępie.