ImageMagick : manipuler des images en ligne de commande
ImageMagick est un logiciel vraiment intéressant car il permet de manipuler des images avec des lignes de commande, dans pratiquement tous les formats existants. Il est ainsi possible d'automatiser des actions (conversion, redimensionnement...) sur plusieurs images contenues dans un dossier.
Pour installer lancez la commande suivante sur une distribution à base de Debian :
sudo apt-get install imagemagick
Ou celle-ci pour une distribution à base de RPM :
yum install imagemagick
Voici une liste des commandes les plus utiles à mon sens. La plupart du temps, on utilisera convert pour la manipulation d'une image en particulier et mogrify pour effectuer la même chose, mais sur un lot de plusieurs images.
Pour obtenir des informations sur une image :
identify -ping image.png
Et si on veut en savoir encore plus :
identify -verbose image.png
Connaître la liste de toutes les couleurs utilisées dans une image :
identify -list color image.png
Convertir une image PNG en JPEG :
convert image.png image.jpg
Convertir une image PNG en JPEG en indiquant le taux de compression :
convert -quality 96 image.png image.jpg
Convertir dans un même dossier toutes les images PNG en JPEG :
mogrify -quality 96 -format jpg *.png
Convertir toutes les images (jpg, png...) en PDF :
convert images*.* fichier.pdf
Redimensionner la taille d'une image :
convert -resize 48x48 image.png image-mini.png
Redimensionner la taille de toutes les images d'un dossier :
mogrify -resize 48x48 *.png
Redimensionner une image en indiquant seulement la largeur :
convert -resize 620x image.png image-620.png
Redimensionner une image en indiquant seulement la hauteur :
convert -resize x100 image.png image-100.png
Créer un favicon :
convert -colors 256 -resize 16x16 image.jpg favicon.ico
Convertir une image couleur en noir et blanc :
convert -type image.jpg image-noir-blanc.jpg
Convertir une image couleur en niveaux de gris :
convert -type Grayscale image.jpg image-grise.jpg
Ajouter une bordure transparente de 1 pixel autour d'une image :
convert -bordercolor Transparent -border 1x1 image.png image-bordure.png
Ajouter une bordure noire de 10 pixels autour d'une image :
convert -bordercolor #000000 -border 10x10 image.png image-bordure.png
Réaliser un négatif d'une image :
convert -negate image.png image-negate.png
Retourner une image de bas en haut :
convert -flip image.png image-inversee.png
Retourner une image de gauche à droite :
convert -flop image.png image-inversee.png
Rotation d'une image de 90° vers la droite :
convert -rotate 90 image.jpg image-rotation-droite.jpg
Rotation d'une image de 90° vers la gauche :
convert -rotate -90 image.jpg image-rotation-gauche.jpg
Ajouter du texte à plusieurs images :
mogrify -fill white -pointsize 16 -annotate +685+590 'Authors Name' *.jpg
Utiliser l'interface graphique d'ImageMagick :
display image.png
12 Commentaires pour "ImageMagick : manipuler des images en ligne de commande"
Flux des commentaires de cet article Ajouter un commentaireSuper et merci pour le mogrify, j'en était resté à
Du coup c'est plus simple.
Arf je me disais bien qu'il y avait d'autres outils, je cherchais justement un outil de conversion le mois dernier. Je devais ouvrir une raw nikon (.nef) et l'enregistrer en tif avec la conversion des couleurs par rapport à la palette de l'appareil. Ca à l'air assez barbare mais j'avais pas besoin de traiter les raw, bref du coup je me suis tourner vers phatch, une vraie perle de puissance et d'accessibilité. Je ne sais pas par contre si il fonctionne en ligne de commande... http://photobatch.wikidot.com/
Hello.
Je préfère l'option -geometry à -resize parce que -geometry 640x400! va redimensionner strictement (le !) l'image en 640x400 en donnant automatiquement la plus grande longueur à la plus grande longueur de l'image convertie au côté le plus grand de l'image d'origine.
Avec -geometry plus besoin de s'occuper de savoir si l'image est en portrait ou en paysage.
A+...
@lolovroom : pareil pour moi, j'ai encore du mal à utiliser mogrify, mais réflexe de boucle for en bash étant bien encrés.
pour ma part je m'étais fait un petit script shell utilisant zenity pour faire les opérations les plus courantes directement depuis mon navigateur de fichiers (thunar), il doit aussi fonctionner avec nautilus tant que le script reçoit les éléments sélectionnés en paramètre.
Si ca en intéresse, vous pouvez le trouver ici:
http://www.ideone.com/Psy5ZzEu
par contre soyez indulgents, je suis loin d'etre un tueur en bash, donc il y a surement des choses qui pourraient etre mieux faites ou des bugs (certaines modifications de couleurs ne peuvent etre utilisées ensemble) mais jusque là il correspond à ce dont j'ai eu besoin
Merci pour cette synthèse des commandes les plus utiles. ImageMagick est vraiment un must.
Pour aller un peu plus loin dans le traitement de masse d'images, connaissez-vous G'MIC ?
Il est vraiment extra !
Merci pour ton site Pti-seb, toujours aussi intéressant.
Bonjour,
En tombant sur cette article je me suis dit que j'allais pouvoir régler un petit problème. En effet, j'aurais souhaité faire pivoter vers la droite ou la gauche toutes les images d'un dossier.
J'avoue avoir été déçu de ne pas avoir trouver mon bonheur dans le détail de cette article. Y-a t'il une solution ? Quel est la commande ?
Merci.
En cherchant dans le man j'ai trouvé réponse à ma question.
convert img.png -rotate 90 img_modif.png
@spleen : il faut utiliser l'option -rotate degré. Un exemple pour une image avec une rotation de 90° vers la droite :
Pour une rotation de 90° vers la gauche :
Si tu veux convertir toutes les images d'un dossier, il suffit d'utiliser la commande mogrify à la place de convert. Je vais ajouter ces exemples dans l'article.
Merci beaucoup pour ce complément.
@lolovroom :
for i in *.jpg
do
...
done
Pas besoin des backcotes et du ls.
Bonjour,
Je n'arrive pas à effectuer cet encadrement en batch qui fonctionne bien (sous Windows) au coup par coup. Un peu longuet quand y en a trop et puis pour le fun !!!
convert Petra01.jpg ( +clone -blur 0x3 +level 20%,100% ) ( +clone -gamma 0 -shave 80x80 -bordercolor white -border 80x80 ) -composite ( +clone -gamma 0 -shave 80x80 -bordercolor white -border 1x1 -bordercolor black -border 80x80 ) -compose screen -composite self_blurred_border.jpg
J'ai essayer ça mais cela ne marche pas non plus. (sous Linux)
for i in *.JPG do convert ( +clone -blur 0x3 +level 20%,100% ) ( +clone -gamma 0 -shave 20x20 -bordercolor white -border 20x20 ) -composite ( +clone -gamma 0 -shave 20x20 -bordercolor white -border 1x1 -bordercolor black -border 20x20 ) -compose screen -composite self_blurred_border_1.jpg done
bash: Erreur de syntaxe près du symbole inattendu « ( »
Et ça sous Windows.
FOR %f IN (*.JPG) DO convert Petra01.jpg ( +clone -blur 0x3 +level 20%,100% ) ( +clone -gamma 0 -shave 20x20 -bordercolor hite -border 20x20 ) -composite ( +clone -gamma 0 -shave 20x20 -bordercolor white -border 1x1 -bordercolor black -border 20x20 ) -compose screen -composite self_blurred_border.gif %f
Si quelqu'un a une idée je suis grandement preneur. Merci