Image Magick
Retouche d'image automatisée

Image Magick

Image Magick est un ensemble d'outils permettant de retoucher et de modifier des images ou des séquences vidéo dans un grand nombre de formats. Ces outils sont tous en ligne de commande : animate, display, identify, import, montage, mogrify, composite, compare, conjure. Ainsi, s'il n'est pas réaliste de les utiliser pour de la retouche proprement dite, ils se montreront particulièrement efficaces pour des modifications en (grande) série.

Voyons brièvement l'utilisation de certains d'entre eux :

Tous ces outils en ligne de commande fonctionnent tous suivant le modèle très Unixien :

$ commande -liste_d_options fichier(s)_d_entrée fichier(s)_de_sortie

Passons donc à quelques exemples.

Exemples de base

Afficher une image

$ display image.jpg

Parcourir les images d'un dossier

$ display chemin/vers/le/dossier/*.*

permet d'afficher la première image ; par pression sur la barre d'espacement, on passe à la suivante. Arrivé à la dernière, on revient à la première. Ceci constitue un très pratique visionneur d'images en ligne de commande.

Convertir une image PNG en JPEG

$ convert image.png image.jpg

(une nouvelle image sera créée) ou encore

$ mogrify -format jpg image.png

À noter que la deuxième possibilité permet de traiter plusieurs images : il suffit d'en donner la liste. Par exemple :

$ mogrify -format jpg *.png

permet de convertir en JPEG toutes les images PNG du dossier actuel.

Réduire la taille d'une image

On dispose d'une image que l'on souhaite redimensionner à 640x480.

Par position, j'entends horizontale ou verticale (portrait ou paysage).

Travail en série

Ici, nous allons enfin voir toute la puissance de la combinaison d'Imagemagick et d'un shell Unix. Ou comment appliquer la même modification aux 777 images d'un dossier.

  1. Les réduire aux dimensions exactes 640x480 :

    On veut réduire chacune de ces images en ajoutant le suffixe -reduc avant l'extension (qui est ici .jpg) :

    $ for f in *.jpg; do convert -geometry 640x480 $f `echo "$f"|sed s/.jpg/-reduc.jpg/`; done
    

    Explications : les fichiers concernés sont tous les JPEG d'un dossier (d'où le *.jpg ; penser à écrire *.jpg *.jpeg *.JPG *.JPEG si certains noms sont donnés en majuscules). Nous n'allons pas nous apesantir sur convert -geometry 640x480. Le fichier d'entrée, une fois que nous sommes à l'intérieur de la boucle, sera identifié par $f

    Le fichier de sortie sera composé en rappelant $f (echo "$f") mais en appliquant auparavant la modification suivante : toute apparition de .jpg sera remplacée par -reduc.jpg (modification sed s/.jpg/-reduc.jpg/ effectuée par le caractère pipe : |). Le tout est placé entre ` ` pour interdire l'application du pipe hors de cette commande echo.

  2. Idem en écrasant les fichiers initiaux avec la nouvelle version :

    $ mogrify -geometry 640x480 *.jpg
    
  3. Utilisation de mogrify sans écraser les fichiers originaux :

    C'est possible en copiant les originaux dans un dossier de travail et en écrasant ensuite ces copies avec mogrify :

    mkdir travail && cp -v *.jpg travail && cd travail

    puis :

    $ mogrify -geometry 640x480 *.jpg
    

    On peut ensuite faire le même travail de renommage qu'en 1. avec la commande rename. Il peut y avoir deux façons de l'utiliser selon la version de rename installée sur votre système, soit :

    $ rename .jpg -reduc.jpg *.jpg
    

    soit :

    $ rename s/.jpg/-reduc.jpg/ *.jpg
    
  4. Conversion en série :
    $ mogrify -format jpeg *.tif *.tiff
    

    pour convertir en JPEG toutes les images TIFF du dossier actuel.

  5. Réalisation d'une planche-contact :

    Ce travail sera fait avec les contraintes suivantes : les miniatures auront pour dimension maximale 120 ; elles seront espacés de 25 au moins ; chaque image sera annotée avec le nom de fichier, et en-dessous, le poids entre parenthèses. Elles auront une bordure noire large de 3. Comme plusieurs planches contact seront nécessaires (à moins d'avoir une énorme et unique planche de contact comportant 777 miniatures), on décide de mettre 24 images par planche (6 colonnes et 4 lignes) et de numéroter les planches-contact par trois chiffres à partir de 000.jpg.

    $ montage -geometry 120x120+25+25 -borderwidth 3 -bordercolor black -tile 6x4 -label "%f \n (%b)" *.jpg %03d.jpg