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)
Intestazione WebP
| Offset | Hex | ASCII | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 52494646241A00005745425056503858 | RIFF$...WEBPVP8X | |||||||||||||||
| 0010 | 0A00000010000000FF0000FF00000000 | .............. | |||||||||||||||
Struttura di un chunk RIFF
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
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
Controllare l'intestazione RIFF
Verificare la firma RIFF....WEBP
Analizzare i chunk
Scorrere tutti i chunk RIFF leggendone FourCC e dimensione
Rimuovere i chunk di metadati
Saltare i chunk EXIF e XMP quando si scrive il risultato
Aggiornare i flag di VP8X
Azzerare i bit dei flag EXIF/XMP nel chunk VP8X
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.
WebP esteso
Ha un chunk VP8X che abilita metadati, alfa e animazione.