Rendez-vous sur Arrakiss
Le 31/01/2020 à 10:15 dans /Journal/2020/

Optimisation et réorientation automatique d’images (pluxml inside)

On ne le dira jamais assez : publier sur la toile des images qui ne sont pas optimisées, c’est mal. Elles sont lentes à s’afficher, et surtout utilisent en excès de la bande passante.

Par exemple, un jpg peut être enregistré progressif avec une qualité de 70, la différence visuelle reste négligeable pour un impact important sur la quantité de données à charger.

J’en reparle dans cet article car j’ai récemment mis en place un petit blog sous Pluxml (un moteur de blog et CMS) pour un membre de ma famille qui souhaite partager avec nous des photos. 2 problèmes se sont vite posés pour cette personne, peu intéressée par l’informatique :

J’ai donc décidé de convertir et d’optimiser ses photos avec GraphicsMagick, le successeur d’ImageMagick plus rapide. De plus, les photos sont tournées correctement par lecture des donénes EXIF. Le tout se fait chaque nuit automatiquement.

Voici la commande magique :

gm convert "photo.jpg" -auto-orient -strip -quality 70 -interlace line "photo.jpg"

Cependant, je veux que toutes les nouvelles photos que quelqu’un met sur le blog soient optimisées. J’ai donc écrit ce script qui est exécuté toutes les nuits car appelé ainsi dans /etc/daily.local (merci OpenBSD !)

/usr/local/bin/imgoptiwww /var/www/htdocs/[...]/data/medias/

Ce script ne va considérer que les fichiers plus récents qu’un fichier témoin (.imgoptilast), créé à la première exécution du script. Voici donc le script en question :

#!/bin/sh
# optimise les images du dossier $1

test -d $1 || exit
lastrun="${1}/.imgoptilast"
if [ ! -f ${lastrun} ]; then
		# set the modification time to last year,
		# necessary for first generation of course
		touch -d "$(( $(date +%Y) - 1 ))-01-01T00:00:00" "${lastrun}"
fi
for a in $(find "${1}" \
	-type f \
	-newer ${lastrun}\
	-iname "*.jpg" ); do
		echo "optimize $a"
		gm convert "$a" -auto-orient -strip -quality 70 -interlace line "$a"
		chown www:daemon "${a}"
done
touch "${lastrun}"

exit 0

La différence est flagrante. Sur un dossier d’images d’origine de 61M, le resultat après optimisation ne pèse que 25,7M, soit un gain de presque 58%.

Le mot de la fin

Optimisez les images publiées sur le web.

Pour les png, utilisez optipng. Sinon, enregistrez vos jpg en progressif avec uen qualité de 70 avec gimp.