Suite à une conversation avec Ashmex sur Twitter et à la lecture d’un article sur Wikipedia, voici un script sous Linux pour réduire encore plus la taille des PNG avant publication.
Pré-requis
Ce script reprend l’idée développé sur Wikipedia. Il fait appel aux outils suivants :
- OptiPNG → sudo apt-get install optipng,
- AdvanceCOMP → sudo apt-get install advancecomp,
- PNGOut → récupérez la version statique de PNGOut pour Linux dans les portages de JonoF’s, copiez l’exécutable dans votre répertoire bin (ex. : cp pngout-linux-pentium4-static ~/bin/pngout) et donnez-lui les bon droits (chmod 700 ~/bin/pngout),
- DeflOpt → installez tout d’abord Wine (sudo apt-get install wine), .
OptiPNG
Pour installer OptiPNG, il suffit de faire :
sudo apt-get install optipng
AdvanceCOMP
Pour installer AdvanceCOMP (et notamment advdef), il suffit de faire :
sudo apt-get install advancecomp
PNGOut
PNGOut n’est pas disponible par apt-get mais il existe un portage pour Linux. Pour l’installer, il faut :
- récupérer la version statique de PNGOut pour Linux dans les portages de JonoF’s,
- copier l’exécutable (par exemple pngout-linux-pentium4-static) dans votre répertoire bin : cp pngout-linux-pentium4-static ~/bin/pngout,
- donner les bons droits : chmod 700 ~/bin/pngout.
Note : le script s’attend à trouver l’exécutable “pngout”.
DeflOpt
DeflOpt n’est, lui non plus, pas disponible par apt-get. De plus, il n’existe pas de portage Linux de l’outil. Pas de panique puisque Wine permet de le faire tourner sans problème :
- installer Wine par sudo apt-get install wine,
- récupérer l’archive contenant l’exécutable dans la partie téléchargements du site de Ben Jos Walbeehm,
- copier l’exécutable DeflOpt.exe dans votre répertoire bin : cp DeflOpt.exe ~/bin/deflopt,
- donner les bons droits : chmod 700 ~/bin/deflopt.
Notes :
- le script s’attend à trouver l’exécutable “deflopt”,
- vous aurez peut-être besoin des paquet p7zip et p7zip-full pour lire l’archive contenant l’exécutable (sudo apt-get install p7zip p7zip-full)
Le script minpng
Voici le script minpng :
#!/bin/bash for fichier in $* do printf "%-32.32s %8d → " $(basename $fichier) $(du -b "$fichier" | cut -f1) (which optipng && optipng -o7 "$fichier") > /dev/null (which advdef && advdef -z4 "$fichier") > /dev/null (which pngout && pngout -ks "$fichier") > /dev/null (which deflopt && deflopt "$fichier") > /dev/null printf "%8d\\n" $(du -b "$fichier" | cut -f1) done
Installation du script
Pour installer ce script, il suffit de :
- créer un fichier minpng dans ~/bin,
- copier le script ci-dessous dedans,
- donner les bons droits (chmod 700 ~/bin/minpng).
Utilisation du script
Le script s’utilise en ligne de commande de la façon suivante :
minpng *.png
Les versions originales des fichiers PNG sont remplacées par leurs versions réduites.
L’absence d’un utilitaire sera totalement ignorée, aucun message d’erreur ne sera affiché.
Le but étant d’obtenir le PNG le plus léger possible, minpng peut passer beaucoup de temps sur chaque fichier.


Hello Zigazou !
Très intéressant ce script, le gain est notable sans perte de qualité. Mais c’est long l’optimisation !
. La durée du script décourage un petit peu de son utilisation.
Mais je vais continuer à me pencher dessus. A bientôt.
Oui, c’était le but de ce script
Ça, par contre, c’était pas recherché
En fait, ce script est intéressant quand tu travailles sur le thème d’un site web et que tu cherches à optimiser la tailles des différentes images intervenant. C’est vrai qu’il l’est moins pour une utilisation courante. Si je me souviens bien, il n’y a qu’une seule étape d’optimisation qui prennent réellement du temps (je ne sais plus laquelle par contre). Tu peux essayer de la repérer et voir si en la retirant le script remplit toujours son office pour toi.
Pour d’autres optimisations sur le PNG, manuelles cette fois, j’ai ceci http://zigazou.wordpress.com/2009/05/12/quand-le-png-est-plus-fort-que-le-jpeg/
@+