PicScrub logoPicScrub
Zurück zu den Formaten

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

ftyp
meta
mdat
ftyp
24 Bytes
Dateityp und Brands
meta
1000 Bytes
Container für Metadaten
mdat
Variable Länge
Mediendaten (HEVC)

HEIC-Header (ftyp-Box)

Boxgröße (24)
Boxtyp (ftyp)
Major Brand (heic)
Minor Version
Kompatibel (mif1)
Kompatibel (heic)
OffsetHexASCII
0000
000000186674797068656963
....ftypheic
000C
000000006D69663168656963
....mif1heic

Aufbau einer Box

GrößeTypDaten
4 Bytes (BE)4 BytesGröße - 8

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.

Kompatible Brands: heic heix hevc hevx heim heis hevm hevs mif1 msf1

meta: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.

Vorher: [Exif][GPS-Daten: 37.7749, -122.4194][Kamera: iPhone]
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

1

Box-Struktur auslesen

ftyp und meta rekursiv parsen und alle Boxen erfassen

2

Metadaten lokalisieren

Exif- und XMP-Eigenschaften im ipco-Container finden

3

Metadaten nullen

Den Inhalt der Metadaten-Boxen mit Nullen überschreiben

4

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.

Eingabe: 2,5 MB (mit 50 KB EXIF)
Ausgabe: 2,5 MB (50 KB Nullen)

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.

FormatContainerCodecVerwendet von
HEICHEIFHEVC (H.265)Apple-Geräte
HEIFHEIFVerschiedeneAllgemeiner Container
AVIFHEIFAV1Web (lizenzgebührenfrei)

Alle drei nutzen dieselbe ISOBMFF-/HEIF-Containerstruktur, deshalb funktioniert der Ansatz von PicScrub bei allen dreien.