ImageMagick est un logiciel en ligne de commande très puissant de manipulation d'images dans pratiquement tous les formats existants. Il consiste en une suite d'outils permettant par exemple de changer le format, l'échelle, l'orientation, rajouter une bordure ou du texte, appliquer un filtre, fusionner plusieurs images, animer une suite d'images, etc… Il est possible d'utiliser ces différents outils dans des programmes écrits en C, C++, Ruby, Python, Perl, etc…
Il vous suffit, pour cela, d'installer le paquet imagemagick.
Les outils formant ImageMagick possèdent de nombreuses options étendant très loin leurs possibilités. La plupart de ces options sont communes à plusieurs outils. Ainsi, l'option -resize 50% permet :
eog monimage.png
Mais, quel que soit votre environnement de bureau, display est plus léger et plus puissant.
Voici ci-après la liste des différents outils ainsi que quelques exemples simples, le cas échéant.
Display affiche une image à l'écran :
display image.png
En cliquant sur l'image apparue à l'écran, vous aurez accès à une interface graphique sommaire qui vous permettra tout de même de nombreuses modifications de l'image ou de son affichage et même un diaporama du dossier. Utilisez la touche « q » pour quitter l'application.
Convert permet la modification d'une ou plusieurs images, par exemple :
convert image.jpg image.tga
convert -quality 20 image.png image.jpg
convert images_*.png anime.gif
-delay
permet de spécifier un temps en centièmes de secondes, l'option -loop 2
permet de faire 2 boucles des photos et 0 une lecture en continu) : convert -delay 50 -loop 0 *.jpg animation.gif
convert test1.jpg -resize 500x1050 test1b.jpg
convert test1.jpg -resize 500x1050\! test1b.jpg
convert -compress jpeg images_*.png document.pdf
-compress jpeg
force la compression des images au format JPEG plutôt qu'au format MTIF par défaut. Cela a pour effet d'offrir un fichier PDF nettement plus petit et plus compatible avec Adobe Reader.
convert -density 300 fichier.pdf page%d.png
convert -density 95 -quality 70 publication.pdf[0] couverture-publication.jpg
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408. convert-im6.q16: no images defined `page%d.tif': Aucun fichier ou dossier de ce type @ error/blob.c/OpenBlob/2874. convert-im6.q16: no images defined `fichier.pdf' @ error/convert.c/ConvertImageCommand/3258.
ne pas hésiter à modifier le fichier policy.xml ainsi qu'indiqué ci-dessous
convert images.jpg -resize 50% -rotate 90 image.jpg
convert -units PixelsPerInch image.JPG -density 300 image.JPG
convert image.jpg -auto-orient image_retournee.jpg
convert image.jpg -auto-orient -strip image_retournee.jpg
L'ordre des options importe !
convert image-source-peu-contrasté.jpg -auto-level image-dest-mieux-contrasté.jpg
convert -crop 50x100+10+20 initial.png final.jpg
convert -crop 20x20 initial.jpg final.jpg
convert -colorspace Gray initial.jpg final.jpg
convert *.BMP -set filename:f '%t.png' +adjoin '%[filename:f]'
convert -size 2450x4780 xc:blue image.png
convert -size 840x600 -colorspace RGB xc:none image-transp.png
Mogrify est utilisé pour apporter la même modification à plusieurs images. par exemple, pour augmenter le contraste d'une série de photos :
mogrify -sigmoidal-contrast 5,50% webcam-shot*.png
Il est également possible d'utiliser mogrify pour redimensionner une image (ou un lot d'images), avec la commande suivante :
mogrify -resize 800x600 image.jpg
ou pour toutes les images d'un dossier :
mogrify -resize 800x600 *.jpg
Attention, mogrify réécrit sur les images d'origine, pensez à faire des tests avant de lancer la commande finale ou utiliser l'option -path
pour que le résultat de la ligne de commande s'écrive dans un autre répertoire :
mogrify -resize 800x600 -path /autre_repertoire *.jpg
Ou encore, conversion de gif en jpg dans le même répertoire :
mogrify -format jpg *.gif
Ou encore, conversion et changement de proportions :
mogrify *.png -resize 500x1050\! -path /autre_repertoire *.jpg
Ce dernier traitement par lot est particulièrement utile pour corriger en un clin d'oeil des captures d'écran si, par exemple, la numérisation de vos cassettes VHS n'a pas respecté les proportions originelles.
Identify donne des informations sur l'image.
identify image.jpg
identify -verbose image.jpg
identify -verbose image.jpg | grep Quality
identify -format "largeur de %w px" image.jpg largeur de 51 px
Import dispose d'un très grand nombre d'options, pour plus d'informations reportez vous à la page de documentation du projet.
Utilisez la commande :
import image.png
Le curseur de la souris se transformera alors en « croix ». Vous pourrez alors :
Cette option vous permet de capturer l'écran entier :
import -window root image.png
Cette option vous permet d'attendre le nombre spécifié de secondes avant que le curseur ne change de forme.
import -pause 10 image.png
Utilisable en conjonction avec -window
, cette option vous permet de spécifier exactement quelle zone de l'écran doit être capturée.
Sélectionner une zone de 800×600 pixels en partant du coin supérieur gauche de l'écran :
import -window root -crop 800x600 image.png
Sélectionner une zone de 800×600 pixels en partant du point situé 150 pixels plus à droite et 100 pixels plus bas que le coin supérieur gauche de l'écran :
import -window root -crop 800x600+150+100 image.png
Le manuel pour plus d'information.
Animate permet la visualisation d'animations.
animate images.gif
animate -delay 100 *.png
Compare crée, à partir de 2 images, une troisième qui représente la différence entre les 2 premières. Utile pour savoir où ont été opérées des modifications :
compare imageA.png imageB.png difference.png
Pour faire se chevaucher ou mélanger des images.
Il semblerait que la superposition puisse se faire avec toute une palette d'effets (transparence, etc …) qui restent à expliciter. Composite permet, par exemple, d'ajouter une signature qui peut être elle-même une image (si elle est transparente, la superposition le sera également). Il est également possible d'écrire directement sur une image via "annotate" mais avec une image personnalisée c'est plus joli.
-compose
: Permet de définir la composition de l'image finale, c'est à dire position des deux images l'une par rapport à l'autre et le mode de superposition ;-geometry
: Permet de déplacer l'image du dessus d'un certain nombre de pixels ("offset") sur l'axe des abscisses et l'axe des ordonnées, les valeurs positives emmènent vers le centre de l'image, les valeurs négatives s'en éloignent ;-gravity
: le placement de l'image superposée ou le point de départ du calcul de -geometry
. Valeurs possibles :Northwest
NorthEast
SouthWest
SouthEast
North
East
South
West
Center
Exemple : ajout d'un motif en haut à droite d'une image :
composite -compose Over -gravity NorthEast cercle_bleu.png carre_orange.jpeg Image_résultante_finale.jpeg
Ajout d'un motif centré, décalé de 40 pixels vers le bas et de 20 pixels vers la gauche :
composite -compose Over -geometry +20+40 -gravity Center cercle_bleu.png carre_orange.jpeg Image_résultante_finale.jpeg
Superposition simple de deux motifs comportant des zones transparentes (placement en haut à droite) :
composite -compose Over -gravity NorthEast cercle_bleu_perce.png triangle_rouge_perce.png Image_résultante_finale.jpeg
Superposition gérant la transparence de deux motifs comportant des zones transparentes (placement en haut à droite) :
composite -compose Atop -gravity NorthEast cercle_bleu_perce.png triangle_rouge_perce.png Image_résultante_finale.jpeg
Les options possibles :
Permet de définir la composition de l'image, c'est à dire la manière d'effectuer la superposition. Plusieurs méthodes sont possibles (schémas visibles ici) :
Méthodes de superposition :
Méthodes mathématiques :
Opérations sur les couleurs (multiplications, additions, etc.). Généralement réservé aux images en nuance de gris (mais possible pour la couleur quand même).
Méthodes agissant sur la luminosité :
Méthodes de copie de canaux :
Ces méthodes assurent le transfert des informations d'un canal d'une image vers celui d'une autre image ;
Dissolution d'une image dans l'autre. Cette méthode effectue une superposition contrôlée de la première image sur la seconde, en ajustant la transparence de la première sur la seconde. Il est également possible d'organiser la dissolution progressive de la seconde image (valeurs de transparence de 100 % à 200 %). Syntaxe :
composite -dissolve pourcentage Première Deuxième Image_résultante composite -dissolve Première_pourcentage}x{Deuxième_pourcentage} Première Deuxième Image_résultante convert Deuxième Première -compose dissolve -define compose:args=Première_pourcentage,Deuxième_pourcentage -composite Image_résultante
Dissolution des deux images, les deux images sont traitées de la même manière (pas de superposition, plutôt mélange), en fonction du pourcentage fixé pour chacune dans la commande. Syntaxe :
composite -blend pourcentage Première Deuxième image_résultante composite -blend première_pourcentagexdeuxième_pourcentage Première Deuxième image_resultante convert Deuxième Première -compose blend -define compose:args=première_pourcentage,deuxième_pourcentage -composite image_resultante
Dégradation d'image et l'apposition d'un filigrane pour protéger le copyright. Syntaxe :
composite -watermark valeur_luminosité[xvaleur_saturation] Première Deuxième image_resultante
La première image est une image noir et blanc avec canal alpha masqué qui est utilisée pour éclaircir ou assombrir la deuxième image selon un pourcentage (0 : aucun effet, 100 : superposition complète) fixé dans la commande.
Utilisation d'un masque pour limiter la superposition d'une image sur une autre. Le masque de composition permet d'utiliser une troisième image qui va limiter la zone affectée par une superposition de la première image sur la seconde. La taille de l'image finale résultante sera celle de la seconde image. Les zones transparentes du masque ne seront pas prises en compte, les zones noires "protègeront" la seconde image, les zones blanches seront affectées par l'opération de superposition effectuée avec la première image.
La première image est reproduite comme un motif en plusieurs exemplaires de manière à couvrir la deuxième image. Syntaxe :
composite -tile star.gif netscape: tile.gif
= Mathematics =
Utilisation de 4 valeurs numériques pour appliquer des traitements numériques à la carte. (Formule : A*Première*Deuxième + B*Première + C*Deuxième + D) Syntaxe :
'-compose Mathematics -set option:compose:args -1,1,1,0 -composite image_résultante.png
Certaines combinaisons permettent d'obtenir l'équivalent de Multiply, LinearLigth, etc.) Méthode Compose Arguments de Mathematics
Multiply 1,0,0,0 Screen -1,1,1,0 Exclusion 0,1,1,-1 Linear_Dodge 0,1,1,0 Linear_Burn 0,1,1,-1 Linear_Light 0,2,1,-1
= Change_Mask =
Rend transparents certains pixels de l'image résultante finale en fonction de la valeur du Fuzz Factor. Utile pour reconstruire la transparence d'une image qui a recouvert un arrière-plan complexe suffisamment différent pour que la fonction puisse agir.
convert Deuxième_superposé.gif Deuxième.gif -compose ChangeMask -composite Deuxième_removed.png
Les images JPEG couleur ont souvent de légères variations de couleur résultant des pertes liées à la compression, le réglage du Fuzz Factor doit être faible pour cibler les couleurs proches. Il est parfois utile d'inverser les deux images pour reconstruire la transparence à partir du "trou" de l'arrière-plan plutôt que d'agir sur l'image superposée.
Interprète et exécute un script écrit en Magick Scripting Language (MSL).
Pour faire une composition de plusieurs images.
L'option '-geometry' donne la taille de chaque image en pixels qu'il faudra introduire. S'utilise comme suit : -geometry "largeur"x"hauteur". L'option '-tile' donne la disposition des images sur la grande unifiée : -tile "colonnes"x"lignes". En pratique :
montage -geometry "largeur"x"hauteur" -tile 2x2 *.jpg together.jpg
donnera autant d'images qu'il le faut pour assembler tous les jpeg du dossier courant à raison de quatre par page dans des jpeg dont le nom commence par together (together-0.jpg, together-1.jpg, etc.).
Très utile pour imprimer des photos en format carte sans gaspiller de papier… mais il faut découper après (utilisation d'un massicot recommandée).
Pour pouvoir manipuler de grandes images.
à la commande :
convert image1.jpg image2.jpg image.pdf
On a l'erreur :
convert: not authorized `image.pdf' @ error/constitute.c/WriteImage/1028.
Cette protection fait suite à l'été 2018 d'une possibilité très critique d'élévation de privilège via Ghostscript (https://www.kb.cert.org/vuls/id/332928/) qui a mis un temps anormal voire qui n'est toujours pas patché. Les devs de imagemagick ont donc décidé le temps que le patch soit appliqué d'interdire les conversions vers le format PDF (et autres). Il faut éditer le fichier /etc/ImageMagick-6/policy.xml
:
Pour PDF, remplacer la ligne :
<policy domain="coder" rights="none" pattern="PDF" />
Par la ligne :
<policy domain="coder" rights="read | write" pattern="PDF" />
Pour EPS, remplacer la ligne :
<policy domain="coder" rights="none" pattern="EPS" />
Par la ligne :
<policy domain="coder" rights="read | write" pattern="EPS" />
Où alors en ligne de commandes :
sudo sed -i 's/rights="none" pattern="PDF"/rights="read | write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml sudo sed -i 's/rights="none" pattern="EPS"/rights="read | write" pattern="EPS"/' /etc/ImageMagick-6/policy.xml sudo sed -i 's/rights="none" pattern="XPS"/rights="read | write" pattern="XPS"/' /etc/ImageMagick-6/policy.xml sudo sed -i 's/rights="none" pattern="PS"/rights="read | write" pattern="PS"/' /etc/ImageMagick-6/policy.xml
Le paquet imagemagick pour ubuntu ne contient pas tous les outils de ImageMagick, et notamment la librairie « devel » qui est requise par certains autres logiciels s'appuyant sur imagemagick, comme par exemple la gemme RMagick de Ruby, ou encore l'extension de PHP5 qui s'appuie sur imagemagick. Les librairies à installer sont en fait libmagickwand-dev et libmagickcore-dev.
Lorsque vous lancez une commande, ImageMagick peut déléguer des opérations à d'autres programmes. Il est donc nécessaire que ces derniers soient installés.
Pour obtenir la liste de ces délégations, tapez :
convert -list delegate
Pour obtenir la liste des délégations pour un format particulier, par exemple le svg, tapez :
convert -list delegate | grep 'svg =
'
ImageMagick vous donnera alors les programmes qu'il utilise. Pour le format svg, cette commande peut retourner :
svg ⇒ "rsvg-convert" -o "%o" "%i"
En tapant "rsvg-convert", votre shell peut alors vous indiquer le paquet à installer pour lancer cette commande :
rsvg-convert
Le programme « rsvg-convert » n'est pas encore installé. Vous pouvez l'installer en tapant :
sudo apt-get install librsvg2-bin
Donc librsvg2-bin pour le support des images svg.
Erreur du type:
convert-im6.q16: DistributedPixelCache '127.0.0.1' @ error/distribute-cache.c/ConnectPixelCacheServer/244
Il faut modifier le fichier de configuration d'imagemagick pour augmenter le cache (attention à disposer de la mémoire correspondante!):
<policy domain="resource" name="memory" value="3GB"/> <policy domain="resource" name="disk" value="2GB"/>
sudo sed -i 's/name="memory" value="256MiB"/name="memory" value="3GiB"/' /etc/ImageMagick-6/policy.xml sudo sed -i 's/name="disk" value="1GiB"/name="disk" value="2GiB"/' /etc/ImageMagick-6/policy.xml sudo sed -i 's/name="memory" value="256MiB"/name="memory" value="512MiB"/' /etc/ImageMagick-6/policy.xml sudo sed -i 's/name="disk" value="1GiB"/name="disk" value="2GiB"/' /etc/ImageMagick-6/policy.xml
Pour une erreur width or height (j'avais une image de 7803x19208) 1):
<policy domain="resource" name="width" value="24KP"/> <!-- default 16KP --> <policy domain="resource" name="height" value="24KP"/> <!-- default 16KP -->
j'ai eu ensuite l'erreur cache et j'ai dû monter "disk" à 3GiB (cf. ci-dessus)
Pour connaître sa version d'Imagemagick, saisir en console :
$ identify -version
ou (pour imagemagick 7) :
$ magick identify -version
Contributeurs principaux : kanor, ZondeR, Zococo, moko138, bcag2.