PicScrub logoPicScrub
Torna ai formati

Formato WebP

Il formato di immagine moderno di Google

Il contenitore RIFF

Per WebP, Google non ha inventato un contenitore nuovo. Ha scelto RIFF, lo stesso formato che porta in giro audio WAV e video AVI dai primi anni Novanta. Se hai già analizzato un file WAV, sai già come funziona WebP a livello di contenitore.

Il formato usa chunk annidati con identificatori di 4 caratteri (i codici FourCC). È un disegno semplice e robusto, che ha retto alla prova del tempo.

Struttura di un file WebP (contenitore RIFF)

RIFF
Size
WEBP
VP8X
EXIF/XMP
VP8/VP8L
RIFF
4 byte
Firma del contenitore
Size
4 byte
Dimensione del file - 8
WEBP
4 byte
Identificatore del formato
VP8X
18 byte
Flag delle funzioni estese
EXIF/XMP
100 byte
Chunk di metadati
VP8/VP8L
Lunghezza variabile
Dati dell'immagine

Intestazione WebP

Firma RIFF
Dimensione del file - 8
Identificatore WEBP
Tipo di chunk VP8X
Dimensione di VP8X (10)
Flag VP8X
Dimensioni della tela
OffsetHexASCII
0000
52494646241A00005745425056503858
RIFF$...WEBPVP8X
0010
0A00000010000000FF0000FF00000000
..............

Struttura di un chunk RIFF

FourCCSizeData
4 byte4 byte (LE)Variabile

Nota: se serve, i dati del chunk vengono portati a una lunghezza pari con un byte nullo.

Offset da ricordare

  • • Inizio dei sotto-chunk: 12 byte (dopo RIFF + size + WEBP)
  • • Intestazione del chunk: 8 byte (4 byte di FourCC + 4 byte di size)
  • • Offset del campo size: +4 dall'inizio del chunk (little-endian)

I chunk dell'immagine

WebP in realtà è tre formati in uno: con perdita (VP8), senza perdita (VP8L) ed esteso (VP8X). È il tipo di chunk a dirti quale metodo di compressione è stato usato.

VP8:compressione con perdita

Usa il codec video VP8 per comprimere. Rapporto qualità/peso simile a quello del JPEG. I file WebP semplici contengono solo questo chunk.

VP8L:compressione senza perdita

Compressione lossless con predizione, trasformazione del colore e codifica entropica. In genere pesa dal 25 al 34% in meno di un PNG.

VP8X:formato esteso

Segnala la presenza di funzioni opzionali: animazione, canale alfa, profilo ICC, EXIF o XMP. È obbligatorio quando una di queste funzioni è presente.

ALPH:canale alfa

Dati del canale alfa separati. Possono essere compressi con o senza perdita, indipendentemente dai dati di colore.

ANIM/ANMF:animazione

ANIM contiene i parametri globali dell'animazione. I chunk ANMF contengono i singoli fotogrammi con le informazioni sui tempi.

I chunk di metadati

A differenza dei file WebP semplici, che contengono solo i dati dell'immagine, i file WebP estesi possono portarsi dietro dei metadati. La buona notizia è che questi chunk sono nettamente separati dai dati dell'immagine, quindi sono facili da individuare e rimuovere.

EXIF:metadati EXIF

Contiene dati EXIF nello stesso formato del JPEG (struttura TIFF grezza). Comprende i dati della fotocamera, le coordinate GPS, la data e l'ora e le miniature. Il principale problema di privacy.

XMP:metadati XMP

Metadati basati su XML. Possono duplicare i dati EXIF e aggiungere cronologia delle modifiche, dati del software e campi personalizzati.

ICCP:profilo colore ICC

Profilo colore ICC per la gestione del colore. PicScrub lo mantiene di default per non alterare i colori.

I flag di VP8X

Il chunk VP8X funziona come un indice: dice ai decoder che cosa aspettarsi nel file. Quando rimuoviamo i chunk di metadati dobbiamo aggiornare anche questi flag, altrimenti il decoder andrà a cercare dati che non ci sono più.

I bit dei flag

Bit 0Riservato (deve essere 0)
Bit 1Flag di animazione
Bit 2Metadati XMP presenti
Bit 3Metadati EXIF presenti
Bit 4Canale alfa presente
Bit 5Profilo ICC presente

Perché i flag contano

Quando PicScrub rimuove i chunk EXIF/XMP deve aggiornare anche i flag di VP8X per riflettere la loro assenza. Altrimenti i decoder potrebbero aspettarsi dati che non ci sono.

Come PicScrub elabora i WebP

1

Controllare l'intestazione RIFF

Verificare la firma RIFF....WEBP

2

Analizzare i chunk

Scorrere tutti i chunk RIFF leggendone FourCC e dimensione

3

Rimuovere i chunk di metadati

Saltare i chunk EXIF e XMP quando si scrive il risultato

4

Aggiornare i flag di VP8X

Azzerare i bit dei flag EXIF/XMP nel chunk VP8X

5

Ricalcolare la dimensione del file

Aggiornare l'intestazione RIFF con la nuova dimensione totale

Mantenuti

  • • Dati dell'immagine VP8/VP8L
  • • Canale alfa ALPH
  • • Dati di animazione ANIM/ANMF
  • • Profilo colore ICCP (opzionale)

Rimossi

  • • Metadati EXIF
  • • Metadati XMP

WebP semplice contro WebP esteso

Se un file WebP non ha un chunk VP8X, è un WebP "semplice": solo l'involucro RIFF attorno a un unico chunk VP8 o VP8L. Nei file WebP semplici i metadati non possono proprio esistere, quindi se ci tieni alla privacy sono la scelta ideale.

WebP semplice

Contiene solo un chunk VP8 o VP8L. Nessun metadato possibile.

RIFF + WEBP + VP8/VP8L

WebP esteso

Ha un chunk VP8X che abilita metadati, alfa e animazione.

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