Het GIF-formaat
Graphics Interchange Format
Een structuur van blokken
GIF is zo'n formaat dat zijn verwachte levensduur met tientallen jaren heeft overleefd. Het werd in 1987 bedacht door CompuServe en is nog steeds overal te vinden, vooral omdat het animatie ondersteunt.
Het formaat is opgebouwd uit blokken, en dat is verfrissend simpel vergeleken met moderne formaten. Een header, een paar descriptors, een kleurtabel, je beeldgegevens en één trailerbyte die zegt: "dit was het."
Structuur van een GIF-bestand
De GIF-header
| Offset | Hex | ASCII | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 4749463839618002E001F70000 | GIF89a....... | ||||||||||||
Verschillen tussen de versies
De oorspronkelijke spec. Geen extension blocks.
Voegde extensions, animatie en transparantie toe.
Extension blocks
Met GIF89a (de herziening uit 1989) kwamen de extension blocks, en daarmee kreeg GIF ook animatie. Alle extension blocks beginnen met 0x21, gevolgd door een byte met het type, waardoor ze goed te herkennen zijn als je door een bestand loopt. Sommige willen we houden (de timing van de animatie), andere willen we juist weghalen (comments).
Graphic Control Extension (0xF9)
Regelt de timing van de animatie, de transparantie en de disposal-methode. Staat in geanimeerde GIF's voor elke image descriptor. Blijft altijd staan.
Comment Extension (0xFE)
Gewone tekstopmerkingen. Kunnen van alles bevatten: de auteur, de aanmaakdatum, de gebruikte software of persoonlijke aantekeningen. Wordt door PicScrub verwijderd.
Application Extension (0xFF)
Gegevens voor een specifieke toepassing. De bekendste is NETSCAPE2.0, voor het herhalen van animaties. Kan ook XMP-metadata bevatten.
Plain Text Extension (0x01)
Wordt zelden gebruikt. Toont tekst met de kleurtabel van de GIF. Moderne software negeert het meestal.
Application extensions
NETSCAPE2.0:de animatielus
Bepaalt hoe vaak een geanimeerde GIF wordt herhaald. De waarde 0 betekent oneindig.
| Offset | Hex | ASCII | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 21FF0B4E45545343415045322E300301000000 | !..NETSCAPE2.0..... | ||||||||||||||||||
PicScrub laat NETSCAPE2.0 staan, zodat de animatie zich blijft gedragen zoals bedoeld.
XMP Data:Extensible Metadata Platform
Application identifier: XMP DataXMP. Bevat volledige XMP/RDF-metadata in XML-vorm.
PicScrub verwijdert XMP-application extensions.
De animatie behouden
Het lastige bij GIF is het onderscheid tussen animatiegegevens (die we moeten houden) en metadata (die we willen weghalen). Allebei zitten ze in extension blocks, dus we kunnen niet zomaar alle extensions weggooien.
Blijft staan voor de animatie
- • Het aantal herhalingen van NETSCAPE2.0
- • Graphic Control Extensions
- • De vertraging per frame
- • De disposal-methodes
- • De transparantie-indexen
- • Lokale kleurtabellen
Gaat weg
- • Comment extensions
- • XMP-application blocks
- • Onbekende application blocks
- • Plain text extensions
Hoe PicScrub GIF verwerkt
De header controleren
Kijken of de signature GIF87a of GIF89a is
De headergegevens kopiëren
De LSD en de Global Color Table ongewijzigd overnemen
De extensions filteren
NETSCAPE2.0 en Graphic Control houden, Comment en XMP weghalen
De beeldgegevens behouden
Alle image descriptors, LCT's en LZW-gegevens ongewijzigd kopiëren
De trailer wegschrijven
Het bestand afsluiten met de trailerbyte 0x3B
LZW-compressie
Nog even iets over de beeldgegevens van GIF: die gebruiken LZW-compressie, waar tot 2004 een patent op zat (met alle drama van dien in de jaren 90). PicScrub raakt de gecomprimeerde gegevens helemaal niet aan. We kopiëren ze byte voor byte, en dus is er geen enkel kwaliteitsverlies.
Waarom dat uitmaakt
Door de oorspronkelijke LZW-gegevens te bewaren, zorgt PicScrub voor:
- • Geen kwaliteitsverlies (het beeld blijft tot op de bit gelijk)
- • Snelle verwerking (geen decoderen en opnieuw coderen)
- • Een identieke omvang van de beeldgegevens
Wat GIF wel en niet lekt
Het goede nieuws over GIF is dat het ouder is dan de EXIF-standaard, dus je hoeft je geen zorgen te maken over GPS-coördinaten of camera-info. De metadata die er wel in zit, is een stuk alledaagser.
Wat er kan lekken
De privacyrisico's van GIF zijn vrij klein vergeleken met JPEG:
- • Comment extensions (soms met aantekeningen van de maker)
- • XMP-metadata (zeldzaam, maar mogelijk)
- • De naam van de software in application blocks