• [^] # Re: Support du webp

    Posté par (site web personnel) . En réponse au journal Python pour la rentrée 2019 - Hors Série - Python revient dans la course face à Node.js. Évalué à 6. Dernière modification le 05 octobre 2019 à 23:03.

    Je partage dans ce commentaire mes trouvailles pour réduire davantage les images PNG. 🤩

    J’ai testé les outils pngcrush, pngnq, pngquant et Trimage. Ce dernier outil, Trimage, est une application graphique qui se base sur les outils pngcrush, optipng, et advpng.

    Installation

    sudo apt install pngcrush pngnq pngquant trimage

    Présentation à partir des Manpages

    • pngcrush is an optimizer for PNG (Portable Network Graphics) files. Its main purpose is to reduce the size of the file's IDAT chunk (or stream). pngcrush can also be used to modify a PNG's ancillary chunks (example : transparency information or textual comments). Some familiarity with the PNG (pronounced "ping") format may be helpful to users of pngcrush. pngcrush has reasonable defaults so running with no options may produce smaller files.
    • pngnq quantizes a 32-bit RGBA PNG image to an 8 bit RGBA palette PNG using the neuquant algorithm. The output file name is the input file name extended with -nq8.png or a specified extension.
    • pngquant converts 32-bit RGBA PNGs to 8-bit (or smaller) RGBA-palette PNGs, optionally using Floyd-Steinberg dithering. The output filename is the same as the input name except that it ends in -fs8.png or -or8.png.
    • trimage is a front-end to compress png and jpeg images via optipng, advpng, pngcrush and jpegoptim.

    Recompression PNG

    cd chemin/avec/des/images
    for f in *.png ; do pngcrush --brute $f ${f}crush.png ; done
    for f in *.png ; do pngnq -s 1 $f ; done
    for f in *.png ; do pngquant --speed 1 --ext -pngquant.png $f ; done

    Je n’avais pas vu que Trimage pouvait être utilisé à la ligne de commande : je l’ai utilisé via l’interface graphique.

    Résultats pour une image RGBA

    Taille Opération
    186467 Image RGBA 32 bits de type logo enregistrée avec GIMP
    145386 Juste pngcrush
    138587 Juste Trimage
    52348 Juste pngquant
    52118 Juste pngnq
    50066 Double combinaison pngnq + pngquant
    47784 Double combinaison pngquant + Trimage
    46383 Double combinaison pngnq + Trimage
    45654 Triple combinaison pngnq + pngquant + Trimage

    Notons que Trimage intègre la compression fournie par pngcrush.

    En utilisant un seul outil, c’est pngnq qui s’en est sorti le mieux (avec mon image), suivi de près par pngquant, ces deux outils réalisant des opérations similaires.

    J’ai été surpris que la combinaison de tous ces outils puissent obtenir une encore meilleure compression ! D'ailleur l'auteur de pngnq donne l'exemple suivant :

    pngnq -n 256 image.png && pngcrush image-nq8.png smallimage.png

    Résultats pour une image avec des couleurs indexées

    Taille Opération
    55227 La même image avec 32 couleurs indexées (sans transparence), enregistrée en GIF avec GIMP
    31158 La même image avec 32 couleurs indexées (sans transparence), enregistrée en PNG avec GIMP
    30367 Juste pngquant
    26951 Juste Trimage
    26701 Combinaison pngquant et Trimage

    Dans ce second test, l’outil pngnq augmentait la taille. :-/

    Notons au passage, que le format GIF semble dépassé pour ce type d’image !

    Bilan

    Avec ces différentes astuces, nous passons d’une image PNG initiale de 182 Kio (RGBA) à 26 Kio, soit 14 % de l’original, sans aucune différence à mes yeux !

    Et le WebP sans pertes ?

    • Installation
      sudo apt install webp
    • Conversion PNG -> WebP
      for f in */*.png ; do cwebp -preset icon -lossless -z 9 -m 6 $f -o $f.webp ; done
    PNG WebP Image
    186467 76048 Image RGBA initiale (GIMP)
    52348 40918 Juste pngquant
    52118 38358 Juste pngnq
    31158 21340 Image 32 couleurs indexées (GIMP)
    31857 21338 Juste pngnq sur l’image 32 couleurs indexées

    Incroyable, l’outil cwebp compresse encore mieux quand le PNG a été optimisé. Et, bien que pngnq augmente la taille du PNG avec couleurs indexées, le WebP final est encore un tout petit peu meilleur !

    Dans tous les cas, l’écart s’amenuise entre un PNG très optimisé et un WebP sans pertes. Le WebP, parvient tout de même à compresser un tiers.

    Conclusion

    Pour mes prochaines dépêches sur LinuxFr.org, je vais combiner différents outils pour obtenir des fichiers PNG avec le meilleur ratio qualité/taille. Et puis, plus tard, quand quasiment tout le lectorat de LinuxFr.org pourra profiter des images au format WebP, je passerai au WebP, mais en recompressant préalablement mes fichiers avec pngnq.

    Commentaire sous licence Creative Commons Zero CC0 1.0 Universal (Public Domain Dedication)