Guides

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