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

[modifier] Création d'image

[modifier] Image vide

convert -size 640x480 xc:color output.png

[modifier] Image d'une couleur uni

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

[modifier] Images aléatoires

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

[modifier] Deux images -> une image

[modifier] Background et foreground

composite foreground.png background.png output.png

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

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

[modifier] Dissoudre 1 image dans l'autre

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%.

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

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

[modifier] Coller 2 images ensembles

[modifier] Une en dessous de l'autre

convert dessus.png dessous.png -append output.png

Fonctionne aussi pour plusieurs images

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

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

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

[modifier] Une par dessus l'autre

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

convert dessous.png dessus.png -flatten -background None output.png


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

convert dessous.png -page +345+330 dessus.png -flatten output.png

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

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  *?.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

[modifier] Couper deux images en diagonale et les coller

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

[modifier] Édition d'image

[modifier] Prendre un bout d'une image

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

[modifier] Prendre une bouchée dans une image

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

[modifier] Enlever le haut d'une image

convert -shave 0xhauteur_morceau_en_pixels input.png output.png

[modifier] Prendre le haut d'une image

convert -crop 0xhauteur_morceau_en_pixels longue_image.png petite_image.png

[modifier] Retirer une colonne

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

[modifier] Faire une rotation à une image

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

[modifier] Couper une images en plusieurs morceaux

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

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

[modifier] Image mirroir

Mirroir dans la direction verticale:

convert -flip original.png mirroir_vertical.png

Mirroir dans la direction horizontale:

convert -flop original.png mirroir_horizonal.png

[modifier] Couleurs

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

[modifier] Remplacer une couleur par une autre couleur

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

[modifier] Mettre une couleur transparente

convert -transparent couleur input.png output.png

[modifier] Conserver une seule couleur

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

source

[modifier] Enlever le canal alpha

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

[modifier] Convertir en niveaux de gris

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

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

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

convert -monochrome input.png output.png

[modifier] Charactères

[modifier] Mettre de l'écriture de différentes tailles

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

Une autre option:

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

[modifier] Font disponible

convert -list font

ou

identify -list type

[modifier] Ligne de commande

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

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

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

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

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

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

[modifier] Pour changer l'extension en gif

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

[modifier] Divers

[modifier] Enlever l'antialising

convert +-antialias operations....

[modifier] Gif animé

[modifier] Création

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

[modifier] Décomposition

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

[modifier] Convertir une image en pdf

convert image.jpg fichier.pdf
Outils personnels