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 ;donefor f in *.png ;do pngnq -s 1$f;donefor 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 :
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)
[^] # Re: Support du webp
Posté par Oliver (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,pngquantet Trimage. Ce dernier outil, Trimage, est une application graphique qui se base sur les outilspngcrush,optipng, etadvpng.Installation
Présentation à partir des Manpages
pngcrushis an optimizer for PNG (Portable Network Graphics) files. Its main purpose is to reduce the size of the file's IDAT chunk (or stream).pngcrushcan 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.pngcrushhas reasonable defaults so running with no options may produce smaller files.pngnqquantizes 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.pngor a specified extension.pngquantconverts 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.pngor-or8.png.trimageis a front-end to compress png and jpeg images via optipng, advpng, pngcrush and jpegoptim.Recompression PNG
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
pngcrushpngquantpngnqpngnq+pngquantpngquant+ Trimagepngnq+ Trimagepngnq+pngquant+ TrimageNotons que Trimage intègre la compression fournie par
pngcrush.En utilisant un seul outil, c’est
pngnqqui s’en est sorti le mieux (avec mon image), suivi de près parpngquant, 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
pngnqdonne l'exemple suivant :pngnq -n 256 image.png && pngcrush image-nq8.png smallimage.pngRésultats pour une image avec des couleurs indexées
pngquantpngquantet TrimageDans ce second test, l’outil
pngnqaugmentait 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 ?
sudo apt install webpfor f in */*.png ; do cwebp -preset icon -lossless -z 9 -m 6 $f -o $f.webp ; donepngquantpngnqpngnqsur l’image 32 couleurs indexéesIncroyable, l’outil
cwebpcompresse encore mieux quand le PNG a été optimisé. Et, bien quepngnqaugmente 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)