Format GIF
Graphics Interchange Format
Struktura blokowa
GIF to jeden z tych formatów, które przeżyły swoją epokę o całe dekady. Powstał w CompuServe w 1987 roku i wciąż jest wszędzie, głównie dzięki obsłudze animacji.
Format opiera się na strukturze blokowej, która na tle dzisiejszych formatów jest wręcz orzeźwiająco prosta. Nagłówek, kilka deskryptorów, tablica kolorów, dane obrazu i jednobajtowy znacznik końca, który mówi „to już koniec”.
Struktura pliku GIF
Nagłówek GIF
| Offset | Hex | ASCII | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 4749463839618002E001F70000 | GIF89a....... | ||||||||||||
Różnice między wersjami
Pierwotna specyfikacja. Bez bloków rozszerzeń.
Dodaje rozszerzenia, animację i przezroczystość.
Bloki rozszerzeń
GIF89a (wersja z 1989 roku) wprowadził bloki rozszerzeń i to dzięki nim GIF dostał animację. Wszystkie bloki rozszerzeń zaczynają się od 0x21, po którym idzie bajt typu, więc łatwo je wypatrzyć, przeglądając plik. Niektóre chcemy zachować (czasy animacji), inne usunąć (komentarze).
Graphic Control Extension (0xF9)
Steruje czasem trwania klatek, przezroczystością i sposobem usuwania klatki. Poprzedza każdy deskryptor obrazu w animowanych GIF-ach. Zawsze zachowywany.
Comment Extension (0xFE)
Zwykłe komentarze tekstowe. Mogą zawierać dowolne informacje: od autora i daty utworzenia po nazwę programu czy prywatne notatki. Usuwane przez PicScrub.
Application Extension (0xFF)
Dane specyficzne dla aplikacji. Najważniejsze: NETSCAPE2.0, odpowiadające za zapętlanie animacji. Mogą też zawierać metadane XMP.
Plain Text Extension (0x01)
Używane rzadko. Rysuje tekst przy użyciu tablicy kolorów GIF-a. Dzisiejsze oprogramowanie zwykle je ignoruje.
Rozszerzenia aplikacji
NETSCAPE2.0:pętla animacji
Określa, ile razy animowany GIF ma się powtórzyć. Wartość 0 oznacza pętlę bez końca.
| Offset | Hex | ASCII | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 21FF0B4E45545343415045322E300301000000 | !..NETSCAPE2.0..... | ||||||||||||||||||
PicScrub zachowuje NETSCAPE2.0, żeby animacja zachowywała się tak samo.
XMP Data:Extensible Metadata Platform
Identyfikator aplikacji: XMP DataXMP. Zawiera pełne metadane XMP/RDF w formacie XML.
PicScrub usuwa rozszerzenia aplikacji z danymi XMP.
Zachowanie animacji
Najtrudniejsze w GIF-ie jest odróżnienie danych animacji (które musimy zachować) od metadanych (które chcemy usunąć). Jedne i drugie siedzą w blokach rozszerzeń, więc nie możemy po prostu wyciąć wszystkich rozszerzeń.
Zachowywane dla animacji
- • Liczba powtórzeń NETSCAPE2.0
- • Bloki Graphic Control Extension
- • Czasy trwania klatek
- • Metody usuwania klatki
- • Indeksy przezroczystości
- • Lokalne tablice kolorów
Usuwane
- • Rozszerzenia z komentarzami
- • Bloki aplikacji z danymi XMP
- • Nieznane bloki aplikacji
- • Rozszerzenia Plain Text
Jak PicScrub przetwarza pliki GIF
Sprawdzenie nagłówka
Weryfikacja sygnatury GIF87a albo GIF89a
Skopiowanie danych nagłówka
Zachowanie LSD i globalnej tablicy kolorów bez zmian
Odfiltrowanie rozszerzeń
Zachowanie NETSCAPE2.0 i Graphic Control, usunięcie komentarzy i XMP
Zachowanie danych obrazu
Skopiowanie wszystkich deskryptorów obrazu, lokalnych tablic kolorów i danych LZW bez zmian
Zapis znacznika końca
Zakończenie pliku bajtem 0x3B
Kompresja LZW
Krótka uwaga o danych obrazu w GIF-ie: używają kompresji LZW, która aż do 2004 roku była opatentowana (co w latach 90. wywołało sporo zamieszania). PicScrub w ogóle nie rusza skompresowanych danych. Kopiujemy je bajt w bajt, więc nie ma żadnej straty jakości.
Dlaczego to ważne
Zachowując oryginalne dane LZW, PicScrub gwarantuje, że:
- • nie ma straty jakości (obraz zachowany co do bitu)
- • przetwarzanie jest szybkie (bez cyklu dekodowania i kodowania)
- • dane obrazu mają dokładnie ten sam rozmiar
Metadane w GIF-ie: ograniczenia
Dobra wiadomość jest taka, że GIF powstał przed standardem EXIF, więc nie ma tu współrzędnych GPS ani danych aparatu, o które trzeba się martwić. Kwestie metadanych są znacznie bardziej przyziemne.
Co może wyciec
W porównaniu z JPEG problemy GIF-a z prywatnością są niewielkie:
- • rozszerzenia z komentarzami (czasem z notatkami autora)
- • metadane XMP (rzadko, ale się zdarzają)
- • nazwa programu w blokach aplikacji