PicScrub logoPicScrub
Volver a los formatos

JPEG

el que más filtra

Un archivo JPEG guarda sus metadatos en segmentos APPn, entre la cabecera del archivo y los datos de imagen. Esto es lo que vive en cada parte y qué hace PicScrub con ella.

perfil de color, se conserva si quieres
SOIinicio
APP0JFIF
APP1EXIF
APP1XMP
APP2ICC
APP13IPTC
COMcomentario
SOS …tu foto de verdad, intacta
EOIfin
el GPS y la cámara se esconden aquí, eliminado
idéntico byte a byte

Qué se elimina

  • EXIF coordenadas GPS, marca y modelo de la cámara, fecha y hora, ajustes de exposición
  • XMP historial de edición, software utilizado, valoraciones
  • IPTC / Photoshop títulos, créditos, palabras clave
  • Comentarios y miniaturas incrustadas una copia diminuta del original que puede sobrevivir a tus recortes y ediciones

Qué puedes conservar

  • Datos de imagen siempre intactos, nunca se recodifican
  • Perfil de color ICC opcional, para que los colores no cambien
  • Orientación opcional, para que los retratos no se giren
  • Aviso de copyright opcional, para quien quiere crédito sin coordenadas

Visión general de la estructura

Si alguna vez has abierto un JPEG en un editor hexadecimal, habrás visto que está formado por segmentos separados por marcadores. Todos los marcadores empiezan por 0xFF, seguido de un byte que indica qué tipo de segmento es. Este diseño hace que los JPEG sean relativamente fáciles de analizar: basta con buscar bytes FF y comprobar qué viene después.

Lo interesante en cuanto a privacidad es que todos los metadatos (EXIF, GPS, fecha y hora) viven en esos segmentos, completamente separados de los datos reales de la imagen. Por eso podemos eliminar los metadatos sin tocar los píxeles ni recomprimir nada.

Estructura de un archivo JPEG

SOI
APP0-15
DQT
SOF
DHT
SOS + Data
EOI
SOI
2 bytes
Inicio de imagen (FF D8)
APP0-15
100 bytes
Marcadores de aplicación (metadatos)
DQT
130 bytes
Tablas de cuantificación
SOF
20 bytes
Inicio de fotograma
DHT
420 bytes
Tablas de Huffman
SOS + Data
Longitud variable
Datos del escaneo (la imagen)
EOI
2 bytes
Fin de imagen (FF D9)

Ejemplo de cabecera JPEG

SOI (inicio de imagen)
Marcador APP0
Longitud de APP0
Identificador JFIF
Datos JFIF
Marcador APP1
Longitud de APP1
Identificador Exif
OffsetHexASCII
0000
FFD8FFE000104A464946000101000048
......JFIF.....H
0010
00480000FFE112344578696600000000
.H.....4Exif..

Estructura de un marcador

  • FF xx:Marcador (xx indica el tipo)
  • LL LL:Longitud (2 bytes, big-endian, se incluye a sí misma)
  • Data...:Datos del segmento (longitud - 2 bytes)

Referencia completa de marcadores JPEG

MarcadorNombreDescripción
FF D8SOIInicio de imagen
FF D9EOIFin de imagen
FF C0SOF0Inicio de fotograma (DCT baseline)
FF C2SOF2Inicio de fotograma (DCT progresivo)
FF C4DHTDefinición de tabla de Huffman
FF DBDQTDefinición de tabla de cuantificación
FF DDDRIDefinición del intervalo de reinicio
FF DASOSInicio del escaneo (a continuación van los datos de la imagen)
FF FECOMComentario (metadatos)
FF E0APP0Marcador JFIF
FF E1APP1Marcador EXIF / XMP
FF E2APP2Perfil ICC / MPF
FF EDAPP13IPTC / Photoshop
FF EEAPP14Transformación de color de Adobe

Dorado = metadatos (se eliminan), sin resaltar = estructura que se conserva

JFIF frente a EXIF

Hay algo que confunde a mucha gente: los archivos JPEG suelen contener dos estándares de metadatos distintos al mismo tiempo. JFIF llegó primero y se ocupa de lo básico, como la resolución. Después, las cámaras empezaron a añadir datos EXIF con toda la información detallada de la toma. La mayoría de los JPEG modernos llevan los dos, y por eso verás marcadores APP0 y APP1 cerca del principio del archivo.

APP0:JFIF

JPEG File Interchange Format. Información básica de la imagen.

  • • Número de versión
  • • Densidad de píxeles (DPI)
  • • Relación de aspecto
  • • Miniatura opcional

