ImageMagick

De Octet.ca

Les exemples proviennent en grande partie de la fantastique page Examples of ImageMagick Usage.

La documentation officielle d'ImageMagick est disponible en ligne.

Sommaire

Création d'image[modifier]

Image vide[modifier]

convert -size 640x480 xc:color output.png

Image d'une couleur uni[modifier]

convert -size WWxHH xc:'rgb(R,G,B)' output.png

Images aléatoires[modifier]

Avec couleurs:

mx=320;my=256;head -c "$((3*mx*my))" /dev/urandom | convert -depth 8 -size "${mx}x${my}" RGB:- random.png

Noir et blanc:

mx=320;my=256;head -c "$((3*mx*my))" /dev/urandom | convert -depth 8 -threshold 50%  -size "${mx}x${my}" RGB:- random.png

Deux images -> une image[modifier]

Background et foreground[modifier]

composite foreground.png background.png output.png

background plus petit que le foreground et le tout centré sur l'image[modifier]

Idéal pour des zoom sur des images lorsque l'une des 2 images est plus petites.

composite -gravity center foreground.png background.png output.png

Dissoudre 1 image dans l'autre[modifier]

composite -dissolve NN% foreground.png background.png output.png

NN% représente le pourcentage qui sera accordé au foreground. Le background aura donc 100%-NN%.

Image avec de la transparence par dessus une autre[modifier]

convert -flatten background.png image_avec_transparence.png output.png

Pour centrer l'image dans l'autre, il faut utiliser l'option repage. Par exemple, si la deuxième image est plus petite que la première et que l'on veut la déplacer de 100 pixels en largeur et de 200 pixels en hauteur, il faudra utiliser la commande

convert -flatten grand_background.png petit_foreground_avec_transparence -repage +100+200 output.png

Coller 2 images ensembles[modifier]

Une en dessous de l'autre[modifier]

convert haut.png bas.png -append output.png

Fonctionne aussi pour plusieurs images

convert haut.png milieu.png bas.png -append output.png

Une à côté de l'autre[modifier]

convert gauche.png droite.png +append output.png

Une par dessus l'autre[modifier]

Cette commande permet du superposer des images. Ne pas confondre avec la commande pour mettre une image en dessus de l'autre.

convert bas.png haut.png -flatten -background None output.png


Pour placer l'image du dessus à un endroit spécifique, il faut utiliser l'option page:

convert bas.png -page +345+330 haut.png -flatten output.png

Création d'une mosaïque avec plusieurs images[modifier]

Images non redimensionnées:

montage -background white -geometry +1+1 *?.jpg big.jpg

Images redimensionnées à 120x120 (par défaut avec -geometry 120x120>+4+3):

montage -background white -geometry 120x120>+4+3  *?.jpg big.jpg

Ne pas redimensionner les images et les coller:

montage -background white -mode concatenate *?.jpg big.jpg

Mettre les images sur 2 lignes et 3 colonnes:

montage -background white -mode concatenate -tile 3x2  *?.jpg big.jpg

Couper deux images en diagonale et les coller[modifier]

Création d'une image noire et blanc de la même dimension que les deux images à couper (exemple: 130x87):

convert -size 130x87 xc:black -fill white -draw "polygon 0,0 0,87 130,0" framemask.png

Couper la première image qui sera en haut à droite:

convert tunisie.png framemask.png -alpha off -compose copy_opacity -composite hautgauche.png

Couper la seconde image qui sera en bas à droite:

 convert -respect-parenthesis quebec.png \( framemask.png  -negate \) -alpha off -compose copy_opacity -composite basdroit.png

Rassembler les images ensembles:

convert hautgauche.png basdroit.png -compose over -composite tunisie-quebec.png

Source

Édition d'image[modifier]

Prendre un bout d'une image[modifier]

Voir la documentation de l'option crop pour avoir les détails

convert -crop widthxheight+X+Y input.jpg output.jpg

où X,Y représente les coordonnées du coin supérieur gauche de l'image

Prendre une bouchée dans une image[modifier]

composite -compose Dst_Out moule.png pate.png -alpha on  test.png

Enlever le haut d'une image[modifier]

convert -shave 0xhauteur_morceau_en_pixels input.png output.png

Prendre le haut d'une image[modifier]

convert -crop 0xhauteur_morceau_en_pixels longue_image.png petite_image.png

