Ceci est une ancienne révision du document !
Table des matières
ImageMagick
- Afficher les caractéristiques d'une image
- Ajouter une bordure
- Ajouter un masque circulaire
- Appliquer une symétrie
- Convertir en polaroïd
- Créer une image animée
- Créer une image dont les dimensions sont fixées en utilisant un maximum de l'image originale
- Dessiner sur une image
- Découper une image pour faire une mosaïque
- Extraire une partie de l'image
- Fusionner des images
- Générer une mosaïque
- Générer un fichier PDF vide
- Redimensionner une image en conservant le ratio original
- Ré-orienter une image
- Supprimer le canal alpha
- Supprimer les données EXIF d'une image
- Écrire dans une image
Modification d'images
Sauf indication contraire, pour toutes les manipulations, les photos utilisées seront les suivantes :
Redimensionner une image en conservant le ratio original
Utile, si on ne connait pas l'orientation de la photo originale.
mogrify -geometry 100x100 climbing.jpg
Résultat :
Générer une mosaïque
montage -tile 3x1 -background transparent -geometry +0+0 climbing.jpg climbing.jpg climbing.jpg tile.jpg
Résultat :
Créer une image dont les dimensions sont fixées en utilisant un maximum de l'image originale
convert climbing.jpg -resize 50x100^ -gravity center -extent 50x100 climbing-50x100.jpg
Résultat :
Extraire une partie de l'image
convert climbing.jpg -crop 200x100+50+50 crop.jpg
Résultat :
Ajouter une bordure
convert climbing.jpg -bordercolor violet -border 10x10 border.jpg
Résultat :
Convertir en polaroïd
convert climbing.jpg -thumbnail 200x200 -bordercolor white -background black +polaroid polaroid.jpg
Résultat :
Découper une image pour faire une mosaïque
convert climbing.jpg -crop 3x2@ +repage tile-%d.jpg
Résultat :
+repage
remet à zéro le canevas et la position. Cette opération est à faire après chaque opération de découpage sauf si l'on veut préserver les informations.
Il est possible de d'utiliser des espaces pour extraire une portion de l'image. Ce n'est pas très utile dans le cas de la photo utilisée ici mais cela peut l'être pour extraire les images d'un « sprite » 1).
convert climbing.jpg -crop 3x2-40-40@ -set filename:index "%[fx:t+6]" +repage tile-%[filename:index].jpg
Résultat :
Appliquer une symétrie
# Applique une symétrie verticale convert climbing.jpg -flip vertical.flip.jpg # Applique une symétrie horizontale convert climbing.jpg -flop horizontal.flip.jpg
Résultat :
Il est possible d'appliquer à la fois flip
et flop
mais dans ce cas, cela équivaut à appliquer une rotation de 180º.
Ré-orienter une image
# Cré une nouvelle image convert -rotate 90 climbing.jpg rotate.jpg # Modifie l'image mogrify -rotate 90 climbing.jpg
Résultat :
Pour effectuer plusieurs actions modifiant la taille de l'image, il faut utiliser +repage
entre les différentes actions pour avoir le résultat escompté. Par exemple, pour retailler l'image après une rotation :
convert climbing.jpg -background Black -rotate 45 +repage -gravity Center -crop 200x200+0+0 rotate.crop.jpg
Sans +repage
:
Avec +repage
:
Ajouter un masque circulaire
convert climbing.jpg -gravity Center \( -size 200x200 xc:Black -fill White -draw 'circle 100 100 100 5' -alpha Copy \) -compose CopyOpacity -composite -background Black -alpha remove circle.mask.jpg
Dans le cas où il y a de nombreuses images à manipuler, il est recommandé de créer le masque dans un fichier externe et de l'utiliser dans la commande. Ça évitera de générer le même masque dynamiquement pour chaque image.
# Génération du masque convert -size 200x200 xc:Black -fill White -draw 'circle 100 100 100 5' -alpha Copy mask.png # Application du masque convert climbing.jpg -gravity Center mask.png -compose CopyOpacity -composite -background Black -alpha remove circle.mask.jpg
Résultat :
Fusionner des images
Pour fusionner des images, il faut qu'elles aient de la transparence. Je n'ai pas 2) trouvé comment faire ça en une seule commande, alors il faut passer par des fichiers temporaires.
# Ajout de la transparence aux images convert climbing.jpg -fill none -draw "alpha 0,0 point" -channel alpha -evaluate Divide 2 temp1.png convert knot.jpg -fill none -draw "alpha 0,0 point" -channel alpha -evaluate Divide 2 temp2.png # Superposition des images composite temp1.png temp2.png composite.default.png
Résultat :
.
Si le mode de composition par défaut ne donne pas un résultat satisfaisant, il est possible d'utiliser certaines options pour modifier le comportement de la commande. Par exemple :
Créer une image animée
convert -delay 5 -loop climbing.*.jpg climbing.gif
Résultat :
Supprimer le canal alpha
mogrify -background white -alpha remove *.png
Dessiner sur une image
Pour mettre à jour la page Driver 2, j'ai du annoter quelques cartes que je ne trouvais plus.
Je me suis servi des documents suivants pour produire les images ci-dessous :
convert chicago.original.jpg -pointsize 20 -draw 'fill black rectangle 258,73 282,102 fill white rectangle 260,75 280,100 fill black text 265,95 "1" fill black rectangle 279,99 285,105' -draw 'fill black rectangle 303,118 327,147 fill white rectangle 305,120 325,145 fill black text 310,140 "2" fill black rectangle 300,115 306,121' chicago.jpg
convert vegas.original.jpg -pointsize 20 -draw 'fill black rectangle 446,1163 470,1192 fill white rectangle 448,1165 468,1190 fill black text 453,1185 "1" fill black rectangle 443,1160 449,1166' -draw 'fill black rectangle 378,1022 402,1053 fill white rectangle 380,1024 400,1051 fill black text 385,1044 "2" fill black rectangle 375,1050 381,1056' -draw 'fill black rectangle 179,918 203,947 fill white rectangle 181,920 201,945 fill black text 186,940 "3" fill black rectangle 176,944 182,950' vegas.jpg
convert rio.original.jpg -pointsize 20 -draw 'fill black rectangle 353,94 377,123 fill white rectangle 355,96 375,121 fill black text 360,116 "1" fill black rectangle 374,120 380,126' -draw 'fill black rectangle 271,760 295,789 fill white rectangle 273,762 293,787 fill black text 278,782 "2" fill black rectangle 292,786 298,792' -draw 'fill black rectangle 114,824 138,853 fill white rectangle 116,826 136,851 fill black text 121,846 "3" fill black rectangle 135,850 141,856' -draw 'fill black rectangle 191,406 215,435 fill white rectangle 193,408 213,433 fill black text 198,428 "4" fill black rectangle 212,432 218,438' rio.jpg
Pour aller plus loin
Autre
Afficher les caractéristiques d'une image
identify climbing.jpg
Résultat :
climbing.jpg JPEG 300x200 300x200+0+0 8-bit DirectClass 18.8KB 0.000u 0:00.000
Écrire dans une image
Le résultat d'une commande
convert -border 15x15 -bordercolor "#FFFFFF" label:"$(ls climbing*)" ls.jpg
Le contenu d'un fichier
convert -fill '#007bc5' -density 200 -font aescrawl.ttf -trim +repage -border 5 -bordercolor white -background white "label:@contact.txt" contact.png
Du texte positionné
convert -size 200x30 xc:transparent -font /usr/share/fonts/TTF/DejaVuSansMono.ttf -fill black -pointsize 16 -draw "text 0,16 'climbing is fun'" -trim text.png
Générer un fichier PDF vide
convert xc:none -page A4 a.pdf
Astuce trouvée ici
Si la commande retourne l'erreur convert-im6.q16: not authorized `a.pdf' @ error/constitute.c/WriteImage/1037.
, il faut modifier la politique de sécurité utilisée par ImageMagick.
Pour cela, il faut modifier le fichier /etc/ImageMagick-6/policy.xml
en faisant le changement suivant :
<!-- Avant : politique de sécurité appliquée aux fichiers PDF, aucune action autorisée --> <policy domain="coder" rights="none" pattern="PDF" /> <!-- Après : politique de sécurité appliquée aux fichiers PDF, lecture et écriture autorisée --> <policy domain="coder" rights="read|write" pattern="PDF" />
Supprimer les données EXIF d'une image
mogrify -strip climbing.jpg