Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
imagemagick [Le 15/08/2020, 10:48] moko138 [Convert] complément sur -auto-orient. |
imagemagick [Le 26/08/2024, 21:31] (Version actuelle) zococo [J'obtiens une erreur de cache, width or height] |
||
---|---|---|---|
Ligne 8: | Ligne 8: | ||
**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... | **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 est possible d'utiliser ces différents outils dans des programmes écrits en C, C++, Ruby, Python, Perl, etc... | ||
+ | |||
+ | <note important>Depuis 2016 imagemagick est passé à la version 7 qui modifie sensiblement la manière d'utiliser la bibliothèque, toutefois une version 6, intitulée "legacy" reste maintenue (2023) et mise à jour. La présente page se réfère à l'utilisation d'IM6. La version d'IM présente dans les paquets est une version legacy.</note> | ||
===== Installation ===== | ===== Installation ===== | ||
Ligne 39: | Ligne 41: | ||
**Convert** permet la modification d'une ou plusieurs images, par exemple : | **Convert** permet la modification d'une ou plusieurs images, par exemple : | ||
- | * créer une image TGA à partir d'une image JPEG : <code>convert image.jpg image.tga</code> | + | * créer une image TGA à partir d'une image JPEG : <code bash>convert image.jpg image.tga</code> |
- | * convertir une capture PNG en JPEG **et** la compresser à 20 %. Cela est **fort utile** pour ne pas alourdir inutilement vos demandes d'aide sur le forum : <code>convert -quality 20 image.png image.jpg</code> | + | * convertir une capture PNG en JPEG **et** la compresser à 20 %. Cela est **fort utile** pour ne pas alourdir inutilement vos demandes d'aide sur le forum : <code bash>convert -quality 20 image.png image.jpg</code> |
- | * créer un fichier GIF animé à partir de plusieurs images PNG : <code>convert images_*.png anime.gif</code> | + | * créer un fichier GIF animé à partir de plusieurs images PNG : <code bash>convert images_*.png anime.gif</code> |
- | <note>Cette commande permet la création d'un GIF animé d'assez bonne qualité à partir de photos JPEG (l'option ''-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) : <code>convert -delay 50 -loop 0 *.jpg animation.gif</code></note> | + | <note>Cette commande permet la création d'un GIF animé d'assez bonne qualité à partir de photos JPEG (l'option ''-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) : <code bash>convert -delay 50 -loop 0 *.jpg animation.gif</code></note> |
- | * redimensionner en conservant les proportions (l'une des dimensions de l'image finale pourra être inférieure aux valeurs passées en paramètre) : <code>convert test1.jpg -resize 500x1050 test1b.jpg</code> | + | * redimensionner en conservant les proportions (l'une des dimensions de l'image finale pourra être inférieure aux valeurs passées en paramètre) : <code bash>convert test1.jpg -resize 500x1050 test1b.jpg</code> |
- | * redimensionner en forçant un changement de proportions : <code>convert test1.jpg -resize 500x1050\! test1b.jpg</code> | + | * redimensionner en forçant un changement de proportions : <code bash>convert test1.jpg -resize 500x1050\! test1b.jpg</code> |
- | * créer un document PDF à partir d'une série d'images png : <code>convert -compress jpeg images_*.png document.pdf</code> | + | * créer un document PDF à partir d'une série d'images png : <code bash>convert -compress jpeg images_*.png document.pdf</code> |
<note>L'option ''-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.</note> | <note>L'option ''-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.</note> | ||
- | * extraire des images png à partir de chaque page d'un document pdf : <code>convert -density 300 fichier.pdf page%d.png</code> | + | * extraire des images png à partir de chaque page d'un document pdf : <code bash>convert -density 300 fichier.pdf page%d.png</code> |
- | <note tip>En cas d'erreur du type : <code>convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408. | + | * ou si on ne veut qu'une page du fichier pdf (pour une page de couverture par exemple): |
+ | * <code bash>convert -density 95 -quality 70 publication.pdf[0] couverture-publication.jpg</code> | ||
+ | |||
+ | <note tip>En cas d'erreur du type : <code bash>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 `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.</code>ne pas hésiter à modifier le fichier policy.xml ainsi qu'indiqué [[imagemagick#j_obtiens_une_erreur_dans_la_conversion_en_pdf_et_eps|ci-dessous]]</note> | convert-im6.q16: no images defined `fichier.pdf' @ error/convert.c/ConvertImageCommand/3258.</code>ne pas hésiter à modifier le fichier policy.xml ainsi qu'indiqué [[imagemagick#j_obtiens_une_erreur_dans_la_conversion_en_pdf_et_eps|ci-dessous]]</note> | ||
- | * diminuer les dimensions d'une image tout en effectuant une rotation de 90° dans le sens horaire : <code>convert images.jpg -resize 50% -rotate 90 image.jpg</code> | + | * diminuer les dimensions d'une image tout en effectuant une rotation de 90° dans le sens horaire : <code bash>convert images.jpg -resize 50% -rotate 90 image.jpg</code> |
- | * modifier la résolution de l'image : <code>convert -units PixelsPerInch image.JPG -density 300 image.JPG</code> | + | * modifier la résolution de l'image : <code bash>convert -units PixelsPerInch image.JPG -density 300 image.JPG</code> |
<note important>Les dimensions de l'image ne sont pas modifiées par cette opération, à l'affichage celle-ci apparaîtra donc plus grande ou plus petite selon les cas.</note> | <note important>Les dimensions de l'image ne sont pas modifiées par cette opération, à l'affichage celle-ci apparaîtra donc plus grande ou plus petite selon les cas.</note> | ||
- | * tourner les images en fonction de leur orientation donnée dans le format [[wpfr>EXIF]], comme par exemple les images issues d'un appareil photo numérique. L'image n'est retournée que si elle a été prise en portrait, si elle a été prise en paysage, celle-ci n'est pas modifiée : <code>convert image.jpg -auto-orient image_retournee.jpg</code> | + | * tourner les images en fonction de leur orientation donnée dans le format [[wpfr>EXIF]], comme par exemple les images issues d'un appareil photo numérique. L'image n'est retournée que si elle a été prise en portrait, si elle a été prise en paysage, celle-ci n'est pas modifiée : <code bash>convert image.jpg -auto-orient image_retournee.jpg</code> |
<note tip> | <note tip> | ||
Cette option est quasi-indispensable avec les images verticales dont on compte supprimer (option **-strip**) ensuite les exifs et commentaires. Faute de quoi, une même image sera affichée verticalement ou horizontalement selon les __visionneuses__ et - auteurs de blogs, songez-y ! - selon les __navigateurs__. | Cette option est quasi-indispensable avec les images verticales dont on compte supprimer (option **-strip**) ensuite les exifs et commentaires. Faute de quoi, une même image sera affichée verticalement ou horizontalement selon les __visionneuses__ et - auteurs de blogs, songez-y ! - selon les __navigateurs__. | ||
- | <code> | + | <code bash> |
convert image.jpg -auto-orient -strip image_retournee.jpg | convert image.jpg -auto-orient -strip image_retournee.jpg | ||
</code> | </code> | ||
L'ordre des options importe ! | L'ordre des options importe ! | ||
</note> | </note> | ||
- | * ajouter un //copyright// (« © Ubuntu » par ex.) ou autre //watermark// sur les photos : des scripts ont déjà été faits, facilitant l'utilisation des lignes de commandes, en particulier pour l'ajout d'un //copyright// image transparente : voir dans [[http://forum.ubuntu-fr.org/viewtopic.php?id=301750|ce post de forum]] avec [[http://forum.ubuntu-fr.org/viewtopic.php?pid=1878153#p1878153|ce script]] de [[http://forum.ubuntu-fr.org/profile.php?id=50612|Fake]] ; | ||
- | * découper une image comme avec un emporte-pièce. Les paramètres largeur et hauteur servent à fixer la largeur et la hauteur de l'image finale (dans la limite des dimensions de l'image originale), les paramètres //x// et //y// servent à localiser le coin supérieur gauche de l'image finale par rapport au coin supérieur gauche de l'image initiale. Pour découper une image de 50 px de largeur et de 100 px de hauteur, située à 10 px du bord gauche et à 20 px du bord supérieur de « initial.png » : <code>convert -crop 50x100+10+20 initial.png final.jpg</code> | ||
- | * découper une image de dimensions 55 × 110 en 18 morceaux, 10 morceaux de 20 × 20, 2 morceaux de 20 × 10, 5 morceaux de 15 × 20 et 1 morceau de 15 × 10. En effet, si //x// et //y// sont omis, l'image est intégralement découpée en morceaux de dimensions hauteur×largeur, la découpe se faisant de gauche à droite et de haut en bas, à partir du coin supérieur gauche (il est possible de remplacer hauteur×largeur et //x// et //y// par un % de la largeur. //x// et //y// peuvent être négatifs, dans ce cas le point de départ de la découpe se fera en dehors de l'image d'origine, seule la partie correspondant à des pixels de l'image d'origine étant restituée). Les parties les plus à droite et les plus en bas peuvent être de dimensions inférieures à la taille de la découpe pour s'adapter à la dimension de l'image initiale : <code>convert -crop 20x20 initial.jpg final.jpg </code> | ||
- | * transformer un dossier d'images : <code>convert *.BMP -set filename:f '%t.png' +adjoin '%[filename:f]'</code> | ||
- | * créer une image unie (par exemple pour y superposer des images de dimensions différentes) : <code>convert -size 2450x4780 xc:blue image.png</code> | ||
+ | * améliorer le contraste (//expansion d'histogramme//): selon la luminosité lors de la prise d'image, celle-ci peut ne pas utiliser tous les niveaux disponibles, que ce soit dans les tons clairs comme dans les tons sombres, pour améliorer à minima cela, lancez : <code bash>convert image-source-peu-contrasté.jpg -auto-level image-dest-mieux-contrasté.jpg</code> | ||
+ | * ajouter un //copyright// (« © Ubuntu » par ex.) ou autre //watermark// sur les photos : des scripts ont déjà été faits, facilitant l'utilisation des lignes de commandes, en particulier pour l'ajout d'un //copyright// image transparente : voir dans [[https://forum.ubuntu-fr.org/viewtopic.php?id=301750|ce post de forum]] avec [[http://forum.ubuntu-fr.org/viewtopic.php?pid=1878153#p1878153|ce script]] de [[http://forum.ubuntu-fr.org/profile.php?id=50612|Fake]] ; | ||
+ | * découper une image comme avec un emporte-pièce. Les paramètres largeur et hauteur servent à fixer la largeur et la hauteur de l'image finale (dans la limite des dimensions de l'image originale), les paramètres //x// et //y// servent à localiser le coin supérieur gauche de l'image finale par rapport au coin supérieur gauche de l'image initiale. Pour découper une image de 50 px de largeur et de 100 px de hauteur, située à 10 px du bord gauche et à 20 px du bord supérieur de « initial.png » : <code bash>convert -crop 50x100+10+20 initial.png final.jpg</code> | ||
+ | * découper une image de dimensions 55 × 110 en 18 morceaux, 10 morceaux de 20 × 20, 2 morceaux de 20 × 10, 5 morceaux de 15 × 20 et 1 morceau de 15 × 10. En effet, si //x// et //y// sont omis, l'image est intégralement découpée en morceaux de dimensions hauteur×largeur, la découpe se faisant de gauche à droite et de haut en bas, à partir du coin supérieur gauche (il est possible de remplacer hauteur×largeur et //x// et //y// par un % de la largeur. //x// et //y// peuvent être négatifs, dans ce cas le point de départ de la découpe se fera en dehors de l'image d'origine, seule la partie correspondant à des pixels de l'image d'origine étant restituée). Les parties les plus à droite et les plus en bas peuvent être de dimensions inférieures à la taille de la découpe pour s'adapter à la dimension de l'image initiale : <code bash>convert -crop 20x20 initial.jpg final.jpg </code> | ||
+ | * convertir une image couleur en niveau de gris : <code bash>convert -colorspace Gray initial.jpg final.jpg</code> | ||
+ | * transformer un dossier d'images : <code bash>convert *.BMP -set filename:f '%t.png' +adjoin '%[filename:f]'</code> | ||
+ | * créer une image unie (par exemple pour y superposer des images de dimensions différentes) : <code bash>convert -size 2450x4780 xc:blue image.png</code> | ||
+ | * créer une image transparente (par exemple pour y coller d'autres éléments) : <code bash>convert -size 840x600 -colorspace RGB xc:none image-transp.png</code> | ||
+ | <note tip>Fixer l'espace de couleur par -colorspace peut se révéler utile pour ultérieurement coller cette image transparente dans des images au profil de couleur différent, à défaut l'espace de couleur est en niveaux de gris qui peut être incompatible avec des images colorées.</note> | ||
==== Mogrify ==== | ==== Mogrify ==== | ||
Ligne 98: | Ligne 107: | ||
==== Identify ==== | ==== Identify ==== | ||
- | **Identify** donne des informations sur l'image. | + | **Identify** donne des informations sur l'image. |
* Pour des informations sommaires : <code>identify image.jpg</code> | * Pour des informations sommaires : <code>identify image.jpg</code> | ||
* Pour des informations complètes : <code>identify -verbose image.jpg</code> | * Pour des informations complètes : <code>identify -verbose image.jpg</code> | ||
Ligne 145: | Ligne 154: | ||
[[man>import|Le manuel]] pour plus d'information. | [[man>import|Le manuel]] pour plus d'information. | ||
- | ==== Animate ==== | + | ==== Animate ==== |
**Animate** permet la visualisation d'animations. | **Animate** permet la visualisation d'animations. | ||
Ligne 151: | Ligne 160: | ||
* Pour animer une série de photos à raison d'une par seconde : <code>animate -delay 100 *.png </code> | * Pour animer une série de photos à raison d'une par seconde : <code>animate -delay 100 *.png </code> | ||
- | ==== Compare ==== | + | ==== Compare ==== |
**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** 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 : | ||
Ligne 272: | Ligne 281: | ||
== -dissolve == | == -dissolve == | ||
- | 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 : | + | 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 pourcentage Première Deuxième Image_résultante | ||
Ligne 288: | Ligne 297: | ||
== -watermark ("modulate" compose method) == | == -watermark ("modulate" compose method) == | ||
- | Dégradation d'image et l'apposition d'un filigrane pour protéger le copyright. Syntaxe : | + | 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 | composite -watermark valeur_luminosité[xvaleur_saturation] Première Deuxième image_resultante | ||
Ligne 301: | Ligne 310: | ||
La première image est reproduite comme un motif en plusieurs exemplaires de manière à couvrir la deuxième image. | La première image est reproduite comme un motif en plusieurs exemplaires de manière à couvrir la deuxième image. | ||
- | Syntaxe : | + | Syntaxe : |
composite -tile star.gif netscape: tile.gif | composite -tile star.gif netscape: tile.gif | ||
Ligne 310: | Ligne 319: | ||
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) | 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 : | + | Syntaxe : |
'-compose Mathematics -set option:compose:args -1,1,1,0 -composite image_résultante.png | '-compose Mathematics -set option:compose:args -1,1,1,0 -composite image_résultante.png | ||
Ligne 322: | Ligne 331: | ||
Linear_Light 0,2,1,-1 | Linear_Light 0,2,1,-1 | ||
- | = Change_Mask = | + | = 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. | 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. | ||
Ligne 354: | Ligne 363: | ||
==== J'obtiens une erreur dans la conversion en PDF (et EPS...) ==== | ==== J'obtiens une erreur dans la conversion en PDF (et EPS...) ==== | ||
à la commande : | à la commande : | ||
- | convert image1.jpg image2.jpf image.pdf | + | convert image1.jpg image2.jpg image.pdf |
On a l'erreur : | On a l'erreur : | ||
Ligne 407: | Ligne 416: | ||
Donc **[[apt>librsvg2-bin]]** pour le support des images svg. | Donc **[[apt>librsvg2-bin]]** pour le support des images svg. | ||
- | ==== J'obtiens une erreur de cache ==== | + | ==== J'obtiens une erreur de cache, width or height ==== |
Erreur du type: | Erreur du type: | ||
<code>convert-im6.q16: DistributedPixelCache '127.0.0.1' @ error/distribute-cache.c/ConnectPixelCacheServer/244</code> | <code>convert-im6.q16: DistributedPixelCache '127.0.0.1' @ error/distribute-cache.c/ConnectPixelCacheServer/244</code> | ||
Ligne 423: | Ligne 432: | ||
sudo sed -i 's/name="memory" value="256MiB"/name="memory" value="512MiB"/' /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 | sudo sed -i 's/name="disk" value="1GiB"/name="disk" value="2GiB"/' /etc/ImageMagick-6/policy.xml | ||
+ | </code> | ||
+ | |||
+ | Pour une erreur //width or height// (j'avais une image de 7803x19208) ((https://askubuntu.com/a/1484930/385361)): | ||
+ | <file - /etc/ImageMagick-6/policy.xml> | ||
+ | <policy domain="resource" name="width" value="24KP"/> <!-- default 16KP --> | ||
+ | <policy domain="resource" name="height" value="24KP"/> <!-- default 16KP --> | ||
+ | </file> | ||
+ | j'ai eu ensuite l'erreur cache et j'ai dû monter "disk" à 3GiB (cf. ci-dessus) | ||
+ | |||
+ | ==== Quelle est ma version d'imagemagick ? ==== | ||
+ | Pour connaître sa version d'Imagemagick, saisir en console : | ||
+ | <code> | ||
+ | $ identify -version | ||
+ | </code> | ||
+ | ou (pour imagemagick 7) : | ||
+ | <code> | ||
+ | $ magick identify -version | ||
</code> | </code> | ||
===== Voir aussi ===== | ===== Voir aussi ===== | ||
- | * [[http://www.imagemagick.org/script/command-line-tools.php|Site officiel]] **(en)** | + | * [[https://legacy.imagemagick.org/|Site officiel imagemagick LEGACY]] **(en)** |
+ | * [[https://www.imagemagick.org/script/command-line-tools.php|Site officiel]] **(en)** | ||
+ | * [[https://legacy.imagemagick.org/Usage|De nombreux exemples LEGACY]] **(en)** | ||
* [[http://www.imagemagick.org/Usage|De nombreux exemples]] **(en)** | * [[http://www.imagemagick.org/Usage|De nombreux exemples]] **(en)** | ||
- | * [[http://softlibre.gloobe.org/doku.php?id=imagemagick:doc_start|Documentation non-officielle]] **(fr)** | + | * [[http://www.fmwconcepts.com/imagemagick/multicrop2/index.php|Pour aller plus loin : de nombreux scripts pour Imagemagick]] **(en)** |
---- | ---- | ||
- | //Contributeurs principaux : [[:utilisateurs:kanor]], [[:utilisateurs:ZondeR]], [[:utilisateurs:Zococo]], moko138.// | + | //Contributeurs principaux : [[:utilisateurs:kanor]], [[:utilisateurs:ZondeR]], [[:utilisateurs:Zococo]], moko138, [[:utilisateurs:bcag2]].// |