Faites de la magie en ligne de commande avec des images
ArticleCategory: [Es gibt verschiedene Artikel Kategorien]
Graphics
AuthorImage:
TranslationInfo:[Autor und Übersetzer]
original in en Katja Socher
en to fr Jean Peyratout
AboutTheAuthor:[Eine kleine Biographie über den
Autor]
Katja est l'éditrice allemande de LinuxFocus. Elle aime Tux, le film et la photo, et la mer. Sa page personnelle se trouve
ici.
Abstract:[Hier sollte eine kleine Zusammenfassung stehen]
Dans cet article nous nous intéressons à quelques formules que les sorciers
d'ImageMagick peuvent utiliser,
associées à une collection d'outils graphiques comme ingrédients de base et à la ligne de commande comme baguette magique.
ArticleIllustration:[Das Titelbild des Artikels]
ArticleBody:
Faisons de la magie
Jadis, les sorciers prenaient leurs ingrédients de base, les mélangeaient ensemble dans un grand chaudron,
agitaient leur baguette magique, prononçaient quelques formules à voix basse... et tout à coup quelqu'un était changé en grenouille.
À notre époque moderne, les sorciers sont, comme n'importe qui d'autre dans la société, hautement spécialisés et leurs grimoires
ne contiennent que quelques formules utiles pour des tâches très spécifiques.
Ainsi ImageMagick n'est pas un livre de formules à usage général. Sous bien des points de vue il ne peut concurrencer The Gimp ou d'autres
logiciels d'infographie, mais il possède quelques caractéristiques spécialisées qui sont très pratiques.
Son vrai point fort repose dans sa capacité à automatiser bon nombre de ses processus quand on travaille avec lui en ligne de commande.
Mais au préalable nous allons divulguer quelques formules afin de vous permettre de jeter un rapide coup d'oeil sur les ingrédients de base :
Les ingrédients de base
ou qu'est-ce que ImageMagick ?
ImageMagick est une collection d'outils graphiques pour travailler avec des images.
Les outils sont l'affichage, l'importation, l'animation, le montage, la conversion, "mogrify", l'identification et la combinaison.
Display: Si vous tapez "display &" une fenêtre d'affichage apparaît et vous pouvez directement
travailler sur l'image. Via le menu (clic gauche dans la fenêtre) vous pouvez ouvrir une image, l'enregistrer ou l'effacer, la renverser ou la faire tourner,
en changer les couleurs ou appliquer certains effets comme l'implosion / explosion ("implode") , l'emboutissage ("emboss"), la mise dans
un cadre et bien d'autres encore.
Avec Import vous pouvez réaliser des copies d'écran de tout votre écran ou de certaines images ou fenêtres seulement.
Animate est un outil d'animation. Vous pouvez choisir une série d'images pour les afficher l'une après l'autre ou bien obtenir une image gif animée.
Avec Montage vous pouvez créer une image sous forme de pavage ou obtenir une image permettant de voir chacune des images
individuelles composant un gif animé.
Convert est un outil très puissant. Vous pouvez convertir le format d'une image, par exemple une image gif en jpg.
Vous pouvez aussi changer la taille d'une image et également appliquer de nombreux effets sur les images, comme l'effet
"dessin à la mine" ("charcoal").
Mogrify est similaire à "convert" à la différence qu'avec mogrify vous écrasez l'image courante alors qu'avec convert et les autres
outils vous devez spécifier un nom sous lequel enregistrer le fichier modifié. Cependant, je ne l'utilise presque jamais.
Identify vous délivre des informations à propos de l'image comme ses dimensions, sa taille, son nom, le format utilisé, etc.
Combine combine deux images ou plus en une autre image. Vous pouvez par exemple intégrer un logo à chaque image.
Pour utiliser les outils, vous tapez leur nom, suivi de l'option que vous souhaitez utiliser, de l'image qui sera manipulée et du nom du fichier sous
lequel vous voulez enregistrer l'image modifiée.
Si par exemple vous voulez transformer en dessin à la mine ("charcoal") l'image tux1.gif avec un facteur de 3 et enregistrer le résultat dans
tux1charcoal.gif vous saisirez :
convert -charcoal 3 tux1.gif tux1charcoal.gif
Après ce coup d'oeil aux ingrédients bruts, essayons maintenant quelques formules :
Quelques formules
Changer la hauteur et la largeur de vos images
Imaginons que vous ayez une pile d'images avec les dernières victimes que vous avez transformées en crapauds
et que vous souhaitiez les mettre sur votre page web. Afin de réduire le temps de chargement, vous souhaitez avoir des images plus petites.
Avec l'outil "convert" vous pouvez rendre vos images plus petites ou plus grandes ou vous pouvez générer un index avec des aperçus (vignettes
ou "thumbnails").
La commande
convert -geometry 60x80 image.gif out.gif
redimensionne l'image image.gif à une largeur de 60 sur une hauteur de 80 et écrit l'image qui en résulte dans un fichier nommé out.gif.
Pour mettre toutes vos images à une dimension de 80 sur 80 d'un coup vous pouvez taper :
#!/bin/sh
for f in $* ;do
convert -geometry 80x80 $f t_$f
echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\"></a>"
done
# end of script
(Saisissez ces lignes avec l'éditeur de votre choix (vi, emacs, nedit, kedit...) et enregistrez le script sous le nom mksmallimage dans votre répertoire personnel.
Ensuite tapez en ligne de commande
chmod 755 /home/katja/mksmallimage
(utilisez le nom de votre répertoire home au lieu de katja) Vous pouvez alors utiliser le script en saisissant
/home/votre_nom/mksmallimage xxx.jpg *.gif
Cela convertira tous les fichiers gif plus le fichier xxx.jpg.
Créer des vues d'ensemble avec des vignettes
Vous avez un CD avec la collection de tous les gens que vous avez changés en grenouilles durant les deux dernières années.
Mais un sorcier rival, très jaloux de vos pouvoirs, réclame la preuve que vous avez même transformé son chien.
Vous voilà bon pour passer la journée à chercher cette photo !
Cela pourrait être évité si vous aviez une vue d'ensemble de toutes les images de votre CD sous forme de vignettes.
Avec ImageMagick il est très facile d'en créer une :
display "vid:*.jpg"
Ceci générera un répertoire visuel de toutes vos images jpg dans le répertoire courant. Ou :
display "vid:grenouille/*"
générera un répertoire visuel de toutes vos images dans votre répertoire grenouille.
Un clic droit sur chacune de ces vignettes ouvre un menu dans le quel vous pouvez choisir "Load" pour voir l'image en grand.
C'est un moyen très facile de créer une vue d'ensemble mais selon votre ordinateur la génération du répertoire de vignettes
peut demander pas mal de temps et consomme beaucoup de mémoire si vous avez beaucoup d'images.
C'est pourquoi nous allons maintenant écrire un petit script htmlthumbnails un peu moins gourmand de ce point de vue,
puis construire une page web depuis laquelle vous pourrez d'un clic sur la vignette obtenir l'image originale.
Le code html ressemblera à ceci :
<a href="file.gif"><img src="t_file.gif" width="60" height="80"></a>
Ici, le fichier original est file.gif et la vignette est t_file.gif.
Écrivons un script qui générera les vignettes et écrira le code html pour nous.
for f in $* ;do
convert -geometry 80x80 $f t_$f
echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\">"
done
Le script ci-dessus fera le tour de toutes les images comme spécifié dans la ligne de commande,
puis générera les vignettes et enfin écrira le code html à l'écran.
Il ne reste plus qu'à copier ce code et à le coller dans notre page web.
Pour un script shell complet, nous allons ajouter un peu de texte d'aide et une vérification d'erreur.
Voilà notre script final, nommé htmlthumbnails :
htmlthumbnails (html pourlire le code),
htmlthumbnails (format texte pour télécharger)
Changer le format d'image
Convert peut changer non seulement la taille d'une image mais également son format.
Pour par exemple transformer une image gif en jpg, la commande est simplement :
convert image.gif image.jpg
Convert utilise l'extension du nom de fichier pour savoir quel format il doit utiliser.
Pour changer le format jpg en gif pour de nombreuses images, utilisez :
for f in $* ;do
if echo "$f" | grep -i "jpg$" > /dev/null ; then
gif=`echo "$f" | sed 's/jpg$/gif/i'`
echo "converting $f to $gif ..."
convert 80x80 $f $gif
else
echo echo "$f is not a jpg file, ignored"
fi
done
ImageMagick reconnaît aussi un grand nombre d'autres formats.
Mettre un logo dans toutes vos images
Nous aimerions ajouter un petit logo comme celui que l'on peut souvent voir sur la droite des images.
Ce logo sera un petit gif transparent. Notre logo devra être placé comme une petite signature
dans le coin inférieur droit de l'image finale comme vous pouvez voir dans l'image de Tux suivante :
Quelle est la commande pour faire ceci ?
L'outil Combine peut être utilisé pour combiner deux images en une nouvelle.
Plusieurs options indiquent au programme comment le faire :
combine -gravity SouthEast -compose Over img.jpg logo.gif stamp_img.jpg
L'option "gravity SouthEast" met le logo.gif dans le coin inférieur droit.
"compose Over" indique que nous remplacerons l'image par le logo aux endroits où ils se superposent.
Pour obtenir un shell script pleinement fonctionnel, insérons la commande dans une boucle for- et ajoutons
un peu de texte pour l'aide et la vérification d'erreur. Voici notre shell script final, nommé stampimages :
stampimages (html pour lire),
stampimages (texte pour téléchargement)
Obtenir des informations sur les propriétés de l'image
Identify affiche des détails sur le type d'une image, sa taille et ses dimensions.
Cela donne par exemple ceci :
identify image.jpg
results in
image.jpg 340x254 DirectClass 13939b JPEG 0.1u 0:01
Qu'est-ce que notre sorcier peut bien faire de cela ? Et bien, pour concevoir de bonnes pages web
qui afficheront les images alors que la page est encore en cours de chargement, vous devez spécifier les
dimensions exactes de toutes vos images. Le code html ressemblera par exemple à ceci :
<img src="image.jpg" width="340" height="254" alt="[image d'exemple]">
Si nos images ont des tailles différentes et que nous ignorons la hauteur et largeur exactes de chacune d'entre elles,
il est possible d'appeler "identify" à notre aide.
Écrivons un script shell qui lira la sortie de "identify" et ensuite imprimera cette ligne.
Les dimensions de l'image sont le deuxième paramètre de la chaîne de sortie du programme identify.
Pour obtenir ce paramètre, utilisons la commande awk :
identify image.jpg | awk '{print $2}'
results in
340x254
Il faut maintenant séparer largeur et hauteur. On peut le faire avec :
echo 340x254 | sed 's/[^0-9]/ /g' | awk '{print $1}'
qui donnera la largeur. La hauteur sera obtenue avec :
echo 340x254 | sed 's/[^0-9]/ /g' | awk '{print $2}'
Ne fixez pas trop votre attention sur les commandes shell exactes.
Si vous ne les comprenez pas complètement, prenez-les telles qu'on vous les donne.
Il y aura un article à propos de la programmation shell dans un prochain numéro de LinuxFocus
dans lequel nous expliquerons tous ces tours. Le script shell final ressemble à ce qui suit :
file=$1
geometry=`identify $file | awk '{print $2}'`
# geometry can be 563x144+0+0 or 75x98
# we need to get rid of the plus (+) and the x characters:
width=`echo $geometry | sed 's/[^0-9]/ /g' | awk '{print $1}'`
height=`echo $geometry | sed 's/[^0-9]/ /g' | awk '{print $2}'`
echo "<img src=\"$file\" width=\"$width\" height=\"$height\">"
Pour obtenir le script shell complet nous ajoutons encore du texte d'aide et la vérification d'erreur.
Voici le script shell final, nommé imgsrcline :
imgsrcline (html pour lecture),
imgsrcline (format texte pour téléchargement)
En jouant avec ImageMagick j'ai trouvé parfois des contradictions entre la documentation et
les fonctionnalités réelles. Quelques-unes des caractéristiques ne sont pas très stables.
Si vous vous en tenez aux choses expliquées ci-dessus vous vous rendrez compte que c'est vraiment pratique.
Les fonctions évoquées dans cet article marchent vraiment.
J'ai utilisé ImageMagick-4.2.9 , ImageMagick-5.2.9 et ImageMagick-5.3.0 et ce que vous avez appris ici fonctionne
quelle que soit la version utilisée.
J'espère que vous avez maintenant une petite idée de ce qu'il est possible de faire avec ImageMagick et que vous
utiliserez ces scripts ou même commencerez à créer vos propres formules.
Amusez-vous bien !
Références
- Installation: ImageMagick est certainement déjà installé sur votre système car il est habituellement inclus dans
toutes les distributions Linux usuelles. Mais dans le cas contraire, ou si vous voulez une version plus récente, vous
pouvez la télécharger depuis :
http://www.imagemagick.org/
- Pour plus d'information à propos des outils de ImageMagick vous pouvez consultez les man pages (tapez par
exemple "man convert" pour avoir plus de détails à propos de l'outil convert) ou lire ces textes sur leur page web.
- Si vous n'êtes pas encore familier de la programmation shell, faites chercher google sur "bash" et vous devriez
trouver différents didacticiels adaptés à vos besoins. Ou attendez le prochain LinuxFocus et lisez l'article qui y sera
consacré à la programmation Shell.