Ludovic Frank - Développeur indépendant

ImageMagick, ou comment manipuler des images facilement avec la ligne de commande.

ionicons-v5-k Ludovic Frank 11 avr. 2023
1292 lectures Niveau :

Bonjour Bonjour 😁 !

Dans le monde du web, les images sont partout. Que ce soit pour illustrer un article, créer une bannière, ou retoucher une photo, les images sont un élément incontournable du web. Pour les manipuler, on utilise souvent des logiciels du type de GIMP, ou encore Inkscape (qui est top pour les PNG). Mais il est également possible de faire plein de choses avec la ligne de commande, le Linuxien qui est en moi est ravi de cette option 😍.

Le truc super cool avec le fait d’utiliser la CLI, c’est qu’on peut automatiser le traitement d’image, par exemple écrire qu’une seule fois “tient pour l’image en entrée je veux lui ajouter un watermark” et hop, dès qu’on doit le faire sur une image, il n’y a plus qu’à lancer notre commande (ou script bash).

Et forcément puisque c’est du CLI, on peut l’utiliser sur un serveur (bah oui, qui utilise une interface graphique sur un serveur ? Hein qui ?)

Dans cet article on va revenir sur les bases, à savoir JPEGOptim ainsi qu’optiPNG, mais bon … ça c’est que la mise en bouche… le “lourd”, c’est pour après.

Vous êtes prêt ? Alors on y va ! 😁

Outils de base : JPEGoptim et optiPNG

Ils sont très connus et d’ailleurs exploités par des outils de développement comme le "LiipImagineBundle", mais je me dis que passer brièvement sur eux est une bonne idée pour les plus débutants d’entre vous (en plus ça vous fera chercher des informations sur la compression d’image, alors on est bon !)

JPEGoptim : compresser les fichiers JPEG

Le format JPEG est un format “avec perte”, le plus répandu, même si on commence à le remplacer, il reste très présent dans le monde du web, l’outil incontournable pour compresser un JPEG en CLI, c’est Jpegoptim, un petit exemple de son utilisation ?

“jpegoptim -t -m80 --all-progressive image.jpeg”

Ici, l'option -t préserve les informations de date et d'heure de l'image, et l'option -m80 réduit la qualité de l'image à 80 %.

La mission en ajustant la qualité est de trouver le bon rapport poids / qualité, à vous de jouer 😁

Et pour le “-all-progressive” ? Je vous laisse chercher… 😛

optiPNG : optimiser les fichiers PNG

Le PNG est lui aussi vieillissant, mais on l’utilise toujours de nos jours, sa compression est bien moindre que celle du JPEG, en effet c’est de base un format “sans perte” , même s’il “peut l’être” (https://pngquant.org/), restons ici sur le principe de base que la PNG est sans perte. (pour ceux aux fonds qui n’ont pas suivi, un format sans perte, ne dégrade pas la qualité de l’image, contrairement à un format avec perte)

"optipng -o2 image.png"

Dans cet exemple, l'option -o2 définit le niveau d'optimisation, qui varie de 0 (le plus rapide) à 7 (le plus lent). Un niveau d'optimisation plus élevé peut donner de meilleurs résultats, mais le temps de traitement sera plus long.

ImageMagick : un outil puissant pour la manipulation d'images

Maintenant que nous avons parlé des outils de base pour l'optimisation d'images, il est temps de se pencher sur ImageMagick. C’est un ensemble d'outils pour manipuler les images avec la ligne de commande qui est très complète.

ImageMagick est bien sur open source

Il est vraiment très complet et peut également être utilisé à travers vos langages de programmation favoris.

Comment installer ImageMagick ?

Sur Debian et Ubuntu, toujours aussi simple : “sudo apt-get update && sudo apt-get install imagemagick”

Sur macOS, comme souvent le mieux est de passer par HomeBrew : “brew install imagemagick”

Et enfin pour Windows, c’est ici que ça se passe

Il faut noter qu’ImageMagick vient avec plusieurs commandes, par exemple “convert” ou encore “composite”

Quelques exemples d’usage d’iMageMagick

Redimensionner une image
Il m'arrive souvent de devoir redimensionner des images pour les adapter à différents supports (téléphone, ordinateur ou encore tablette). On va donc utiliser la commande “convert” d’ImageMagick pour cela.

"convert input.jpg -resize 800x600 output.jpg"

Dans cet exemple, je redimensionne l'image "input.jpg" pour qu'elle ait une largeur de 800 pixels et une hauteur de 600 pixels, puis on l’enregistre sous le nom "output.jpg".

Incruster un logo dans une image
Parfois, j'ajoute un logo aux images pour avoir une "watermark". Pour ça j'utilise la commande "composite" d'ImageMagick :

"composite -gravity southeast -geometry +10+10 logo.png image.jpg output.jpg"

Ici, je superpose "logo.png" sur "image.jpg" en positionnant le logo dans le coin inférieur droit de l'image (southeast), avec une marge de 10 pixels par rapport aux bords. Et le fichier final est "output.jpg".

Convertir une image en noir et blanc
Quand j'ai envie d'un côté "vintage", je convertis mes images en noir et blanc. Avec ImageMagick, c'est d'une simplicité 🙂 :

"convert input.jpg -colorspace Gray output.jpg"

Cette commande convertit "input.jpg" en une image en niveaux de gris et sauvegarde le résultat sous le nom "output.jpg".

Créer des GIF animés
Envie de créer votre propre mini dessin animé ? 😛 pourquoi ne pas le faire avec des GIFs ?

On va tout simplement utiliser la commande “convert”, qu’on a déjà utilisée précédemment, comme ceci :

"convert -delay 100 -loop 0 image1.jpg image2.jpg image3.jpg image4.jpg animated.gif"

Ici, je spécifie un délai de 100 centièmes de seconde entre chaque image et une boucle infinie pour l'animation. Et enregistre le résultat dans le fichier "animated.gif".

Et bien plus encore…
Ces exemples ne sont que la partie visible de l'iceberg sur ImageMagick. L'outil offre une multitude d'autres possibilités… Dans la section suivante, on va tout simplement créer de simple script Bash, pour faire des “manipulations d’image de masse”.

Utiliser ImageMagick dans des scripts bash

ImageMagick seul, c’est déjà quelque chose, mais imaginez maintenant l’utiliser avec des scripts bash, l’idée est de pouvoir faire des modifications sur plusieurs fichiers en même temps, ultra pratique quand on a beaucoup d'images à traiter de la même façon.
Je vous propose donc maintenant de voir plusieurs scripts bash, permettant de faire des opérations “de masse”

Redimensionner toutes les images du dossier courant
Rien de bien compliqué, il suffit d’appeler la commande d’ImageMagick pour chaque fichier du répertoire courant

Incruster un logo sur toutes les images d’un dossier
Allez, on change un petit peu 😛, plutôt que de le faire dans le répertoire courant on va prendre uniquement les images JPG et PNG du sous-répertoire “Input”

Conclusion

ImageMagick permet de faire beaucoup de choses, quand je l’ai découvert je me suis dit “trop bien ça va bien me simplifier la vie ça”...
Et encore dans cet article, j’ai traité une toute petite partie, regardez plutôt, toutes les possibilités sur le site du projet
C’est tout pour moi pour cette semaine, à la semaine prochaine 😁