HEIC-Format
High Efficiency Image Container
ISOBMFF-Container
Wer schon einmal mit MP4-Videos gearbeitet hat, findet sich in HEIC schnell zurecht. Apple hat das ISO Base Media File Format (ISOBMFF) als Container für HEIC gewählt. Das Format ist damit näher an Videoformaten als an klassischen Bildformaten wie JPEG oder PNG.
Es besteht aus verschachtelten „Boxen“ (auch Atoms genannt) mit vier Zeichen langen Typcodes. Das ist ein erstaunlich elegantes Design: Es erlaubt komplexe Datenhierarchien und bleibt trotzdem gut auslesbar, sobald man die Grundlagen verstanden hat.
Struktur einer HEIC-Datei
HEIC-Header (ftyp-Box)
| Offset | Hex | ASCII | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 000000186674797068656963 | ....ftypheic | |||||||||||
| 000C | 000000006D69663168656963 | ....mif1heic | |||||||||||
Aufbau einer Box
Ist die Größe 1, folgt nach dem Typ eine 8 Byte große erweiterte Größenangabe. Ist die Größe 0, reicht die Box bis zum Dateiende.
Die wichtigsten Boxen
Die Box-Hierarchie in HEIC-Dateien kann ziemlich tief werden. Anders als bei JPEG, wo Metadaten an vorhersehbaren Offsets liegen, vergräbt HEIC sie mehrere Ebenen tief in einer verschachtelten Struktur. So greifen die wichtigsten Teile ineinander:
ftyp:Dateityp
Erste Box der Datei. Enthält den Major Brand und die kompatiblen Brands. Für die Formaterkennung erforderlich.
heic heix hevc hevx heim heis hevm hevs mif1 msf1meta:Container für Metadaten
Enthält alle Metadaten, darunter Positionen der Items, deren Eigenschaften und Zuordnungen. Hier liegen auch die EXIF-/XMP-Daten.
meta (Container für Metadaten) ├── hdlr (Handler-Referenz) ├── pitm (ID des Hauptbildes) ├── iloc (Item-Positionen → Offsets in mdat) │ └── Einträge [item_id, offset, length] ├── iinf (Item-Infos → 'Exif'-Item finden) │ └── infe-Einträge mit Item-Typen ├── iprp (Item-Eigenschaften) │ ├── ipco (Container für Eigenschaften) │ │ ├── hvcC (HEVC-Decoder-Konfiguration) │ │ ├── ispe (Bildabmessungen) │ │ ├── colr (ICC-Profil, Offset+12) │ │ ├── Exif (EXIF im TIFF-Format) │ │ └── pixi (Pixelinformationen) │ └── ipma (Zuordnung der Eigenschaften) └── iref (Item-Referenzen)
mdat:Mediendaten
Enthält die eigentlichen HEVC-kodierten Bilddaten. Die iloc-Box in meta liefert die Offsets in mdat.
Metadaten in HEIC
Wer die APP-Marker von JPEG gewohnt ist, muss bei HEIC umdenken. Statt aufeinanderfolgender Marker am Dateianfang liegen die Metadaten hier als „Item-Eigenschaften“ in der meta-Box. Die eigentlichen EXIF-Daten stehen weiterhin im vertrauten TIFF-Format, doch um sie zu finden, musst du dich erst durch die Box-Hierarchie arbeiten.
EXIF-Eigenschaft
Liegt in ipco (Container für Item-Eigenschaften) mit dem Typ „Exif“. Enthält gewöhnliche EXIF-Daten im TIFF-Format, genau wie bei JPEG.
XMP-Eigenschaft
XML-basierte Metadaten, gespeichert als Eigenschaft vom Typ „mime“ mit dem Content-Type „application/rdf+xml“.
ICC-Profil
Farbprofil, gespeichert als „colr“-Box mit dem Typ „prof“.
Warum die Offsets so wichtig sind
Die iloc-Box enthält exakte Byte-Offsets, die nach mdat zeigen. Ändert sich die Größe einer Box (etwa weil Metadaten entfernt werden), müssen diese Offsets neu berechnet werden, sonst wird die Datei unlesbar.
Verlustfreie Anonymisierung
Jetzt wird es bei HEIC knifflig. Das Format wurde für die effiziente Speicherung von Videos und Bildern entworfen, nicht für die bequeme Bearbeitung von Metadaten.
Die Herausforderung
Die offsetbasierte Struktur von HEIC macht das Entfernen von Bytes riskant. Die iloc-Box enthält exakte Byte-Offsets, die nach mdat zeigen. Entfernst du auch nur eine einzige Box, stimmen diese Offsets nicht mehr und das Bild lässt sich nicht mehr öffnen.
Der Ansatz: mit Nullen überschreiben
Statt die Metadaten-Boxen zu entfernen, überschreibt PicScrub deren Inhalt mit Nullen und behält Struktur und Größe der Boxen bei.
Nachher: [Exif][0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00...]
Warum mit Nullen überschreiben?
- • Erhält die Dateiintegrität:Alle Offsets bleiben gültig
- • Keine Neukompression:Die Bilddaten bleiben unberührt
- • Metadaten sind vernichtet:Nullen enthalten keine Information
- • Umkehrbar?:Nein, überschriebene Daten sind weg
So verarbeitet PicScrub HEIC
Box-Struktur auslesen
ftyp und meta rekursiv parsen und alle Boxen erfassen
Metadaten lokalisieren
Exif- und XMP-Eigenschaften im ipco-Container finden
Metadaten nullen
Den Inhalt der Metadaten-Boxen mit Nullen überschreiben
Struktur erhalten
Box-Header, Größen und alle Offsets unverändert lassen
Hinweis zur Dateigröße
Da PicScrub die Metadaten mit Nullen überschreibt, statt sie zu entfernen, ist die Ausgabedatei genauso groß wie die Eingabedatei. Der Platz der Metadaten bleibt erhalten, ist aber mit Nullen gefüllt.
HEIC, HEIF und AVIF im Vergleich
Die Namen sorgen für Verwirrung, deshalb hier die Klarstellung: HEIF ist das Containerformat, während HEIC und AVIF angeben, mit welchem Codec das Bild in diesem Container komprimiert wurde.
| Format | Container | Codec | Verwendet von |
|---|---|---|---|
| HEIC | HEIF | HEVC (H.265) | Apple-Geräte |
| HEIF | HEIF | Verschiedene | Allgemeiner Container |
| AVIF | HEIF | AV1 | Web (lizenzgebührenfrei) |
Alle drei nutzen dieselbe ISOBMFF-/HEIF-Containerstruktur, deshalb funktioniert der Ansatz von PicScrub bei allen dreien.