Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
imagemagick [Le 05/05/2021, 18:25]
bcag2 [Convert] page d'un pdf en comportant plusieurs
imagemagick [Le 07/03/2024, 00:13] (Version actuelle)
77.140.254.212 Corrigé commande erronée (Grey --> Gray)
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>​
   * ou si on ne veut qu'une page du fichier pdf (pour une page de couverture par exemple):   * ou si on ne veut qu'une page du fichier pdf (pour une page de couverture par exemple):
-  * <​code>​convert -density 95 -quality 70 publication.pdf[0] couverture-publication.jpg</​code>​+  * <​code ​bash>convert -density 95 -quality 70 publication.pdf[0] couverture-publication.jpg</​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.+<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 xc:none image-transp.png</​code>​
 ==== Mogrify ==== ==== Mogrify ====
  
Ligne 101: Ligne 106:
 ==== 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 148: Ligne 153:
 [[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 154: Ligne 159:
   * 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 275: Ligne 280:
 == -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 291: Ligne 296:
 == -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 304: Ligne 309:
  
 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 313: Ligne 318:
  
 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 325: Ligne 330:
     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 410: Ligne 415:
 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 427: Ligne 432:
 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>​ </​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 ensuit l'​erreur cache et j'ai dû monter "​disk"​ à 3GiB (cf. ci-dessus)
 ===== Voir aussi ===== ===== Voir aussi =====
  
   * [[http://​www.imagemagick.org/​script/​command-line-tools.php|Site officiel]] **(en)**   * [[http://​www.imagemagick.org/​script/​command-line-tools.php|Site officiel]] **(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]].//
  • imagemagick.1620231948.txt.gz
  • Dernière modification: Le 05/05/2021, 18:25
  • par bcag2