
Ajourd’hui on va parler un peu de performance. Je ne sais pas si vous le savez, mais plus votre site sera léger (taille des images, taille du css, taille des js etc), plus il sera rapidement afficher chez votre client (logique ?!). Donc le client ou le visiteur sera content, et au passage google aussi (google aime quand ca va vite) et donc au final, c’est vous qui serez content ;).
J’ai donc fait un petit script bash qui s’exécute sous linux, en ligne de commande. Ce script sert a redimensionner les images de type png, en enlevant les meta-données qui sont inutiles sur le web (je ne parle pas de photos, mais bien d’images, comme les images du css, les boutons etc …). Je vous préviens tout de suite, ce script n’est pas parfait, il peut bien sur être améliorer. D’ailleurs j’accepte toutes les suggestions étant donnée que je ne suis vraiment pas un pro de la ligne de commande !
Pour exécuter ce script vous aurez besoin de 2 logiciel : optipng et pngcrush. On peut aussi a travers ce script convertir les jpeg en png mais les images sont plus lourdes qu’au départ … :S Pour cette conversion on aura besoin de imagemagick. Donc pour installer ces logiciels il suffit de faire :
sudo apt-get install optipng pngcrush imagemagick
Voila, maintenant il faut télécharger le script et le rendre exécutable :
wget http://blog.lyrixx.info/wp-content/uploads/2009/10/compresspng.sh.txt mv compresspng.sh.txt compresspng.sh chmod +x compresspng.sh
ce script prend deux arguments : le premier est le path du dossier ou sont toutes vos images. Le script scan le dossier en récurrence (dossiers et sous dossiers). Le deuxième arguments sert a définir le niveau de compression :
- 0 => ne fait rien, liste seulement les images png
- 1 => compresse avec optipng
- 2 => compresse avec pngcrush
- 3 => compresse avec optipng et pngcrush
- 4 => converti tous les jpeg en png (attention, la taille grossit tres vite)
Je vous préviens tout de suite que l’exécution du script peut etre exéssivement long, et demande un forte charge CPU.
Il ne reste plus qu’a executer le script :
./compresspng.sh /home/image/ 3
Le script :
#!/bin/bash
## Pineau Grégoire pour http://blog.lyrixx.info
## Utilisation :
## ./compresspng PATH LEVEL
## PATH est le dossier racine des images a compresser
## LEVEL est le niveau de compression :
## 0 => ne fait rien, liste seulement les images png
## 1 => compresse avec optipng
## 2 => compresse avec pngcrush
## 3 => compresse avec optipng et pngcrush
## 4 => converti tous les jpeg en png (attention, la taille grossit tres vite)
## A installer : imagemagick pngcrush optipng
Docompress(){
if [ $2 = 0 ]
then
Dolist $1
elif [ $2 = 2 ]
then
Dooptipng $1
elif [ $2 = 2 ]
then
Dopngcrush $1
elif [ $2 = 3 ]
then
Dooptipng $1
Dopngcrush $1
fi
}
Dolist(){
echo $1
}
Dooptipng(){
optipng -o7 $1
}
Dopngcrush(){
pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB $1 tmp_img_file.png;
mv -f tmp_img_file.png $1;
}
Doconvertjpgpng(){
convert -strip $1 $1.png
}
#On vérifie le nombre d'argument
if [ $# != 2 ]
then
echo "Il n'y a pas assez d'arguments, il faut deux arguments"
echo "Le premier est le path du dossier a traiter"
echo "Le deuxieme est le niveau de compression : "
echo " 0 => ne fait rien, liste seulement les images"
echo " 1 => compresse avec optipng"
echo " 2 => compresse avec pngcrush"
echo " 3 => compresse avec optipng et pngcrush"
echo " 4 => convertir les jpeg en png (attention, la taille grossit tres vite)"
exit
fi
if [ $2 = 4 ]
then
# On boucle (avec reccurence) sur tous les fichiers jpg de notre dossier
for file in `find $1 -iname '*.jpg' -print 2>/dev/null`
do
Doconvertjpgpng $file;
done
# On boucle (avec reccurence) sur tous les fichiers jpeg de notre dossier
for file in `find $1 -iname '*.jpg' -print 2>/dev/null`
do
Doconvertjpgpng $file;
done
else
# On boucle (avec reccurence) sur tous les fichiers png de notre dossier
for file in `find $1 -iname '*.png' -print 2>/dev/null`
do
Docompress $file $2;
done
fiPs : Je pense que ce script va faire plaisir a Eric daspet ;)
Articles en rapport:
Bonjour comment supprimer l’utilisation de la conversion jpg=>png, je suppose qu’il faut enlever quelques ligne dans le script ?
Merci d’avance
si tu ne veux pas l’utiliser, tu utilises le script avec l’option 3 !
sinon tu supprimes :
11 ## 4 => converti tous les jpeg en png (attention, la taille grossit tres vite)
42 Doconvertjpgpng(){
43 convert -strip $1 $1.png
44 }
et tu remplace :
60 if [ $2 = 4 ]
61 then
62 # On boucle (avec reccurence) sur tous les fichiers jpg de notre dossier
63 for file in `find $1 -iname ‘*.jpg’ -print 2>/dev/null`
64 do
65 Doconvertjpgpng $file;
66 done
67 # On boucle (avec reccurence) sur tous les fichiers jpeg de notre dossier
68 for file in `find $1 -iname ‘*.jpg’ -print 2>/dev/null`
69 do
70 Doconvertjpgpng $file;
71 done
72 else
73 # On boucle (avec reccurence) sur tous les fichiers png de notre dossier
74 for file in `find $1 -iname ‘*.png’ -print 2>/dev/null`
75 do
76 Docompress $file $2;
77 done
78 fi
Par
73 # On boucle (avec reccurence) sur tous les fichiers png de notre dossier
74 for file in `find $1 -iname ‘*.png’ -print 2>/dev/null`
75 do
76 Docompress $file $2;
77 done
Voila, je pense que ca doit etre bon !
Peut on lancer le script avec php ?
je pense que c’est possible avec exec, je souhaite par exemple télécharger l’image sur le serveur via un formulaire et faire l’exécution à ce moment précis sur l’image télécharger
J’ai regarder du côté du script de punypng mais c’est du ruby :( et puis aucune doc
Oui normalement tu peux le faire avec la fonction exec.