Pense-bête ImageMagick
ImageMagick permet de réaliser énormément de tâches pour modifier ou convertir des images. Ce n'est pas toujours facile de se souvenir des commandes idoines pour utiliser ce couteau suisse de la manipulation d'images, d'où la raison de ce pense-bête.
mogrify vs convert
Les deux commandes peuvent s'utiliser de manière quasiment indistincte, mais mogrify est mieux adaptée à des modifications sur un ensemble de fichiers tandis que convert se destine à la modification d'un fichier. Il est possible malgré tout de faire l'un ou l'autre avec les deux commandes, comme le montrent les exemples ci-dessous.
Redimensionner des images
Il est facile de redimensionner une série d'images pour les harmoniser (en les convertissant, au passage, dans un même format) avec l'option -resize. Pour obtenir des images avec une même hauteur, on peut utiliser -resize x[hauteur], pour avoir une même largeur, -resize [largeur]x, avec les dimensions données en pixel. Il est par ailleurs possible de conserver le nom de l'image en utilisant l'option -set filename:base "%[base]".
Voilà un exemple pour redimensionner un ensemble d'images avec une hauteur constante de 100 pixels :
convert ../{image-pattern} -resize x100 -set filename:base "%[base]" "%[filename:base]_100.png"
Conversion de fichiers
mogrify et convert permettent simplement de réaliser des conversions de fichiers ; pour modifier la qualité de l'image il est possible de jouer sur la résolution en dpi avec l'option density (à 72 par défaut).
Voici un exemple pour convertir des fichiers EPS en PNG :
mogrify -format png -density 150 *eps
Réaliser des animations
ImageMagick permet de réaliser simplement des animations — sous forme de GIF animés — à partir d'une série d'images. Il est possible de fixer le délai entre chaque image (et donc définir un équivalent de framerate) avec l'option -delay.
Voici un exemple simple :
convert -delay 20 $(ls *png) animation.gif
Et si on veut réaliser une animation en réalisant une sélection sur les fichiers disponibles :
convert -delay 20 $(ls *png | head -n40) animation.gif
Retirer des images d'une animation
La première étape est de récupérer les images à partir de l'animation :
convert animation.gif +adjoin temp_%02d.gif
Ensuite, on peut sélectionne une image toutes les n images avec une boucle for sur l'ensemble des images. Par exemple, on peut vérifier que l'itérateur est un multiple de 2, si c'est le cas, on le copie dans un nouveau fichier :
j=0; for i in $(ls temp_*gif); do if [ $(( $j%2 )) -eq 0 ]; then cp $i sel_`printf %02d $j`.gif; fi; j=$(echo "$j+1" | bc); done
Si on veut garder les images dont le numéro n'est pas divisible par 2, on peut utiliser -ne au lieu de -eq.
Il ne reste ensuite plus qu'à créer la nouvelle animation :
convert -delay 20 $( ls sel_*) new_animation.gif