ImageMagick : manipuler des images en ligne de commande


Design
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 commentaire
  •  

    Super et merci pour le mogrify, j'en était resté à

    for i in `ls *.jpg`;do convert $i;done

    Du coup c'est plus simple.

    RépondreRépondre
    lolovroom , le 8 février 2010 à 08:52
  •  

    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/

    RépondreRépondre
    R@OUL , le 8 février 2010 à 12:10
  •  

    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+...

    RépondreRépondre
    i M@N , le 8 février 2010 à 13:27
  •  

    @lolovroom : pareil pour moi, j'ai encore du mal à utiliser mogrify, mais réflexe de boucle for en bash étant bien encrés.

    RépondreRépondre
    pti-seb , le 8 février 2010 à 13:45
  •  

    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 :D

    RépondreRépondre
    MatToufoutu , le 8 février 2010 à 15:00
  •  

    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. :)

    RépondreRépondre
    Guimloute - Guillaume , le 10 février 2010 à 08:47
  •  

    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.

    RépondreRépondre
    spleen , le 25 septembre 2011 à 21:30
  •  

    En cherchant dans le man j'ai trouvé réponse à ma question.

    convert img.png -rotate 90 img_modif.png

    RépondreRépondre
    spleen , le 25 septembre 2011 à 21:42
  •  

    @spleen : il faut utiliser l'option -rotate degré. Un exemple pour une image avec une rotation de 90° vers la droite :

    convert -rotate 90 image.jpg image-rotation-droite.jpg

    Pour une rotation de 90° vers la gauche :

    convert -rotate -90 image.jpg image-rotation-gauche.jpg

    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.

    RépondreRépondre
    pti-seb , le 25 septembre 2011 à 21:44
  •  

    Merci beaucoup pour ce complément.

    RépondreRépondre
    spleen , le 26 septembre 2011 à 01:11
  •  

    @lolovroom :

    for i in *.jpg
    do
    ...
    done

    Pas besoin des backcotes et du ls.

    RépondreRépondre
    bob for help , le 4 décembre 2012 à 09:44
  •  

    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

    RépondreRépondre
    Chris4769 , le 9 février 2016 à 16:29
 

Ajouter un commentaire

actualité android apache apple astuce astuces bash bilboblog blog boot chrome clavier commande commandes conky date debian Desktop développement elementary exploit faille fedora firefox flash gimp gnome google graphique Graphisme hack hacking Hardware humour intel internet iphone jailbreak Jeux Kde kernel libre Linux log logiciels Logiciels Libres lucid lynx maemo mail maquette metasploit microsoft mobile mockup monitoring mozilla multi-touch musique mysql n900 nautilus nokia noyau openoffice open source password photos php Planet publicité redhat red hat rpm réseau screenshot script serveur serveurs shell sql ssh statistiques sysadmin system Sécurité thème tux-planet tv twitter ubuntu unity vidéo vidéos vlc voyage wallpaper windows wordpress yum