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

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

d.gif

Souvenir d'école

f.gif

 

Commentaires

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 ?

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

$ identify youtube.png
youtube.png PNG 60x60

$ convert youtube.png -size 100x100 xc:none +swap -gravity center -composite youtube.new.png

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

youtube.png 60x60

Visu de l'image d'origine sous Gimp

youtube.png

Résultat final youtube.new.png (j'ai ajouté une bordure pour montrer le fond transparent)

youtube.new.png 100x100

Visu du résultat final sous Gimp

youtube.new.png

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

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 :-)).

Merci pour le compliment.

Pour la conversion en niveaux de gris, c'est grayscale (et non pas Greyscale)... 50 shades of Grey est passé par là ;)

Merci pour la remarque.

Je corrige immédiatement.

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)

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.

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,

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

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

Merci beaucoup pour l'info

Ajouter un commentaire

Filtered HTML

  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
Cette question permet de s'assurer que vous êtes un utilisateur humain et non un logiciel automatisé de pollupostage.
CAPTCHA visuel
Entrez les caractères (sans espace) affichés dans l'image.