Retirer une colonne[modifier]

WIDTH=`identify -format "%w" input.png`
HEIGHT=`identify -format "%h" input.png`
convert -chop 1x$(($WIDTH-1))+colonne_a_retirer+${HEIGHT} input.png output.png

Faire une rotation à une image[modifier]

Voir l'option rotate.

Faire une rotation de 90 degrés dans le sens horaire:

convert -rotate 90 input.png output.png

Faire une rotation de 90 degrés dans le sens anti-horaire:

convert -rotate -90 input.png output.png

Couper une images en plusieurs morceaux[modifier]

Pour découper une image en M bandes de large et N bandes de haut:

convert -crop MxN image.jpg +repage +adjoin %d.jpg

Image mirroir[modifier]

Mirroir dans la direction verticale:

convert -flip original.png mirroir_vertical.png

Mirroir dans la direction horizontale:

convert -flop original.png mirroir_horizonal.png

Couleurs[modifier]

Les couleurs en arguments peuvent être des noms (white, blue, ...) ou des code hexadécimaux ex:

convert -fill white -opaque "#eeeee6" input.png output.png

Remplacer une couleur par une autre couleur[modifier]

convert -fill nouvelle_couleur -opaque couleur_a_remplacer input.png output.png

Mettre une couleur transparente[modifier]

convert input.png -transparent couleur  output.png

Conserver une seule couleur[modifier]

convert input.png  -fill couleur_qui_va_faire_tout_le_fond +opaque couleur_a_conserver output.png

source

Enlever le canal alpha[modifier]

Cette opération changera la couleur transparente en noir:

convert -alpha off input.png output.png

Dans le cas d'un png, pour avoir une autre couleur que noir, il faut suivre deux étapes (source):

 convert input_avec_canal_alpha.png -background couleur  -alpha Background tmp.png
 convert tmp.png -alpha off  output_avec_canal_alpha_mis_dans_une_autre_couleur.png

Convertir en niveaux de gris[modifier]

Le nombre de couleurs utilisé dans l'exemple (256) est arbitraire.

convert input.jpg -colorspace gray -colors 256  output.jpg

Binarisation d'une image (noir et blanc)[modifier]

convert -monochrome input.png output.png

Charactères[modifier]

Écrire sur une image[modifier]

Sur une image existante:

convert input.jpg -background transparent -fill white -font `locate Ubuntu-B.ttf` \
-pointsize 24 -gravity southeast -annotate 0 'Ma note' output.jpg

Une autre option:

convert input.png -background transparent -fill white -font `locate Ubuntu-B.ttf` \
-pointsize 24 -gravity center label:http://evalweb.cum.qc.ca/ output.png

Font disponible[modifier]

convert -list font

ou

identify -list type

Ligne de commande[modifier]

Mettre les noms de fichier dans une liste en fonction des nombres écrits dans un fichier texte[modifier]

for i in `cat fichier_avec_nombre`;do echo "pathdurepertoire/${i}.jpg" >> liste;done

Faire un composite avec les % indiqués dans les lignes de fichier[modifier]

for i in `seq 1 max_image`;do percent=`head -n $i percent.txt | tail -n 1`; \
j=`printf "%02d" $i` ; \
commande="composite -dissolve $percent foreground.jpg background.jpg $j.jpg"; \
$commande;done

Accélérer le film en diminuant le nombre d'images utilisées[modifier]

for image in `cat image_number.txt`; do echo "00000${image_number}.jpg" >> liste;done

Pour changer l'extension en gif[modifier]

for i in *.jpg; do convert $i $(echo $i | rev | cut -d . -f 2- |  rev).gif; done

Divers[modifier]

Enlever l'antialising[modifier]

convert +-antialias operations....

Gif animé[modifier]

Création[modifier]

convert -delay 100  input1.gif input2.gif  -loop 0  animation.gif

Pour que le background soit effacé à chaque fois, il faut utiliser l'option -dispose:

convert -delay 100  input1.gif input2.gif  -loop 0  -dispose Background animation.gif

Décomposition[modifier]

convert animation.gif -scene 1 +adjoin  frame_%03d.gif

Conversion[modifier]

image -> PDF[modifier]

convert image.jpg fichier.pdf

SVG -> EMF[modifier]

inkscape --file <Input-file> --export-emf <output-file>