PicScrub logoPicScrub
Retour aux formats

Format WebP

Le format d’image moderne de Google

Le conteneur RIFF

Google n’a pas inventé de nouveau conteneur pour WebP. Le choix s’est porté sur RIFF, le format qui transporte l’audio WAV et la vidéo AVI depuis le début des années 1990. Si vous avez déjà analysé un fichier WAV, vous savez déjà comment WebP fonctionne au niveau du conteneur.

Le format s’appuie sur des blocs imbriqués identifiés par quatre caractères (les codes FourCC). Une conception simple et robuste, qui a traversé les années sans prendre une ride.

Structure d’un fichier WebP (conteneur RIFF)

RIFF
Size
WEBP
VP8X
EXIF/XMP
VP8/VP8L
RIFF
4 octets
Signature du conteneur
Size
4 octets
Taille du fichier - 8
WEBP
4 octets
Identifiant de format
VP8X
18 octets
Indicateurs de fonctions étendues
EXIF/XMP
100 octets
Blocs de métadonnées
VP8/VP8L
Longueur variable
Données d’image

En-tête WebP

Signature RIFF
Taille du fichier - 8
Identifiant WEBP
Type de bloc VP8X
Taille VP8X (10)
Indicateurs VP8X
Taille du canevas
OffsetHexASCII
0000
52494646241A00005745425056503858
RIFF$...WEBPVP8X
0010
0A00000010000000FF0000FF00000000
..............

Structure d’un bloc RIFF

FourCCTailleDonnées
4 octets4 octets (LE)Variable

À noter : les données d’un bloc sont complétées par un octet nul pour atteindre une longueur paire, si nécessaire.

Offsets importants

  • • Début des sous-blocs : 12 octets (après RIFF + taille + WEBP)
  • • En-tête de bloc : 8 octets (FourCC de 4 octets + taille de 4 octets)
  • • Position du champ de taille : +4 depuis le début du bloc (little-endian)

Blocs d’image

WebP, c’est en réalité trois formats en un : avec perte (VP8), sans perte (VP8L) et étendu (VP8X). Le type de bloc indique la méthode de compression employée.

VP8 : compression avec perte

Utilise le codec vidéo VP8 pour la compression. Rapport qualité/taille comparable à celui du JPEG. Les fichiers WebP simples ne contiennent que ce bloc.

VP8L : compression sans perte

Compression sans perte avec prédiction, transformation colorimétrique et codage entropique. En général 25 à 34 % plus léger que le PNG.

VP8X : format étendu

Signale la présence de fonctions optionnelles : animation, canal alpha, profil ICC, EXIF ou XMP. Obligatoire dès que l’une d’elles est présente.

ALPH : canal alpha

Données du canal alpha, stockées à part. Elles peuvent être compressées avec ou sans perte, indépendamment des données de couleur.

ANIM/ANMF : animation

ANIM contient les paramètres globaux de l’animation. Les blocs ANMF contiennent chaque image de l’animation, avec ses informations de cadence.

Blocs de métadonnées

Contrairement aux fichiers WebP simples, qui ne contiennent que des données d’image, les fichiers WebP étendus peuvent transporter des métadonnées. Bonne nouvelle : ces blocs sont nettement séparés des données d’image, ce qui les rend faciles à repérer et à supprimer.

EXIF : métadonnées EXIF

Contient des données EXIF dans le même format que le JPEG (structure TIFF brute) : infos de l’appareil, coordonnées GPS, horodatages et miniatures. Principal risque pour la vie privée.

XMP : métadonnées XMP

Métadonnées en XML. Elles peuvent dupliquer les données EXIF et y ajouter l’historique de retouche, des infos sur le logiciel et des champs personnalisés.

ICCP : profil colorimétrique ICC

Profil colorimétrique ICC pour la gestion des couleurs. PicScrub le conserve par défaut afin de préserver la fidélité des couleurs.

Les indicateurs VP8X

Le bloc VP8X joue le rôle de sommaire : il indique aux décodeurs ce qu’ils vont trouver dans le fichier. Quand nous supprimons des blocs de métadonnées, nous devons aussi mettre ces indicateurs à jour, sans quoi le décodeur cherchera des données qui n’existent plus.

Bits d’indicateur

Bit 0Réservé (doit valoir 0)
Bit 1Indicateur d’animation
Bit 2Métadonnées XMP présentes
Bit 3Métadonnées EXIF présentes
Bit 4Canal alpha présent
Bit 5Profil ICC présent

Pourquoi ces indicateurs comptent

Lorsque PicScrub supprime les blocs EXIF/XMP, il doit aussi mettre à jour les indicateurs VP8X pour refléter leur absence. Sinon, les décodeurs risquent d’attendre des données qui ne sont plus là.

Comment PicScrub traite le WebP

1

Valider l’en-tête RIFF

Contrôler la signature RIFF....WEBP

2

Analyser les blocs

Parcourir tous les blocs RIFF en lisant le FourCC et la taille

3

Supprimer les blocs de métadonnées

Ignorer les blocs EXIF et XMP au moment d’écrire le résultat

4

Mettre à jour les indicateurs VP8X

Effacer les bits EXIF/XMP dans le bloc VP8X

5

Recalculer la taille du fichier

Mettre à jour l’en-tête RIFF avec la nouvelle taille totale

Conservé

  • • Données d’image VP8/VP8L
  • • Canal alpha ALPH
  • • Données d’animation ANIM/ANMF
  • • Profil colorimétrique ICCP (optionnel)

Supprimé

  • • Métadonnées EXIF
  • • Métadonnées XMP

WebP simple ou étendu

Si un fichier WebP ne contient pas de bloc VP8X, c’est un WebP « simple » : rien de plus que l’enveloppe RIFF autour d’un unique bloc VP8 ou VP8L. Aucune métadonnée n’y est possible : si vous tenez à votre vie privée, ce sont les fichiers idéaux.

WebP simple

Ne contient qu’un bloc VP8 ou VP8L. Aucune métadonnée possible.

RIFF + WEBP + VP8/VP8L

WebP étendu

Contient un bloc VP8X, qui autorise métadonnées, canal alpha et animation.

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