PicScrub logoPicScrub
Volver a los formatos

Formato WebP

El formato de imagen moderno de Google

El contenedor RIFF

Google no se inventó un contenedor nuevo para WebP. Optó por RIFF, el mismo formato que lleva transportando audio WAV y vídeo AVI desde principios de los 90. Si alguna vez has analizado un archivo WAV, ya sabes cómo funciona WebP a nivel de contenedor.

El formato usa chunks anidados con identificadores de cuatro caracteres (los códigos FourCC). Es un diseño sencillo y robusto que ha aguantado bien el paso del tiempo.

Estructura de un archivo WebP (contenedor RIFF)

RIFF
Size
WEBP
VP8X
EXIF/XMP
VP8/VP8L
RIFF
4 bytes
Firma del contenedor
Size
4 bytes
Tamaño del archivo - 8
WEBP
4 bytes
Identificador del formato
VP8X
18 bytes
Indicadores de funciones ampliadas
EXIF/XMP
100 bytes
Chunks de metadatos
VP8/VP8L
Longitud variable
Datos de la imagen

Cabecera WebP

Firma RIFF
Tamaño del archivo - 8
Identificador WEBP
Tipo de chunk VP8X
Tamaño de VP8X (10)
Indicadores VP8X
Tamaño del lienzo
OffsetHexASCII
0000
52494646241A00005745425056503858
RIFF$...WEBPVP8X
0010
0A00000010000000FF0000FF00000000
..............

Estructura de un chunk RIFF

FourCCTamañoDatos
4 bytes4 bytes (LE)Variable

Nota: los datos del chunk se rellenan hasta una longitud par con un byte nulo cuando hace falta.

Offsets clave

  • • Inicio de los sub-chunks: 12 bytes (tras RIFF + tamaño + WEBP)
  • • Cabecera del chunk: 8 bytes (FourCC de 4 bytes + tamaño de 4 bytes)
  • • Posición del campo de tamaño: +4 desde el inicio del chunk (little-endian)

Chunks de imagen

WebP son en realidad tres formatos en uno: con pérdida (VP8), sin pérdida (VP8L) y extendido (VP8X). El tipo de chunk indica qué método de compresión se ha usado.

VP8:Compresión con pérdida

Usa el códec de vídeo VP8 para comprimir. Relación calidad/tamaño parecida a la de JPEG. Los archivos WebP simples solo contienen este chunk.

VP8L:Compresión sin pérdida

Compresión sin pérdida con predicción, transformación de color y codificación entrópica. Suele ocupar entre un 25 % y un 34 % menos que PNG.

VP8X:Formato extendido

Indica que el archivo usa funciones opcionales: animación, canal alfa, perfil ICC, EXIF o XMP. Es obligatorio cuando existe alguna de ellas.

ALPH:Canal alfa

Datos del canal alfa por separado. Se pueden comprimir con o sin pérdida, de forma independiente de los datos de color.

ANIM/ANMF:Animación

ANIM contiene los parámetros globales de la animación. Los chunks ANMF contienen cada fotograma con su información de tiempo.

Chunks de metadatos

A diferencia de los archivos WebP simples, que solo contienen los datos de la imagen, los WebP extendidos pueden llevar metadatos. La buena noticia es que esos chunks están claramente separados de los datos de la imagen, así que son fáciles de identificar y de eliminar.

EXIF:Metadatos EXIF

Contiene datos EXIF en el mismo formato que JPEG (estructura TIFF en bruto). Incluye la información de la cámara, las coordenadas GPS, la fecha y hora, y las miniaturas. El principal problema de privacidad.

XMP:Metadatos XMP

Metadatos basados en XML. Pueden duplicar los datos EXIF y añadir el historial de edición, información del software y campos personalizados.

ICCP:Perfil de color ICC

Perfil de color ICC para la gestión del color. PicScrub lo conserva por defecto para mantener la fidelidad del color.

Los indicadores de VP8X

El chunk VP8X funciona como un índice: le dice al descodificador qué puede esperar del archivo. Cuando eliminamos chunks de metadatos, también tenemos que actualizar estos indicadores; si no, el descodificador buscará datos que ya no están ahí.

Bits de los indicadores

Bit 0Reservado (debe ser 0)
Bit 1Indicador de animación
Bit 2Hay metadatos XMP
Bit 3Hay metadatos EXIF
Bit 4Hay canal alfa
Bit 5Hay perfil ICC

Por qué importan los indicadores

Cuando PicScrub elimina los chunks EXIF/XMP, también tiene que actualizar los indicadores VP8X para reflejar que ya no están. Si no, los descodificadores pueden esperar datos que no existen.

Cómo procesa PicScrub los WebP

1

Validar la cabecera RIFF

Comprobar la firma RIFF....WEBP

2

Analizar los chunks

Recorrer todos los chunks RIFF leyendo su FourCC y su tamaño

3

Eliminar los chunks de metadatos

Saltar los chunks EXIF y XMP al escribir el resultado

4

Actualizar los indicadores VP8X

Poner a cero los bits de EXIF/XMP del chunk VP8X

5

Recalcular el tamaño del archivo

Actualizar la cabecera RIFF con el nuevo tamaño total

Se conserva

  • • Datos de imagen VP8/VP8L
  • • Canal alfa ALPH
  • • Datos de animación ANIM/ANMF
  • • Perfil de color ICCP (opcional)

Se elimina

  • • Metadatos EXIF
  • • Metadatos XMP

WebP simple frente a WebP extendido

Si un archivo WebP no tiene chunk VP8X, es un WebP "simple": solo la envoltura RIFF alrededor de un único chunk VP8 o VP8L. En un WebP simple no caben metadatos, así que, si te preocupa la privacidad, son la opción ideal.

WebP simple

Solo contiene un chunk VP8 o VP8L. No admite metadatos.

RIFF + WEBP + VP8/VP8L

WebP extendido

Tiene un chunk VP8X que habilita metadatos, canal alfa y animación.

RIFF + WEBP + VP8X + [ICCP] + [ANIM] + [EXIF] + [XMP] + VP8/VP8L