Un RFC sur un
format d'image : il décrit le format WebP et
enregistre officiellement le type image/webp
.
Bon, des images au format
WebP, vous en avez forcément vu un peu partout sur le
Web. Mais le format n'était pas encore documenté par un
organisme de normalisation. C'est désormais
fait. WebP s'appuie sur le format RIFF. Plus
précisément, RIFF est un
cadre générique qui peut se décliner en divers formats. C'est
pour cela que les fichiers WebP commencent par les quatre codes
ASCII correspondant à "RIFF".
WebP permet de la compression
avec perte ou sans
perte, et, d'une manière générale, tout ce qu'on attend
d'un format graphique. C'est donc un concurrent de
JPEG, PNG (RFC 2083),
GIF…
L'encodage lors de la compression avec perte est celui de
VP8 (RFC 6386),
produisant des images plus petites que ses prédécesseurs, ce qui est
bon pour le réseau. La compression sans perte est faite en
LZ77 et Huffman. WebP permet également le stockage de
métadonnées codées en
EXIF ou
en XMP. Ah, et
WebP permet des animations.
Cette image, sur un sujet politique qui est toujours d'actualité,
est au format WebP :
La section 2 du RFC décrit le format en détail. Les trois
premiers champs sont la chaine "RIFF", la taille du fichier en
binaire et la chaine "WEBP", chacun sur quatre octets. Affichons ces
trois champs :
% dd if=how-do-you-like-it-wrapped.webp bs=4 count=3
RIFFXWEBP
3+0 records in
3+0 records out
12 bytes copied…
La section 3 décrit ensuite le stockage des pixels sans
perte.
Comme avec tout format, les logiciels qui lisent les fichiers
WebP (qu'on télécharge souvent depuis l'Internet, via des sources
pas forcément de confiance) doivent être prudents dans l'analyse des fichiers. Les fichiers
peuvent être invalides, par accident ou délibérément, et mener le
logiciel négligent à lire en dehors
d'un tableau ou déréférencer un
pointeur invalide. La paranoïa est
recommandée quand on lit ces fichiers. Plusieurs failles ont touché
la libwebp, l'implémentation de référence, dont la grave
CVE-2023-4863 en 2023 qui avait
fait, à juste titre, beaucoup
de bruit.
Toujours question sécurité, WebP n'a pas de contenu exécutable
(contrairement à, par exemple, TrueType). Mais les métadonnées EXIF ou
en XMP peuvent poser des problèmes de sécurité
et doivent donc être interprétées avec prudence.
Le type
image/webp
est désormais dans
le registre des types de médias (cf. le
formulaire rempli).
Si on regarde des fichiers WebP, on a ce genre d'informations :
% file resolution-dns.webp
resolution-dns.webp: RIFF (little-endian) data, Web/P image
% file --mime-type resolution-dns.webp
resolution-dns.webp: image/webp
Pour finir, produisons un peu d'images WebP pour voir. Si on
utilise Asymptote, c'est facile :
% asy -f webp -o resolution-dns.webp resolution-dns.asy
On peut aussi convertir depuis les formats existants, ici avec
ImageMagick :
% convert -verbose resolution-dns.png resolution-dns.webp
resolution-dns.png PNG 823x508 823x508+0+0 8-bit sRGB 31713B 0.020u 0:00.011
resolution-dns.png=>resolution-dns.webp PNG 823x508 823x508+0+0 8-bit sRGB 16580B 0.040u 0:00.047
Si on fait des graphiques depuis ses programmes en
Python avec
Matplotlib, il suffit,
depuis la version 3.6, de :
plot.savefig(fname="test.webp") # No need to indicate the format, it
# is taken from the file extension.
(Voir aussi
ce
beau résultat sur Wikimedia Commons.)