Guías

Segmentos JPEG y bloques PNG: dónde viven los metadatos en un archivo

Cómo leer cada fila de la tabla "Estructura del archivo" de AuditImage. Qué contienen APP1, APP11, COM, tEXt y caBX, y qué indican el desplazamiento y el tamaño.

JPEG: segmentos de marcadores

Un JPEG es una serie de segmentos, cada uno comenzando con FF xx. Todo antes de los datos de imagen son metadatos o parámetros de decodificación:

Marcador Nombre Contenido
FF D8 SOI inicio de imagen
FF E0 APP0 cabecera JFIF, unidad de resolución, miniatura
FF E1 APP1 EXIF (comienza con Exif\0\0) o XMP (comienza con http://ns.adobe.com/xap/1.0/)
FF E2 APP2 perfil ICC, MPF multi-imagen (fotos de profundidad de teléfono)
FF EB APP11 manifiesto C2PA (comienza con JP, contiene un cuadro jumb)
FF ED APP13 Photoshop IRB, que contiene IPTC
FF EE APP14 indicador de transformación de color Adobe
FF FE COM comentario, texto arbitrario
FF DB DQT tablas de cuantización
FF C4 DHT tablas Huffman
FF C0 SOF0 cabecera de trama: dimensiones, componentes
FF DA SOS inicio de escaneo, seguido de datos comprimidos hasta EOI
FF D9 EOI fin de imagen

Cada segmento contiene como máximo 64 KB. Las cargas más grandes se dividen en varios segmentos del mismo tipo: XMP grande usa "XMP extendido", los manifiestos C2PA grandes se dividen en varios segmentos APP11 y se reensamblan por número de secuencia. Dos filas consecutivas de APP11 C2PA en la tabla de AuditImage son exactamente eso.

PNG: bloques

Un PNG comienza con una firma de 8 bytes, luego una serie de bloques cada uno con una longitud, tipo, datos y CRC:

Tipo Contenido
IHDR dimensiones, profundidad de bits, tipo de color
iCCP perfil ICC
pHYs resolución física
eXIf EXIF (añadido al estándar en 2017)
tEXt / iTXt / zTXt texto clave/valor: XMP, parámetros SD y la etiqueta implícita AIGC viven aquí
caBX manifiesto C2PA
IDAT datos de imagen, posiblemente varios bloques
IEND fin

XMP en un PNG es un iTXt con la palabra clave XML:com.adobe.xmp. Los parámetros de Stable Diffusion son un tEXt con la palabra clave parameters.

WebP: bloques RIFF

WebP es un contenedor RIFF: VP8 , VP8L o VP8X contienen la imagen; EXIF, XMP , ICCP y C2PA son un bloque cada uno. Los metadatos extendidos requieren la cabecera VP8X.

Leer la tabla "Estructura del archivo" de AuditImage

  • Segmento: el nombre del tipo. Los segmentos que contienen metadatos están en negrita con el color de acento.
  • Desplazamiento: posición en byte del archivo, hexadecimal.
  • Tamaño: el segmento completo incluyendo los bytes de marcador y longitud.
  • Proporción: una barra relativa al archivo completo.

Cosas útiles a notar: los segmentos de metadatos normalmente vienen antes de los datos de imagen; los segmentos repetidos del mismo tipo merecen un vistazo; una imagen de unas pocas decenas de KB que lleva un APP11 de 200 KB significa que el manifiesto incrusta una miniatura; un segmento COM con contenido vale la pena expandir.

Verificación manual

exiftool -v3 photo.jpg           # segmento por segmento
exiftool -htmlDump photo.jpg > dump.html