Segments JPEG et blocs PNG : où vivent les métadonnées dans un fichier
Comment lire chaque ligne du tableau « Structure du fichier » d'AuditImage. Ce que contiennent APP1, APP11, COM, tEXt et caBX, et ce que les décalages et tailles vous indiquent.
JPEG : segments à marqueurs
Un JPEG est une série de segments commençant chacun par FF xx. Tout ce qui précède les données de l'image est des métadonnées ou des paramètres de décodage :
| Marqueur | Nom | Contenu |
|---|---|---|
| FF D8 | SOI | début de l'image |
| FF E0 | APP0 | en-tête JFIF, unité de résolution, miniature |
| FF E1 | APP1 | EXIF (commence par Exif\0\0) ou XMP (commence par http://ns.adobe.com/xap/1.0/) |
| FF E2 | APP2 | profil ICC, MPF multi-images (photos de profondeur de téléphone) |
| FF EB | APP11 | manifeste C2PA (commence par JP, contient une boîte jumb) |
| FF ED | APP13 | Photoshop IRB, contenant IPTC |
| FF EE | APP14 | indicateur de transformation de couleur Adobe |
| FF FE | COM | commentaire, texte libre |
| FF DB | DQT | tables de quantisation |
| FF C4 | DHT | tables de Huffman |
| FF C0 | SOF0 | en-tête de trame : dimensions, composants |
| FF DA | SOS | début du balayage, suivi des données compressées jusqu'à EOI |
| FF D9 | EOI | fin de l'image |
Chaque segment contient au maximum 64 Ko. Les charges utiles plus volumineuses sont réparties sur plusieurs segments du même type : un grand XMP utilise « XMP étendu », les grands manifestes C2PA sont répartis sur plusieurs segments APP11 et réassemblés par numéro de séquence. Deux lignes APP11 C2PA consécutives dans le tableau d'AuditImage sont exactement cela.
PNG : blocs
Un PNG commence par une signature de 8 octets, puis une série de blocs chacun avec une longueur, un type, des données et un CRC :
| Type | Contenu |
|---|---|
| IHDR | dimensions, profondeur de bits, type de couleur |
| iCCP | profil ICC |
| pHYs | résolution physique |
| eXIf | EXIF (ajouté au standard en 2017) |
| tEXt / iTXt / zTXt | texte clé/valeur : XMP, paramètres SD et l'étiquette implicite AIGC vivent tous ici |
| caBX | manifeste C2PA |
| IDAT | données de l'image, possiblement plusieurs blocs |
| IEND | fin |
Le XMP dans un PNG est un iTXt avec le mot-clé XML:com.adobe.xmp. Les paramètres Stable Diffusion sont un tEXt avec le mot-clé parameters.
WebP : blocs RIFF
WebP est un conteneur RIFF : VP8 , VP8L ou VP8X contiennent l'image ; EXIF, XMP , ICCP et C2PA sont chacun un bloc. Les métadonnées étendues nécessitent l'en-tête VP8X.
Lecture du tableau « Structure du fichier » d'AuditImage
- Segment : le nom du type. Les segments portant des métadonnées sont en gras avec la couleur d'accent.
- Décalage : position en octets dans le fichier, en hexadécimal.
- Taille : le segment entier y compris les octets de marqueur et de longueur.
- Part : une barre relative au fichier entier.
Choses utiles à noter : les segments de métadonnées se trouvent normalement avant les données de l'image ; les segments répétés du même type méritent un coup d'œil ; une image de quelques dizaines de Ko portant un APP11 de 200 Ko signifie que le manifeste embarque une miniature ; un segment COM avec du contenu mérite d'être développé.
Vérification manuelle
exiftool -v3 photo.jpg # segment par segment
exiftool -htmlDump photo.jpg > dump.html