APP1:EXIF

Exchangeable Image File Format. Metadatos de la cámara.

  • • Marca y modelo de la cámara
  • • Coordenadas GPS
  • • Marcas de tiempo
  • • Ajustes de exposición

Los marcadores APP en detalle

La especificación de JPEG reservó 16 marcadores de "aplicación" (de APP0 a APP15) para que cada fabricante los usara como quisiera. Con los años, distintas organizaciones se fueron apropiando de marcadores diferentes para sus formatos de metadatos. El resultado es un pequeño caos, pero al menos es un caos bien documentado.

Lo complicado es que un mismo marcador puede significar cosas distintas según su contenido. APP1, por ejemplo, puede contener datos EXIF o XMP, así que hay que mirar la cadena identificadora del interior para saber con cuál estás tratando.

APP0 (0xFFE0):JFIF

Identificador: JFIF\0. Contiene la versión, las unidades de densidad, la densidad X/Y y una miniatura incrustada opcional. Suele ser seguro conservarlo.

APP1 (0xFFE1):EXIF

Identificador: Exif\0\0. Contiene una estructura TIFF completa con entradas IFD para la información de la cámara, los datos GPS, la fecha y hora, las miniaturas y las maker notes. El principal problema de privacidad.

APP1 (0xFFE1):XMP

Identificador: http://ns.adobe.com/xap/1.0/\0. Estándar de metadatos basado en XML creado por Adobe. Puede contener el historial de edición, información del software y datos EXIF ampliados.

Espacios de nombres XMP
xmp: http://ns.adobe.com/xap/1.0/
xmpMM: http://ns.adobe.com/xap/1.0/mm/
dc: http://purl.org/dc/elements/1.1/
photoshop: http://ns.adobe.com/photoshop/1.0/
tiff: http://ns.adobe.com/tiff/1.0/
exif: http://ns.adobe.com/exif/1.0/

APP1 (0xFFE1):XMP extendido

Identificador: http://ns.adobe.com/xmp/extension/\0. Para datos XMP de más de 65 KB, repartidos entre varios segmentos APP1.

APP2 (0xFFE2):MPF

Identificador: MPF\0. Multi-Picture Format, para imágenes estereoscópicas y panorámicas.

APP2 (0xFFE2):Perfil ICC

Identificador: ICC_PROFILE\0. Datos de gestión del color. Puede repartirse entre varios marcadores APP2. Normalmente es seguro conservarlo.

APP13 (0xFFED):IPTC/Photoshop

Identificador: Photoshop 3.0\0. Contiene datos IPTC-IIM con pies de foto, palabras clave, copyright e información del creador. Puede incluir datos sobre el autor.

APP14 (0xFFEE):Adobe

Identificador: Adobe\0. Contiene los indicadores de transformación de color (RGB/CMYK). Es importante para que los colores se muestren correctamente.

La estructura de EXIF

Aquí es donde la cosa se pone interesante (y un poco rara). Los datos EXIF son en realidad un pequeño archivo TIFF incrustado dentro de tu JPEG. Sí, en serio. Tiene su propia cabecera, su propio orden de bytes y usa la estructura IFD (Image File Directory) de TIFF para guardar las etiquetas.

Lo primero que verás después del identificador "Exif" es una cabecera TIFF que indica si los datos son little-endian (Intel, "II") o big-endian (Motorola, "MM"). Equivocarse aquí significa que todos los números saldrán mal, así que es lo primero que comprueba cualquier analizador.

Cabecera TIFF (8 bytes)

Orden de bytes (II = little-endian)
Número mágico (42)
Offset de IFD0
OffsetHexASCII
0000
49492A0008000000
II*.....

II = Intel (little-endian), MM = Motorola (big-endian)

Estructura de una entrada IFD (12 bytes)

ID de etiquetaTipoRecuentoValor/offset
2 bytes2 bytes4 bytes4 bytes

Entradas IFD principales

0x010F:Make
0x0110:Model
0x0132:DateTime
0x8769:ExifIFDPointer
0x8825:GPSInfoIFDPointer
0x927C:MakerNote

Cómo procesa PicScrub los JPEG

El enfoque es bastante directo: recorremos el archivo marcador a marcador, conservamos los que son imprescindibles para mostrar la imagen y saltamos los que contienen metadatos. Como nunca tocamos los datos comprimidos de la imagen, no hay ninguna pérdida de calidad.

La clave está en que la estructura de marcadores de JPEG lo pone fácil. No necesitamos entender los coeficientes DCT ni las tablas de Huffman. Solo tenemos que identificar qué segmentos son metadatos y cuáles no.

