Comment ça fonctionne ?

Cette compression ne nous est en fait pas inconnue puisque ce n’est autre que le VP8 lui-même, utilisé dans le webM (format video récemment apporté par Google après rachat de la société On2) pour compresser les images-clés. Ce codec analyse la zone située autour d’un bloc de pixels et crée alors une “prédiction” de ce que seront les prochains blocs. Il n’est encodé ensuite que la différence entre cette prédiction et le résultat réel. Cette différence est d’ailleurs souvent constituée de valeurs nulles, qui sont ainsi compressables à nouveau. Enfin, ces différences sont ensuite transformées, quantifiées, et codées de façon entropique (par exemple avec le codage de Huffman) comme habituellement.
L’utilisation du VP8 signifie également que l’image répond aux mêmes caractéristiques : une taille maximale de 16383² pixels (16383 de largeur et de hauteur donc) et accepte les mêmes espaces colorimétriques. Mais c’est bien suffisant pour une image orientée web !

Comment créer et lire une image au format webP ?

Comme tout nouveau format, le problème qui se pose est bien sûr ici la lecture et la création de média selon ce format. Là où Google proposait patches pour ffmpeg et aide pour que le webM soit adopté, il est plus compliqué de diffuser ce format : non seulement les systèmes mais les navigateurs doivent le lire mais il faut également à l’avenir que les produits tels que Adobe Photoshop et Gimp, pour ne citer qu’eux, soient à même de supporter ce format également. Il suffit d’ailleurs le temps qu’il a fallu (et qu’il faut encore) pour diffuser et démocratiser l’utilisation du PNG ! Google a cependant proposé un patch à webkit permettant de lire le dit format, faisant ainsi de Chrome et Safari les premiers lecteurs de webP.

La solution actuelle pour créer un fichier webP est de télécharger et utiliser webpconv pour convertir vos images. Il n’est donc pas faisable de créer un fichier webp à partir d’une illustration ou autres sources “brutes” (dans le sens où aucun format ne définit encore cette image/illustration). Voyons cependant comment convertir, en ligne de commande, une image (ou une série d’images puisqu’on est en console, un simple *.jpg en entrée permet d’appliquer une conversion massive sur tous les fichiers .jpg):

webpconv -output_dir dir -format format -quality quality input_file(s)

  • Le premier paramètre, -output_dir est optionnel : si rien n’est défini, l’image sera créée dans le répertoire courant.
  • Le second, -format permet de spécifier le format voulu (BMP, JPEG, PNG, WEBP) ; en effet cet utilitaire ne se limite pas au webP.
  • Le troisième définit la qualité, allant de 0 à 100, 100 étant la meilleure qualité possible. Là encore, ce paramètre est optionnel. Dans le cas où vous choisissez de laisser la qualité par défaut, le logiciel se chargera de calculer un PSNR (mesure de qualité de compression) de 42 (étonnant n’est-ce pas?) ce qui est acceptable, si on sait qu’une image de qualité a en général un PSNR situé entre 30 et 40dB (source: wikipedia) .
  • Et enfin le ou les fichiers que vous souhaitez convertir.

Cependant, vous ne pourrez pas directement vérifier et apprécier le produit de votre travail puisqu’aucun lecteur n’est encore disponible. La solution qui s’offre à vous est alors de convertir ce fichier en PNG puisque ceci n’applique aucun compression avec perte. D’où la possibilité dans webpconv de convertir dans d’autres formats que le webP ;) .

Toujours sceptique ?

Pour les plus sceptiques d’entre nous, un comparatif a été mis en place à l’adresse suivante : http://code.google.com/intl/fr/spee… et une galerie (confrontant donc jpeg et webP convertis en PNG) à cette adresse : http://code.google.com/intl/fr/spee…. Par souci de qualité les définitions des images d’examples sont malheureusement très petites. Il est alors possible de télécharger les exemples dans une meilleure définition. J’essaierai prochainement de vous fournir ici-même des examples de bonne définition.

Je suis cependant étonné de constater que :

  • certaines images (la première) semble plus large en PNG qu’en JPG (semble uniquement : allez de l’une à l’autre vous comprendrez, mais leur taille en pixels sont identiques)
  • d’autres semblent moins précises : la lumière rouge de la dernière image est moins vive sur le PNG que sur le jpg
  • enfin, les résolutions diffèrent: 200dpi pour les JPG et 96 pour les PNG. Bien sûr, 72 dpi nous suffiront, mais est-ce que les tests comparatifs entre le webP et les autres compressions ont bien tenu compte de ces éléments ?

Il est en tout cas surprenant et intéressant de voir survenir une nouvelle possibilité de compression d’images, pour le web, qui permettra par la suite de réduire la consommation de bande-passante et le temps de (télé)chargement d’une page/application web!