Image Magick

ImageMagick est un ensemble d’outils (libres et open-sources) en ligne de commande dédiés à la manipulation des images.

Imagemagick fournit un certain nombre d’outils, notamment :

Si la ligne de commande peut initialement paraitre un territoire hostile, son usage permet d’atteindre des fonctionnalités (notamment d’automisation et de scriptage) auxquels la majorité des logiciels dotés de GUI ne peuvent prétendre. Découvrir quelques commandes indispensables.

Installer ImageMagick

Sur Windows, télécharger et exécuter le programme d’installation.
Sur Linux (Debian / Ubuntu):

sudo apt-get install imagemagick

Sur MacOSX, préférer l’installation via Brew:

brew install imagemagick

Convert

↓ Redimensionne le fichier et crée une vignette

convert original.png -resize 200x200 thumbnail.png

↓ Convertir le fichier dans un autre format

convert original.png copy.jpg

↓ Actions graphiques sur une image

# flou
convert original.png -blur 0x2 blurred.png
# miroir
convert original.png -flip flipped.png
# rotation (60 degrés)
convert original.png -rotate 60 flipped.png
# Augmentation du contraste (tout pixel de moins de 25% de luminosité devient noir, tout pixel de plus de 75% devient blanc)
convert original.png -level 25%,75% contrasted.png
# Normalisation (modifie le contraste afin qu’existe un noir pur et un blanc pur)
convert original.png -normalize contrasted.png

↓ Convertit une image en niveaux de gris

convert original.png  -colorspace Gray grey.png

↓ Transformations de couleurs

# transforme l’image en niveaux de gris, applique un contraste “sigmoïdal” et teinte l’image en bleu
convert original.png -colorspace gray -sigmoidal-contrast 10,40% -fill "#0000FF" -tint 100 output.png

↓ Rendre transparent le blanc d’un fichier PNG

convert original.png -fuzz 10% -transparent white transparent.png

↓ Recadrer une image (fichier final de 200 × 150px, recadrés depuis 50px en haut et 100px à gauche de l’image originale)

convert original.png -crop 200x150+100+50 cropped.png

↓ Recadrer une image (fichier final de 1200 × 600px, recadrés depuis le centre de l’image originale)

convert original.png -resize 1200x600^ -gravity Center -extent 1200x600 resized_and_cropped.png

↓ Tramer une image (dithering)

# 2 couleurs (algorithme FloydSteinberg)
convert original.png -colors 2 -dither FloydSteinberg output.png
# 16 couleurs (algorithme Riemersma)
convert original.png -colors 16 -dither Riemersma output.png
# Trame de demi-teintes
convert original.png -ordered-dither h8x8o output.png

Compression

↓ Supprime les métadonnées

convert original.png -strip stripped.png

↓ Compresse une image en jpg
(les \ peuvent être conservés pour une meilleure lisibilité)

convert original.png \
-strip \
-sampling-factor 4:2:0 \
-quality 85 \
-interlace line \
-colorspace RGB \
compressed.jpg 

Animation / vidéo

↓ Créer un gif animé à partir des fichiers png contenus dans le dossier folder; établit le délai entre chaque image à 20ms, boucle indéfiniment, redimensionne les fichiers source à 500 × 500 pixels.

convert -delay 20 -loop 0 -scale 500x500 folder/*.png output.gif

Convertit un fichier vidéo en gif

convert -quiet -delay 1 input.avi output.gif

Fichiers PDF

↓ Convertit chaque page d’un PDF en une séquence de fichiers jpg, avec une résolution de 150 dpi et une qualité JPG de 90. Les fichiers seront placés dans un dossier "export" et nommés 0001.jpg, 0002.jpg, etc.

convert original.pdf -density 150 -quality 90 export/%04d.jpg

↓ Extrait les pages 8 à 16 d’un PDF en une séquence de fichiers png.

convert original.pdf[8-16] export/page.png

↓ Concatène plusieurs fichiers PDF, les uns à la suite des autres

convert fichier_1.pdf fichier_2.pdf fichier_3.pdf output.pdf
# Cela peut aussi être fait (plus habilement) avec Ghostscript, un autre outil CLI
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=output.pdf fichier_1.pdf fichier_2.pdf fichier_3.pdf

Mogrify

↓ Redimensionne le fichier (écrase l’original)

mogrify -resize 200x200 original.png 

↓ Redimensionne tous les fichiers d’un dossier (écrase les originaux)

mogrify -resize 200x200 dossier/*.png 

↓ Redimensionne tous les fichiers d’un dossier à 600px de haut maximum (écrase les originaux)

mogrify -geometry x600 dossier/*.jpg

↓ Redimensionne tous les fichiers jpg ou png, dans tous les sous-dossiers, à 1600px de large maximum (écrase les originaux)

# utilise find, une commande disponible dans bash
find . -type f -iname \*.jpg -o -type f -iname \*.png -execdir mogrify -resize 1600x {} +

↓ Compresse des images en jpg (même réglage que plus haut, mais écrase les originaux)

mogrify -strip -sampling-factor 4:2:0 -quality 85 -interlace line -colorspace RGB dossier/*.jpg 

Montage

↓ Crée une (ou plusieurs) planche(s) contact à partir d’un dossier d’images. Chaque image est redimensionnée à 354 × 500px, elles sont composées en 4 lignes de 10 images.

montage -verbose -background '#000000' -fill 'gray' -geometry 354x500+10+10 -tile 10x4 images/*.png planche-contact.jpg

Aller plus loin

Ligne de commande

Quelques notions de navigation en ligne de commande.

Naviguer dans les dossiers

# Afficher le dossier courant
pwd
# Se déplacer dans le dossier de l’utilisateur
cd ~ 
# Se déplacer dans le dossier "folder"
cd folder
# Se déplacer dans le dossier parent
cd ..
# Lister les fichiers du dossier courant
ls 
# Lister les fichiers du sous-dossier "subfolder"
ls subfolder
# Lister les fichiers du sous-dossier (avec les fichiers cachés)
ls -a subfolder
# Lister les fichiers du sous-dossier (afficher les permissions et la taille)
ls -l subfolder

Actions sur les fichiers et dossiers

# Renommer un fichier 
mv old_filename.txt new_filename.txt
# Même commande pour déplacer un fichier 
mv old_filename.txt folder/new_filename.txt
# Copier un fichier
cp source_file.txt copied_file.txt
# Copier un dossier
cp -R source_folder copied_folder
# Créer un fichier "new_file.txt" (ou mettre à jour sa date de modification s’il existe)
touch new_file.txt
# Créer un dossier 
mkdir folder
# Créer un dossier avec son arborescence si nécessaire 
mkdir -p folder/children_folder
# Supprimer un fichier
rm file.txt
# Supprimer un fichier protégé en écriture
rm -f file.txt
# Supprimer un répertoire
rm folder
# Supprimer un répertoire (même s’il a des enfants)
rm -R folder

Contenu allègrement emprunté et librement adapté du Mémo CMD édité par Damien Baïs au RANDOM(lab) de l’EsadSe.