TIFF-Format
Tagged Image File Format
Aufbau des Headers
TIFF ist der Urahn der Bildmetadaten. Wenn du EXIF-Daten in einem JPEG siehst, ist das in Wahrheit eine TIFF-Struktur, die in der Datei steckt. Wer TIFF versteht, versteht, wie die meisten Bildmetadaten funktionieren.
Das Format beginnt mit einem 8 Byte langen Header, der zwei entscheidende Dinge verrät: die Byte-Reihenfolge (Intel oder Motorola) und wo das erste IFD zu finden ist. Ab da hangelst du dich nur noch von Zeiger zu Zeiger.
Struktur einer TIFF-Datei
TIFF-Header
| Offset | Hex | ASCII | |||||||
|---|---|---|---|---|---|---|---|---|---|
| 0000 | 49492A0008000000 | II*..... | |||||||
Byte-Reihenfolge
49 49 (II)Intel:Little-Endian (niederwertigstes Byte zuerst)
4D 4D (MM)Motorola:Big-Endian (höchstwertiges Byte zuerst)
Aufbau eines IFD
IFD steht für Image File Directory, du kannst es dir aber als Inhaltsverzeichnis vorstellen. Es ist eine flache Liste von Tags, die jeweils auf ein Datenstück verweisen. Das Raffinierte: IFDs können auf weitere IFDs zeigen und so eine Baumstruktur bilden.
Aufbau eines IFD
Aufbau eines Tag-Eintrags (12 Bytes)
Passen die Daten in 4 Bytes, stehen sie direkt im Wertfeld. Andernfalls enthält das Feld einen Offset auf die Daten.
Tag-Typen
TIFF ist streng typisiert. Jedes Tag gibt nicht nur an, was es enthält, sondern auch, wie die Bytes zu interpretieren sind. Genau deshalb musst du das Typsystem kennen, um TIFF korrekt auszulesen.
| ID | Name | Größe | Beschreibung |
|---|---|---|---|
| 1 | BYTE | 1 | Vorzeichenlose 8-Bit-Ganzzahl |
| 2 | ASCII | 1 | Nullterminierte Zeichenkette (8 Bit) |
| 3 | SHORT | 2 | Vorzeichenlose 16-Bit-Ganzzahl |
| 4 | LONG | 4 | Vorzeichenlose 32-Bit-Ganzzahl |
| 5 | RATIONAL | 8 | Zwei LONGs: Zähler/Nenner |
| 6 | SBYTE | 1 | Vorzeichenbehaftete 8-Bit-Ganzzahl |
| 7 | UNDEFINED | 1 | Rohe Bytes (Binärdaten) |
| 8 | SSHORT | 2 | Vorzeichenbehaftete 16-Bit-Ganzzahl |
| 9 | SLONG | 4 | Vorzeichenbehaftete 32-Bit-Ganzzahl |
| 10 | SRATIONAL | 8 | Zwei SLONGs: Zähler/Nenner mit Vorzeichen |
| 11 | FLOAT | 4 | IEEE-32-Bit-Gleitkommazahl |
| 12 | DOUBLE | 8 | IEEE-64-Bit-Gleitkommazahl |
| 13 | IFD | 4 | Zeiger auf ein verschachteltes IFD |
Regel zur Wertspeicherung
Gilt Größe × Anzahl ≤ 4 Bytes, steht der Wert direkt im 4 Byte großen Wertfeld. Andernfalls enthält das Feld einen Offset darauf, wo die Daten in der Datei liegen.
Offsets von IFDs berechnen
Das Schwierigste beim Auslesen von TIFF ist, der Kette aus Offsets zu folgen. Alles bezieht sich auf den Dateianfang, und du springst ziemlich viel hin und her. So funktioniert die Rechnung:
IFD0_offset = bytes[4:8] // Aus dem TIFF-Header
next_IFD = IFD0_offset + 2 + (entry_count × 12) + 4
subIFD_offset = tag_value // Aus dem Zeiger-Tag (0x8769, 0x8825)
Wichtige Tags
Tags der Bilddaten (bleiben erhalten)
0x0100:ImageWidth0x0101:ImageLength0x0102:BitsPerSample0x0103:Compression0x0111:StripOffsets0x0117:StripByteCountsMetadaten-Tags (werden entfernt)
0x010F:Make (Kamerahersteller)0x0110:Model (Kameramodell)0x0132:DateTime0x013B:Artist0x8298:Copyright0x9003:DateTimeOriginalZeiger-Tags (Sub-IFDs)
0x8769:ExifIFDPointer0x8825:GPSInfoIFDPointer0xA005:InteroperabilityIFDPointerSubIFDs
Das Haupt-IFD (IFD0) enthält oft „Zeiger-Tags“, die auf Unterverzeichnisse verweisen. So werden EXIF, GPS und andere Metadaten in logische Gruppen sortiert, während das Haupt-IFD übersichtlich bleibt.
EXIF-SubIFD
Enthält kameraspezifische Metadaten: Belichtung, Blende, ISO, Brennweite, Blitz, Weißabgleich und mehr.
GPS-SubIFD
Enthält Standortdaten: Breite, Länge, Höhe, Zeitstempel, Satelliten, Geschwindigkeit, Richtung. Ein erhebliches Datenschutzrisiko.
Maker Notes
Proprietäre Kameradaten. Das Format unterscheidet sich je nach Hersteller. Kann Seriennummern, Firmware-Version und eigene Einstellungen enthalten.
So verarbeitet PicScrub TIFF
Header auslesen
Byte-Reihenfolge (II/MM) bestimmen und das erste IFD finden
Tag-Whitelist aufbauen
Die Tags bestimmen, die zur Darstellung des Bildes nötig sind
IFD-Einträge filtern
Metadaten-Tags entfernen und SubIFD-Zeiger auf null setzen
Datei neu schreiben
TIFF mit bereinigten IFDs und kopierten Bilddaten neu aufbauen
Offsets neu berechnen
TIFF-Dateien arbeiten ausgiebig mit Datei-Offsets. Werden Metadaten entfernt, muss PicScrub alle Offsets neu berechnen, damit die Datei intakt bleibt.