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