1

Validar la cabecera

Comprobar el marcador SOI (FF D8) al principio del archivo

2

Analizar los marcadores

Leer cada marcador en orden y extraer su tipo y su longitud

3

Identificar los metadatos

Comprobar los identificadores de los segmentos APP (EXIF, XMP, IPTC, etc.)

4

Copia selectiva

Copiar al resultado los segmentos que no son metadatos y saltar los que sí lo son

Qué se conserva

  • • Marcadores SOI/EOI (obligatorios)
  • • DQT (tablas de cuantificación)
  • • SOF (cabecera del fotograma)
  • • DHT (tablas de Huffman)
  • • SOS y datos del escaneo (la imagen en sí)
  • • Opcional: perfil de color ICC (configurable)

Qué se elimina

  • • APP1 EXIF (cámara, GPS, fecha y hora)
  • • APP1 XMP (metadatos de edición)
  • • APP13 IPTC (pies de foto, autor)
  • • Marcadores COM (comentarios)
  • • Miniaturas EXIF

Referencia de etiquetas EXIF

No todas las etiquetas EXIF son iguales en cuanto a privacidad. Algunas, como los ajustes de exposición, son bastante inofensivas. Otras, como los números de serie o el nombre del propietario, pueden identificarte a ti o a tu equipo de forma inequívoca. Estas son las que consideramos de alto riesgo:

ID de etiquetaNombreRiesgo de privacidad
0x9003DateTimeOriginalAlto
0x9004DateTimeDigitizedAlto
0x9010OffsetTimeMedio
0x9286UserCommentAlto
0x927CMakerNoteAlto
0xA420ImageUniqueIDAlto
0xA430CameraOwnerNameAlto
0xA431BodySerialNumberAlto
0xA434LensModelMedio
0xA435LensSerialNumberAlto
0xFDE8OwnerNameAlto
0xFDE9SerialNumberAlto
Ver todas las etiquetas de ajustes de cámara (no identificativas)
0x829A ExposureTime
0x829D FNumber
0x8822 ExposureProgram
0x8827 ISOSpeedRatings
0x9201 ShutterSpeedValue
0x9202 ApertureValue
0x9203 BrightnessValue
0x9204 ExposureBiasValue
0x9207 MeteringMode
0x9208 LightSource
0x9209 Flash
0x920A FocalLength
0xA001 ColorSpace
0xA002 PixelXDimension
0xA003 PixelYDimension
0xA402 ExposureMode
0xA403 WhiteBalance
0xA405 FocalLengthIn35mmFilm
0xA406 SceneCaptureType

Referencia de etiquetas GPS

Los datos GPS viven en su propio sub-IFD, al que apunta la etiqueta 0x8825 del IFD principal. Si ese puntero existe, hay datos de ubicación en tu imagen. Los móviles actuales son especialmente insistentes con esto, y a menudo con precisión suficiente para señalar el punto exacto en el que estabas.

ID de etiquetaNombreDescripción
0x0000GPSVersionIDVersión de las etiquetas GPS
0x0001GPSLatitudeRefN o S
0x0002GPSLatitudeGrados, minutos y segundos
0x0003GPSLongitudeRefE o W
0x0004GPSLongitudeGrados, minutos y segundos
0x0005GPSAltitudeRefPor encima o por debajo del nivel del mar
0x0006GPSAltitudeMetros
0x0007GPSTimeStampHora UTC
0x001DGPSDateStampFecha UTC
0x0012GPSMapDatumDatum geodésico utilizado
0x001BGPSProcessingMethodGPS/CELLID/WLAN/MANUAL
0x001CGPSAreaInformationNombre del lugar

Referencia de etiquetas IPTC

IPTC se diseñó para que las agencias de noticias pudieran incrustar pies de foto, créditos e información de copyright. Se guarda dentro de APP13 con el identificador "Photoshop 3.0" (sí, Adobe lo adoptó). Si alguna vez has añadido información de copyright o palabras clave en Lightroom o Photoshop, es ahí donde acaban.

0x0250 By-line (autor)
0x0255 By-line Title (cargo del autor)
0x025A City (ciudad)
0x025C Sub-location (ubicación concreta)
0x025F Province/State (provincia o estado)
0x0265 Country Name (país)
0x0274 Copyright Notice (aviso de copyright)
0x0276 Contact (contacto)
0x0237 Date Created (fecha de creación)
0x023C Time Created (hora de creación)
0x0278 Caption/Abstract (pie de foto)
0x0219 Keywords (palabras clave)