Ceci est une ancienne révision du document !
Table des matières
ImageMagick
Modification d'images
Sauf indication contraire, pour toutes les manipulations, la photo originale sera la suivante:
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
convert -crop 3x2@ climbing.jpg tile-%d.jpg
Résultat :
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 :
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 « Playstation », 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' \ -draw 'fill white rectangle 260,75 280,100' \ -draw 'fill black text 265,95 "1"' \ -draw 'fill black rectangle 279,99 285,105' \ -draw 'fill black rectangle 303,118 327,147' \ -draw 'fill white rectangle 305,120 325,145' \ -draw 'fill black text 310,140 "2"' \ -draw 'fill black rectangle 300,115 306,121' \ chicago.jpg
convert havana.original.jpg \ -pointsize 20 \ -draw 'fill black rectangle 90,400 114,429' \ -draw 'fill white rectangle 92,402 112,427' \ -draw 'fill black text 97,422 "1"' \ havana.jpg
convert vegas.original.jpg \ -pointsize 20 \ -draw 'fill black rectangle 446,1163 470,1192' \ -draw 'fill white rectangle 448,1165 468,1190' \ -draw 'fill black text 453,1185 "1"' \ -draw 'fill black rectangle 443,1160 449,1166' \ -draw 'fill black rectangle 378,1022 402,1053' \ -draw 'fill white rectangle 380,1024 400,1051' \ -draw 'fill black text 385,1044 "2"' \ -draw 'fill black rectangle 375,1050 381,1056' \ -draw 'fill black rectangle 179,918 203,947' \ -draw 'fill white rectangle 181,920 201,945' \ -draw 'fill black text 186,940 "3"' \ -draw 'fill black rectangle 176,944 182,950' \ vegas.jpg
convert rio.original.jpg \ -pointsize 20 \ -draw 'fill black rectangle 353,94 377,123' \ -draw 'fill white rectangle 355,96 375,121' \ -draw 'fill black text 360,116 "1"' \ -draw 'fill black rectangle 374,120 380,126' \ -draw 'fill black rectangle 271,760 295,789' \ -draw 'fill white rectangle 273,762 293,787' \ -draw 'fill black text 278,782 "2"' \ -draw 'fill black rectangle 292,786 298,792' \ -draw 'fill black rectangle 114,824 138,853' \ -draw 'fill white rectangle 116,826 136,851' \ -draw 'fill black text 121,846 "3"' \ -draw 'fill black rectangle 135,850 141,856' \ -draw 'fill black rectangle 191,406 215,435' \ -draw 'fill white rectangle 193,408 213,433' \ -draw 'fill black text 198,428 "4"' \ -draw '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" />