PicScrub logoPicScrub
Zurück zu den Formaten

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

Header
IFD0
Strip Data
EXIF IFD
GPS IFD
Header
8 Bytes
Byte-Reihenfolge + Magic + IFD-Offset
IFD0
200 Bytes
Verzeichnis des Hauptbildes
Strip Data
Variable Länge
Pixeldaten des Bildes
EXIF IFD
500 Bytes
EXIF-Unterverzeichnis
GPS IFD
100 Bytes
GPS-Unterverzeichnis

TIFF-Header

Byte-Reihenfolge (II = Little Endian)
Magic Number (42)
Offset des ersten IFD
OffsetHexASCII
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

2 BytesAnzahl der Einträge (Anzahl der Tags)
12 × N BytesTag-Einträge (je 12 Bytes)
4 BytesOffset des nächsten IFD (0, wenn keines folgt)

Aufbau eines Tag-Eintrags (12 Bytes)

Tag-IDTypAnzahlWert/Offset
2 Bytes2 Bytes4 Bytes4 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.

IDNameGrößeBeschreibung
1BYTE1Vorzeichenlose 8-Bit-Ganzzahl
2ASCII1Nullterminierte Zeichenkette (8 Bit)
3SHORT2Vorzeichenlose 16-Bit-Ganzzahl
4LONG4Vorzeichenlose 32-Bit-Ganzzahl
5RATIONAL8Zwei LONGs: Zähler/Nenner
6SBYTE1Vorzeichenbehaftete 8-Bit-Ganzzahl
7UNDEFINED1Rohe Bytes (Binärdaten)
8SSHORT2Vorzeichenbehaftete 16-Bit-Ganzzahl
9SLONG4Vorzeichenbehaftete 32-Bit-Ganzzahl
10SRATIONAL8Zwei SLONGs: Zähler/Nenner mit Vorzeichen
11FLOAT4IEEE-32-Bit-Gleitkommazahl
12DOUBLE8IEEE-64-Bit-Gleitkommazahl
13IFD4Zeiger 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:

// Position von IFD0
IFD0_offset = bytes[4:8] // Aus dem TIFF-Header
// Position des nächsten IFD (z. B. IFD1 für das Vorschaubild)
next_IFD = IFD0_offset + 2 + (entry_count × 12) + 4
// Position eines SubIFD (EXIF, GPS)
subIFD_offset = tag_value // Aus dem Zeiger-Tag (0x8769, 0x8825)

Wichtige Tags

Tags der Bilddaten (bleiben erhalten)

0x0100:ImageWidth
0x0101:ImageLength
0x0102:BitsPerSample
0x0103:Compression
0x0111:StripOffsets
0x0117:StripByteCounts

Metadaten-Tags (werden entfernt)

0x010F:Make (Kamerahersteller)
0x0110:Model (Kameramodell)
0x0132:DateTime
0x013B:Artist
0x8298:Copyright
0x9003:DateTimeOriginal

Zeiger-Tags (Sub-IFDs)

0x8769:ExifIFDPointer
0x8825:GPSInfoIFDPointer
0xA005:InteroperabilityIFDPointer

SubIFDs

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

1

Header auslesen

Byte-Reihenfolge (II/MM) bestimmen und das erste IFD finden

2

Tag-Whitelist aufbauen

Die Tags bestimmen, die zur Darstellung des Bildes nötig sind

3

IFD-Einträge filtern

Metadaten-Tags entfernen und SubIFD-Zeiger auf null setzen

4

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.