PicScrub logoPicScrub
Terug naar de formaten

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

Header
LSD
GCT
Extensions
Image Data
Trailer
Header
6 bytes
GIF87a of GIF89a
LSD
7 bytes
Logical Screen Descriptor
GCT
768 bytes
Global Color Table (optioneel)
Extensions
100 bytes
Extension blocks (metadata)
Image Data
Variabele lengte
Image descriptor + LZW-gegevens
Trailer
1 bytes
Afsluiter 0x3B

De GIF-header

GIF-signature
Versie (89a)
Breedte (640)
Hoogte (480)
Packed fields
Index van de achtergrond
Pixelverhouding
OffsetHexASCII
0000
4749463839618002E001F70000
GIF89a.......

Verschillen tussen de versies

GIF87a

De oorspronkelijke spec. Geen extension blocks.

GIF89a

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.

21 F9 04 [disposal] [delay] [transparent] 00

Comment Extension (0xFE)

Gewone tekstopmerkingen. Kunnen van alles bevatten: de auteur, de aanmaakdatum, de gebruikte software of persoonlijke aantekeningen. Wordt door PicScrub verwijderd.

21 FE [size] [comment data...] 00

Application Extension (0xFF)

Gegevens voor een specifieke toepassing. De bekendste is NETSCAPE2.0, voor het herhalen van animaties. Kan ook XMP-metadata bevatten.

21 FF 0B [app identifier] [auth code] [data...] 00

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.

Begin van de extension
Blokgrootte (11)
NETSCAPE2.0
Grootte van het sub-block
ID van het sub-block
Aantal herhalingen
Afsluiter
OffsetHexASCII
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

1

De header controleren

Kijken of de signature GIF87a of GIF89a is

2

De headergegevens kopiëren

De LSD en de Global Color Table ongewijzigd overnemen

3

De extensions filteren

NETSCAPE2.0 en Graphic Control houden, Comment en XMP weghalen

4

De beeldgegevens behouden

Alle image descriptors, LCT's en LZW-gegevens ongewijzigd kopiëren

5

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