Imagemagick
Imagemagick est un logiciel ultra-puissant qui s'utilise en ligne de commande et qui permet de manipuler quasiment tous les types d'images.
Convertion, redimensionnement, rotation, fusion, animation etc etc ... sont quelques unes des fonctions proposées par Imagemagick.
Pour installer imagemagick :
$ sudo apt-get install imagemagick
Convertir une vidéo AVI en GIF animé
$ convert -quiet -delay 1 input.avi +map output.gif
Pour convertir une vidéo MOV en GIF animé.
Remplacer le fond blanc d'une image en fond transparent
$ convert test.png -transparent white transparent.png
Convertir une image png en jpg et inversement
$ convert image.png image.jpg
Convertir une série d'images png en jpg et inversement
$ for f in *.png; do convert $f $(echo $f | cut -d. -f1).jpg; done
ou
$ mogrify -format jpg *.png
Modifier le taux de compression pendant la conversion
$ mogrify -quality 90 -format jpg *.png
Convertir une série d'image jpg (ou tout autre format) en gif animé
$ convert *.jpg anime.gif
Ajouter l'option -delay num pour paramétrer la vitesse d'animation du gif animé.
num est exprimé en 1/100 seconde.
Ajouter l'option -loop num pour paramétrer le nombre de boucle.
Par défaut -loop 0 (infini).
Convertir et redimensionner une image
$ convert image.jpg -resize 50% image.png
ou en indiquant une taille en pixel
$ convert -resize 800x600 image.png image.jpg
ou en indiquant seulement la largeur (maxi) en pixel (le ratio est conservé)
$ convert -resize 800x image.png image.jpg
ou seulement la hauteur (maxi) en pixel (le ratio est conservé)
$ convert -resize x600 image.png image.jpg
et toutes les images d'un dossier avec la commande mogrify
$ mogrify -resize 800x600 -format jpg *.png
Créer une icône à partir d'une image
$ convert -colors 256 -resize 16x16 image.jpg icone.ico
Convertir une image en niveau de gris
$ convert -type Grayscale image.jpg image.grayscale.jpg
Les différents types disponibles
$ convert -list type
Bilevel
ColorSeparation
ColorSeparationAlpha
ColorSeparationMatte
Grayscale
GrayscaleAlpha
GrayscaleMatte
Optimize
Palette
PaletteBilevelAlpha
PaletteBilevelMatte
PaletteAlpha
PaletteMatte
TrueColorAlpha
TrueColorMatte
TrueColor
Un exemple de chaque type est disponible ici.
Ajouter une bordure à une image
Une bordure transparente d'1 pixel
$ convert -bordercolor Transparent -border 1x1 image.jpg image-bordure.jpg
Une bordure noire de 10 pixels
$ convert -bordercolor black -border 10x10 image.jpg image-bordure.jpg
Créer le négatif d'une image
$ convert -negate image.jpg negate.jpg
Retourner une image verticalement
$ convert -flip image.jpg flip.jpg
Utiliser -flop pour retourner l'image horizontalement.
Pivoter une image vers la droite
$ convert -rotate 90 source.jpg destination.jpg
Utiliser -90 pour pivoter l'image vers la gauche.
Ajouter un texte en haut à gauche sur plusieurs images
$ mogrify -fill white -pointsize 16 -annotate +10+26 'Copie Interdite' *.jpg
-fill white : couleur du texte
-pointsize 16 : dimension du texte en pixel
-annotate +10+26 : position du texte sur l'image (verticale/horizontale)
Pour la position horizontale du texte, tenir compte de la dimension du texte.
Faire un montage avec plusieurs images
$ montage -background "azure3" *.jpg montage.jpg
Avec l'option -geometry, il est possible de modifier la taille des bordures entre chaque image.
La commande suivante ajoute une bordure de 5 pixels entre chaque image
$ montage -geometry +5+5 *.jpg montage.jpg
Avec l'option -resize, il est possible de redimensionner les images à assembler.
La commande suivante réduit la taille de chaque image de 80% avant de les assembler.
$ montage -resize 20% *.jpg montage.jpg
Extraire une partie d'une image
$ convert image.jpg -crop XxY+L+T newImage.jpg
X : Largeur de la nouvelle image
Y : Hauteur de la nouvelle image
L : Point de départ à gauche de l'image d'origine
T : Point de départ du haut de l'image d'origine
Par exemple, dans le schéma ci-dessous, pour extraire l'image B (500x300) de l'image A (800x600) à partir du point L (20 px à partir du bord gauche) et du point T (15 px à partir du bord haut)
$ convert image.jpg -crop 500x300+20+15 newImage.jpg
Même traitement mais sur plusieurs images
$ for f in *.png; do convert $f -crop 500x300+20+15 new_$f; done
Convertir des images png (ou autres) en un fichier pdf (avec compression des images en jpeg)
Attention, suite à une faille de sécurité, cette conversion n'est plus possible à moins de modifier un paramètre dans le fichier policy.xml de ImageMagick. Plus d'info ici.
Merci à Sergio pour l'info.
$ convert *.png -compress jpeg monDoc.pdf
Et inversement :
$ convert -density 500 monDoc.pdf monDoc.jpg
Afficher la liste de toutes les couleurs disponibles
$ convert -list color
Générer les échantillons de toutes les couleurs gérées par ImageMagick
$ for liste in $(convert -list color | sed '1,5d' | awk '{print $1 "|" $2}'); do couleur=$(cut -d'|' -f1 <<< $liste); code=$(cut -d'|' -f2 <<< $liste); convert -size 50x50 xc:"$code" $couleur.png; done
Cet enchainement de commandes permet de générer des images PNG de 50px de toutes les couleurs dans le dossier courant. Tous les fichiers sont nommés par leur nom de couleur.
Exemple des images générées : http://isbeta.fr/4f2fc
Centrer une image dans un calque :
La commande suivante permet de créer un calque transparent d'une taille de 100 x 100 pixels et d'y insérer, au centre, une image proportionnellement redimensionnée à la taille du calque
$ convert img.png -resize 100x100 -size 100x100 xc:none +swap -gravity center -composite new_img.png
Par exemple :
Image d'origine
Image redimensionnée et centrée dans le calque
Réaliser une vidéo à partir d'images
$ convert -delay 25 *.jpg anim.mpg
-delay 25 = 25 images par seconde
Afficher les informations d'une image
$ identify image.jpg
Avec plus de détail
$ identify -verbose image.jpg
Créer une image à partir d'un texte
$ convert -background white -fill black -font "Cretino-Regular" -pointsize 30 -size 200x -gravity Center caption:"Mon texte." "e.gif"
$ display e.gif
Créer une image à partir d'un texte contenu dans un fichier
$ cat texte
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec sed finibus dui. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque ultrices erat in tempor aliquam. Ut ut facilisis lectus. Sed bibendum pellentesque urna, nec convallis massa.
$ convert -background "rgb(169,169,169)" -fill "rgb(255,255,255)" -font "Abecedario_pautada-Regular" -pointsize 40 -size 480x -gravity Center caption:"$(cat texte)" "d.gif"
$ display d.gif
Souvenir d'école
Commentaires
sylvain (non vérifié)
sam, 05/03/2016 - 17:50
Permalien
retour sur Centrer une image dans un calque :
Bonjour :)
Je me cassais pas mal la tête avec mogrify et cette page commence à me sauver la mise.
Centrer une image dans un calque est un excellent début ! En revanche, quand je veux mettre une image rectangulaire dans ce carré de 100x100, j'ai des bordures noires en haut et en bas de la vignette finale.
J'ai essayé de mettre -background white en paramètre comme dans l'instruction suivante mais ça ne fonctionne pas.
Pourriez-vous m'aider ?
ronan
sam, 05/03/2016 - 21:41
Permalien
Bonjour
Logiquement, avec la commande convert, si vous indiquez le paramètre xc:none, le fond devrait être transparent, donc sans aucune bordure noire.
Par exemple, cette commande ...
... va créer un fond transparent (xc:none) d'une dimension de 100x100 (-size 100x100), y insérer au centre (-gravity center) mon image youtube.png d'une dimension de 60x60 (comme indiquée à l'aide de la commande identify) et envoyer tout ça dans un nouveau fichier youtube.new.png
Image d'origine (youtube.png)
Visu de l'image d'origine sous Gimp
Résultat final youtube.new.png (j'ai ajouté une bordure pour montrer le fond transparent)
Visu du résultat final sous Gimp
Avec la visu sous Gimp, on voit bien l'image d'origine centrée dans le calque transparent (l'ensemble de petits carrés gris clairs et gris foncés)
En espérant avoir répondu à votre problème
NG (non vérifié)
lun, 09/05/2016 - 22:38
Permalien
Merci
Grâce à votre pense-bête j'ai enfin réussi à associer quatre photos en une seule (via la commande montage) et sans bordures (-geometry +0+0 :-)).
ronan
mar, 10/05/2016 - 09:48
Permalien
Merci pour le compliment.
Merci pour le compliment.
GJ (non vérifié)
mar, 24/05/2016 - 19:08
Permalien
Niveaux de gris
Pour la conversion en niveaux de gris, c'est grayscale (et non pas Greyscale)... 50 shades of Grey est passé par là ;)
ronan
mer, 25/05/2016 - 08:29
Permalien
Effectivement
Merci pour la remarque.
Je corrige immédiatement.
jlfh0816 (non vérifié)
dim, 12/03/2017 - 21:28
Permalien
damier en guise de fond transparent
Bonjour,
Lorsque j'utilise la fonction animate d'ImageMagick pour jouer un gif animé qui possède un fond transparent, celui-ci s'affiche systématiquement dans une fenêtre où le fond transparent est remplacé par un damier ...
Par contre, lorsque j'utilise la fonction display du même ImageMagick, les frames du même gif se succèdent, certes à un rythme très très lent, mais tout à fait correctement sur un fond qui cette fois est bien transparent, sans le damier.
Pourquoi diable cette différence d'affichage des mêmes images selon que l'on utilise display ou animate ?
Je vous remercie beaucoup par avance de votre réponse !
(ma configuration est la suivante: Xubuntu 14.04 et 16.04 (64 bits) avec ImageMagick 6.7.7.10-6ubuntu3.5)
ronan
lun, 13/03/2017 - 08:40
Permalien
Bonjour,
Bonjour,
C'est étrange car de mon coté, les deux commandes fonctionnent de la même manière.
Quand j'ai une image avec un fond transparent, celui-ci est affiché avec le fameux damier pour indiqué, justement, que l'image possède un fond transparent, que ce soit avec animate ou avec display.
Mais je dirais que l'important, c'est que l'image soit correctement affichée dans un navigateur, par exemple, avec le fameux fond transparent.
jlfh0816 (non vérifié)
lun, 13/03/2017 - 21:58
Permalien
Bonsoir,
Bonsoir,
...et tout d'abord, merci beaucoup de cette réponse rapide !
Bon, j'en déduis que, en utilisant "display", je dois déjà m'estimer très heureux que mon gif animé garde son fond transparent !
Ceci dit, avec cette fonction "display", la vitesse de défilement des frames est très lente (1 frame toutes les 3 secondes). Est-il possible d'influer sur cette vitesse pour l'augmenter ?
Ou bien est-elle figée et invariable ?
Merci beaucoup d'avance de votre aide,
ronan
mar, 14/03/2017 - 09:41
Permalien
Il est possible de modifier
Il est possible de modifier la vitesse d'animation du gif animé avec l'option delay.
>>> Ajouter l'option -delay num pour paramétrer la vitesse d'animation du gif animé.
num est exprimé en 1/100 seconde.
J'ajouterais que la commande display est utilisée uniquement pour vérifier le résultat.
En général, les gifs animés sont utilisés dans des pages web et le fond transparent est correctement géré.
Sergio (non vérifié)
mar, 17/03/2020 - 13:13
Permalien
PDF
Pour convertir une suite d'image dans un seul PDF :
convert *.jpg resultat.pdf
...Sauf que :
Un sadique a blacklisté cette conversion, et il faut modifier /etc/ImageMagick-6/policy.xml
voir La doc Ubuntu
ronan
mar, 17/03/2020 - 22:07
Permalien
Merci beaucoup pour l'info
Merci beaucoup pour l'info
Ajouter un commentaire