Traitement d’images en ligne de commande avec ImageMagick

Nous allons voir dans cet article l’utilisation d’ImageMagick, convert en particulier, en ligne de commande, notamment pour optimiser des images destinées au Web, les redimensionner, faire du traitement en masse, et quelques détails concernant la conversion de PSD et les PDF.

ImageMagick ?

ImageMagick est une suite d’outils de manipulation d’images, gratuite et open source. Cette suite est disponible sous forme d’outils en ligne de commande (aussi appelés CLI,  acronyme de Command Line Interface). Elle est également disponible en librairies pouvant être incluses directement dans des applications pour différents langages (comme Imagick pour PHP).

ImageMagick est disponible sur tous les systèmes actuels.

Pour l’installer sous Linux avec Yum, il suffit de saisir :

yum install ImageMagick

Optimisation pour le Web

Les images contiennent des informations qui ne sont pas utiles quand on les affiche sur un site Web.
Ces informations, comme par exemple la miniature (thumbnail) des JPEG, ou les données EXIF, prennent de l’espace, et donc de la bande passante.

Aussi, la qualité requise pour un affichage sur un écran est moins grande que celle pour une impression. Il est donc possible de réduire la qualité, ce qui a un effet direct sur la taille du fichier et sur le temps de téléchargement.

Comme vous le savez, plus les images sont optimisées, mieux c’est. Voilà comment enlever le superflux :

convert "image.jpeg" -colorspace RGB -strip -quality 80 "nouvelle_image.jpeg"

Prenons un mauvais exemple : cette image sur WikiMedia pèse 8,7Mo. Après optimisation, elle ne pèse plus que 7Mo.
Cet exemple n’est pas bon, car personne n’affiche une image avec de telles dimensions (5522×351) sur un site Web. Par contre, comme l’image est volumineuse, le gain est flagrant.
Avec une image de taille plus standard, le gain est moindre, mais multiplié par le nombre d’images et de visiteurs, il devient intéressant quand même.

Redimensionnement

Vous pouvez aussi redimensionner une image :

convert "image.jpeg" -resize "800x600" "nouvelle_image.jpeg"

Ici, une nouvelle image est créée pour prendre les dimensions indiquées, c’est-à-dire 800 pixels en largeur et 600 pixels en hauteur.

Toujours la même image de WikiMedia redimensionnée :

L'image redimensionnée avec ImageMagick
L’image redimensionnée
Le redimensionnement est proportionnel. Dans notre exemple, la valeur maximum de la largeur ou de la hauteur est conservée, l’autre est calculée proportionnellement.

Une seule dimension peut être fournie. Par exemple, indiquez 800x pour que la largeur de l’image soit réduite à 800 pixels, la hauteur étant toujours proportionnelle.

Convert propose d’autres options de redimensionnement, comme conserver la valeur minimum de la largeur ou de la hauteur (contrairement à l’exemple précédent), le redimensionnement non proportionnel ou même la possibilité d’indiquer un proportion plutôt qu’une taille absolue.
Pour savoir comment faire, jetez un oeil au chapitre ‘Image geometry’ de la documentation du CLI.

Bien sûr le redimensionnement est compatible avec l’optimisation d’images. Il suffit de combiner les paramètres dans la même ligne de commande.

Batch

Tout l’intérêt de travailler en ligne de commandes est de pouvoir répéter ces commandes automatiquement.

Par exemple, pour redimensionner toutes les images contenues dans un dossier, il suffit de lancer cette commande (sous Linux) :

for file in *.jpg; do convert -resize 800x600 $file new-$file; done

Les versions redimensionnées des nouvelles images seront suffixées par ‘new-‘.

Un autre exemple, pour convertir toutes les images au format PNG d’un dossier :

for file in *.png; do convert $file jpeg:${file%%.*}.jpeg; done

Ici, la chaîne ‘jpeg:‘ devant le nom du fichier permet de forcer le format de l’image. Plusieurs autres formats sont possibles.

PSD

Avec ImageMagick, vous pouvez manipuler n’importe quel type d’image. Le cas des PSD est un peu particulier, comme ils contiennent plusieurs calques, considérés comme plusieurs images.

Dans la pratique, en lançant la commande d’optimisation sur un fichier PSD, convert ne créera pas une image optimisée, mais autant qu’il y a de calques.

Pour travailler sur un calque en particulier, il suffit d’indiquer son numéro entre crochets, le premier étant numéroté 0.

Par exemple, pour redimensionner le premier calque d’un fichier PSD :

convert "image.psd[0]" -resize "200x" "premier_calque_redimensionne.jpeg"

PDF

Il est également possible de convertir les pages d’un PDF en images avec ImageMagick et GhostScript.

Et le principe pour accéder aux pages est le même que celui pour accéder aux calques d’un PSD : en indiquant le numéro de la page entre crochets, là aussi la première page est numérotée 0.

Pour convertir la première page d’un PDF en JPEG :

convert "document.pdf[0]" "premiere_page.jpeg"

La première page du PDF Linux Command Line Cheat Sheet convertie pour l’exemple :

La première page du PDF convertie en JPEG
La première page du PDF convertie en JPEG
Aussi, pour convertir l’ensemble du PDF, avec un fichier JPEG par page, il suffit de retirer le numéro de page (et les crochets) :

convert "document.pdf" "document.jpeg"

Cette commande produit autant de fichiers document-xx.jpeg qu’il y a de page, où xx est ajouté automatiquement et correspond au numéro de la page.

Notez qu’il est également possible de créer un PDF, composé d’une ou plusieurs images en guise de pages.

Le mot de la fin

ImageMagick porte bien son nom : il est pratique, facile à comprendre et permet bon nombre de possibilités. Et encore, nous n’avons vu que l’utilitaire convert.

Dans un prochain article, nous verrons d’autres outils fournis dans la suite, à commencer par compose, qui permet d’associer plusieurs images.

Cet article vous a été utile ? Partage it !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Si vous le souhaitez, renseignez le champ 'Nom' de cette façon : 'VotreNom@VotreMotClef' pour obtenir une ancre optimisée pour les moteurs de recherche.