Compression d’image avec jpegoptim et optipng

Lors de l’amélioration de la vitesse de chargement de vos pages afin d’améliorer l’UX pour réduire le taux de rebonds et satisfaire plus aux directives de Google, vous serez vite confronté au fait d’avoir des images trop lourdes qu’il est difficile de réduire sans en réduire la qualité. Pour arriver à cela aussi appelé lossless, des librairies sont extrêmement utiles, efficaces et rapide à mettre en œuvre. 
Les librairies optipng et jpegoptim permettent d’atteindre les taux de compression définis par Google Page Speed et donc de valider cette partie de leur test.

Jpegoptim

Jpegoptim comme son nom l’indique permet d’optimiser des fichier jpeg selon un taux de compression définie ou sans perte. Un des grands avantages de cette librairie est qu’elle est extrêmement rapide.

Installation de JpegOptiom sur Ubuntu

sudo apt-get update apt-get install jpegoptim

Exécution de jpegoptim

Je vous montre ci-dessous comment exécuter jpegotim de différentes façon afin d’avoir un aperçu global. Il est parfois utile de compresser par lot et parfois par fichier.

Exécuter jpegotim en ligne de commande
Paramètre Utilisation
–strip-all Enlève tous les marquer de l’image (nom du programme utilisé,…), à utiliser pour satisfaire Google
-m Choix de la qualité à avoir entre 0 et 100. Si vous mettez ce paramètre, la compression ne sera plus sans perte ou lossless.
-p Préserve les différentes informations de date
-P Préserve les permissions de l’image originale.

jpegotim change le proriétaire du fichier
Les version précédentes à la version 1.4.2 ne permettent pas de garder les permissions (owner/group) ce qui a pour effet que, si vous exécuter le script depuis une cron, le propriétaire peut changer et rendre l’image inaccessible pour l’utilisateur.
Pour voir votre version exécuter simplement: #jpegotim –version

Exécuter en ligne de commande

La ligne ci-dessous compresse toutes les images de type JPG qui se trouvent dans mon dossier /img/

find /home/web-presence/public_html/img/ -type f -name '*.jpg' -exec jpegoptim -m80 -P --strip-all {} \;

Exécuter depuis une cron php

Pour compresser toutes les images de type JPG modifiée il y a moins de 60 minutes qui se trouvent dans le dossier img/cache, exécuter un fichier php contenant les commandes suivantes :

find /home/web-presence/public_html/img/cache/ -type f -name '*.jpg' -cmin -60 -exec jpegoptim -m75 -P --strip-all {} 

Compresser les jpeg depuis php

Pour compresser une image de type JPG depuis un script php exécuter la commande ci-dessous:

exec("exec jpegoptim -m80  -P --strip-all /chemin_de_l_image/nom_du_fichier.jpg");

Optipng

Vous l’aurez bien sur compris, optipng est lui conçu pour compresser des images png. Plus lent que pour les jpegs, il est néanmoins très utile et selon les réglages pas trop lent.

Installation de Optipng sur Ubuntu

sudo apt-get update
apt-get install optipng

Paramètres principaux

Paramètre Utilisation
-strip all Enleve toutes les meta données de l’image. Elles sont inutiles et prennent de la place.
-o Choix du niveau d’optimisation entre 0 et 7. La valeur par défaut est 2. Plus le niveau de compression est élevé, plus la vitesse d’exécution sera lente.
-preserve Tente de préserver les attributs du fichier

Exécuter Optipng

Les principes sont les mêmes que pour Jpegoptim. Je donne ici 2 exemple, le premier avec une recherche de fichier et le second en lui transmettant le nom du fichier. Je vous incite à regarder plus haut pour plus d’exemples.

optipng -o4 -strip all mon_image.png
find /home/web-presence/public_html/img/ -type f -name '*.png' -exec optipng -o4  {} \;