Format HEIC
High Efficiency Image Container
Le conteneur ISOBMFF
Si vous avez déjà travaillé avec des fichiers vidéo MP4, HEIC vous semblera familier. Apple a retenu l’ISO Base Media File Format (ISOBMFF) comme conteneur pour HEIC : ce format a donc davantage en commun avec la vidéo qu’avec les formats d’image traditionnels comme JPEG ou PNG.
Il se compose de « boîtes » imbriquées (aussi appelées atomes), identifiées par un code de quatre caractères. Une conception étonnamment élégante, qui autorise des hiérarchies de données complexes tout en restant relativement simple à analyser une fois les bases acquises.
Structure d’un fichier HEIC
En-tête HEIC (boîte ftyp)
| Offset | Hex | ASCII | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 000000186674797068656963 | ....ftypheic | |||||||||||
| 000C | 000000006D69663168656963 | ....mif1heic | |||||||||||
Structure d’une boîte
Si la taille vaut 1, une taille étendue sur 8 octets suit le type. Si elle vaut 0, la boîte s’étend jusqu’à la fin du fichier.
Les boîtes principales
La hiérarchie des boîtes d’un fichier HEIC peut devenir profonde. Contrairement au JPEG, où les métadonnées se trouvent à des positions prévisibles, HEIC enfouit les siennes plusieurs niveaux plus bas, dans une structure imbriquée. Voici comment s’articulent les principaux éléments.
ftyp : type de fichier
Première boîte du fichier. Contient la marque principale et les marques compatibles. Indispensable à l’identification du format.
heic heix hevc hevx heim heis hevm hevs mif1 msf1meta : conteneur de métadonnées
Contient toutes les métadonnées : emplacement des éléments, propriétés et associations. C’est là que résident les données EXIF/XMP.
meta (conteneur de métadonnées) ├── hdlr (référence du gestionnaire) ├── pitm (identifiant de l'élément principal) ├── iloc (emplacement des éléments → offsets dans mdat) │ └── entrées [item_id, offset, longueur] ├── iinf (infos sur les éléments → repérer l'élément « Exif ») │ └── entrées infe avec les types d'éléments ├── iprp (propriétés des éléments) │ ├── ipco (conteneur de propriétés) │ │ ├── hvcC (configuration du décodeur HEVC) │ │ ├── ispe (dimensions de l'image) │ │ ├── colr (profil ICC, offset+12) │ │ ├── Exif (EXIF au format TIFF) │ │ └── pixi (informations sur les pixels) │ └── ipma (associations de propriétés) └── iref (références entre éléments)
mdat : données média
Contient les données d’image encodées en HEVC. La boîte iloc, dans meta, fournit les offsets vers mdat.
Les métadonnées dans HEIC
Si vous êtes habitué aux marqueurs APP du JPEG, HEIC procède tout autrement. Au lieu de marqueurs séquentiels en début de fichier, les métadonnées prennent la forme de « propriétés d’élément » à l’intérieur de la boîte meta. Les données EXIF restent au format TIFF habituel, mais il faut d’abord naviguer dans la hiérarchie de boîtes pour les trouver.
Propriété EXIF
Stockée dans ipco (conteneur de propriétés d’élément) avec le type « Exif ». Contient des données EXIF standard au format TIFF, comme dans un JPEG.
Propriété XMP
Métadonnées XML stockées comme propriété de type « mime », avec le content-type « application/rdf+xml ».
Profil ICC
Profil colorimétrique stocké dans une boîte « colr » de type « prof ».
Pourquoi les offsets sont critiques
La boîte iloc contient des offsets d’octets précis qui pointent dans mdat. Si la taille d’une boîte change (parce qu’on a supprimé des métadonnées, par exemple), ces offsets doivent être recalculés, sans quoi le fichier devient illisible.
L’anonymisation sans perte
C’est ici que HEIC se complique. Le format a été conçu pour un stockage efficace d’images et de vidéos, pas pour faciliter la manipulation des métadonnées.
Le problème
La structure de HEIC, fondée sur des offsets, rend tout retrait d’octets risqué. La boîte iloc contient des offsets d’octets précis qui pointent dans mdat. Si vous supprimez ne serait-ce qu’une boîte, ces offsets deviennent faux et l’image ne s’ouvre plus.
L’approche par écrasement avec des zéros
Plutôt que de supprimer les boîtes de métadonnées, PicScrub en écrase le contenu avec des zéros, tout en préservant la structure et la taille des boîtes.
Après : [Exif][0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00...]
Pourquoi écraser avec des zéros ?
- • Intégrité du fichier préservée : tous les offsets restent valides
- • Aucune recompression : les données d’image ne sont pas touchées
- • Métadonnées détruites : des zéros ne contiennent aucune information
- • Réversible ? : non, les données écrasées sont perdues
Comment PicScrub traite le HEIC
Analyser la structure des boîtes
Analyser récursivement ftyp et meta, et identifier toutes les boîtes
Localiser les métadonnées
Trouver les propriétés Exif et XMP dans le conteneur ipco
Mettre le contenu à zéro
Écraser le contenu des boîtes de métadonnées avec des zéros
Préserver la structure
Conserver les en-têtes, les tailles de boîtes et tous les offsets inchangés
À propos de la taille du fichier
Comme PicScrub écrase les métadonnées avec des zéros au lieu de les supprimer, le fichier de sortie fait exactement la même taille que le fichier d’entrée. L’espace des métadonnées est conservé, mais rempli de zéros.
HEIC, HEIF ou AVIF ?
La nomenclature prête à confusion, alors clarifions les choses. HEIF est le format de conteneur, tandis que HEIC et AVIF désignent le codec utilisé pour compresser l’image à l’intérieur de ce conteneur.
| Format | Conteneur | Codec | Utilisé par |
|---|---|---|---|
| HEIC | HEIF | HEVC (H.265) | Les appareils Apple |
| HEIF | HEIF | Divers | Conteneur générique |
| AVIF | HEIF | AV1 | Le Web (libre de redevances) |
Tous trois reposent sur la même structure de conteneur ISOBMFF/HEIF : l’approche de PicScrub fonctionne donc pour les trois.