[LinuxFocus-icon]
Sommaire  |  Carte  |  Index  |  Recherche

Nouvelles | Archives | Liens | A propos
Ce document est disponible en: English  Castellano  Deutsch  Francais  Nederlands  Portugues  Russian  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

[Photo de l'auteur]
par Katja Socher

L´auteur:

Katja est l'éditrice allemande de LinuxFocus. Elle aime Tux, le film et la photo, et la mer. Sa page personnelle se trouve ici.


Sommaire:

 

Faites de la magie en ligne de commande avec des images

[Illustration]

Résumé:

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.



 

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.

[visual image directory]


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. [linuxfocus stamp]

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 :

[Tux avec logo]

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

 

Discussion sur cet article

Chaque article possède sa page de discussion. Vous pouvez y soumettre un commentaire ou lire ceux d´autres lecteurs:
 page de discussion 

Site Web maintenu par l´équipe d´édition LinuxFocus
© Katja Socher, FDL
LinuxFocus.org

Cliquez ici pour signaler une erreur ou envoyer un commentaire à Linuxfocus
Translation information:
en -> -- Katja Socher
en -> fr Jean Peyratout

2001-07-28, generated by lfparser version 2.17