GIF-Format
Graphics Interchange Format
Aufbau aus Blöcken
GIF ist eines dieser Formate, die ihre erwartete Lebensdauer um Jahrzehnte übertroffen haben. 1987 von CompuServe entwickelt, ist es bis heute allgegenwärtig, vor allem wegen der Animationen.
Das Format ist aus Blöcken aufgebaut und wirkt im Vergleich zu modernen Formaten erfrischend übersichtlich: ein Header, ein paar Deskriptoren, eine Farbtabelle, die Bilddaten und ein Trailer aus einem einzigen Byte, der „Ende“ signalisiert.
Struktur einer GIF-Datei
GIF-Header
| Offset | Hex | ASCII | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 4749463839618002E001F70000 | GIF89a....... | ||||||||||||
Unterschiede zwischen den Versionen
Ursprüngliche Spezifikation. Keine Extension-Blöcke.
Ergänzt Extensions, Animation und Transparenz.
Extension-Blöcke
GIF89a (die Überarbeitung von 1989) hat Extension-Blöcke eingeführt. So kam GIF zu seinen Animationen. Alle Extension-Blöcke beginnen mit 0x21, gefolgt von einem Typ-Byte. Dadurch sind sie beim Durchsuchen einer Datei leicht zu erkennen. Manche davon wollen wir behalten (Animations-Timing), andere entfernen (Kommentare).
Graphic Control Extension (0xF9)
Steuert Animations-Timing, Transparenz und Disposal-Methode. Steht in animierten GIFs vor jedem Bild-Deskriptor. Bleibt immer erhalten.
Comment Extension (0xFE)
Reine Textkommentare. Können beliebige Informationen enthalten, etwa Urheber, Erstellungsdatum, Software oder private Notizen. Wird von PicScrub entfernt.
Application Extension (0xFF)
Anwendungsspezifische Daten. Am wichtigsten: NETSCAPE2.0 für die Endlosschleife von Animationen. Kann auch XMP-Metadaten enthalten.
Plain Text Extension (0x01)
Wird kaum genutzt. Stellt Text über die GIF-Farbtabelle dar. Von moderner Software meist ignoriert.
Application Extensions
NETSCAPE2.0:Animationsschleife
Legt fest, wie oft ein animiertes GIF wiederholt wird. Der Wert 0 bedeutet Endlosschleife.
| Offset | Hex | ASCII | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 21FF0B4E45545343415045322E300301000000 | !..NETSCAPE2.0..... | ||||||||||||||||||
PicScrub behält NETSCAPE2.0 bei, damit die Animation weiterhin funktioniert.
XMP Data:Extensible Metadata Platform
Anwendungskennung: XMP DataXMP. Enthält vollständige XMP-/RDF-Metadaten im XML-Format.
PicScrub entfernt XMP-Application-Extensions.
Animationen erhalten
Knifflig ist bei GIF, Animationsdaten (die wir behalten müssen) von Metadaten (die wir entfernen wollen) zu unterscheiden. Beides steckt in Extension-Blöcken, wir können also nicht einfach alle Extensions löschen.
Für die Animation erhalten
- • NETSCAPE2.0-Durchlaufzähler
- • Graphic Control Extensions
- • Frame-Verzögerungen
- • Disposal-Methoden
- • Transparenz-Indizes
- • Lokale Farbtabellen
Entfernt
- • Comment Extensions
- • XMP-Application-Blöcke
- • Unbekannte Application-Blöcke
- • Plain Text Extensions
So verarbeitet PicScrub GIF
Header prüfen
Auf die Signatur GIF87a oder GIF89a testen
Header-Daten kopieren
LSD und globale Farbtabelle unverändert übernehmen
Extensions filtern
NETSCAPE2.0 und Graphic Control behalten, Comment und XMP entfernen
Bilddaten erhalten
Alle Bild-Deskriptoren, LCTs und LZW-Daten unverändert kopieren
Trailer schreiben
Die Datei mit dem Trailer-Byte 0x3B abschließen
LZW-Kompression
Kurz zu den Bilddaten von GIF: Sie nutzen die LZW-Kompression, die bis 2004 patentiert war (was in den 90ern für reichlich Ärger sorgte). PicScrub fasst die komprimierten Daten überhaupt nicht an. Wir kopieren sie Byte für Byte, es gibt also keinerlei Qualitätsverlust.
Warum das wichtig ist
Indem PicScrub die ursprünglichen LZW-Daten erhält, gilt:
- • Kein Qualitätsverlust (bitgenaue Bilderhaltung)
- • Schnelle Verarbeitung (kein Dekodier-/Kodierzyklus)
- • Identische Größe der Bilddaten
Grenzen der GIF-Metadaten
Die gute Nachricht bei GIF: Das Format ist älter als der EXIF-Standard, es gibt also weder GPS-Koordinaten noch Kamerainfos. Die Metadaten-Sorgen sind hier deutlich banaler.
Was durchsickern kann
Die Datenschutzrisiken von GIF sind im Vergleich zu JPEG gering:
- • Comment Extensions (manchmal mit Notizen des Urhebers)
- • XMP-Metadaten (selten, aber möglich)
- • Software-Kennungen in Application-Blöcken