Exemples d'utilisation d'ImageMagick
ImageMagick version 7
Ces pages rassemblent des exemples d'utilisation d'ImageMagick (« IM » en abrégé) version 7 depuis la ligne de commande. Pour beaucoup d'entre eux, il existe une écriture qui correspond directement à la version héritée version 6. Elles montrent aussi ce que l'on peut faire avec l'interface de programmation d'applications (API) d'ImageMagick. Elles ont pour ambition d'être la première page que devrait consulter un utilisateur d'IM après avoir lu le concis manuel des options de la ligne de commande (CLI).
Sur les réseaux, la même question « comment fait-on pour… ? » revient sans cesse. Nous espérons que ces pages répondront à la plupart des questions « comment faire » les plus courantes.
Sites connexes : Fred's ImageMagick Scripts / RubbleWebs (utiliser IM CLI depuis PHP) / Snibgo's ImageMagick pages / Site officiel d'ImageMagick
ℹ️ Cette page est une traduction non officielle de usage.imagemagick.org (les IM Examples d'Anthony Thyssen). Pour la traduction française de la documentation d'ImageMagick proprement dite, consultez la documentation japonaise d'ImageMagick.
Exemples pratiques (Practical Examples)
- Utilisation de base
- Commandes de base et manipulation d'images
- Manipulation des fichiers image
- Lecture et écriture des images
- Principaux formats d'image
- Manipulation des images GIF, JPEG et PNG
- Du texte vers l'image
- Convertir du texte en image
- Effets de police composés
- Styles et techniques de rendu des polices
- Annotation des images
- Étiquetage et superposition d'images
- Vignettes et encadrement
- Petites images de référence pour de grandes photos
- Retouche de photos
- Retoucher des photos
- Correction d'objectif
- Corriger la distorsion des photos
- Montage (matrices)
- Index et tableaux d'images
- Calques de plusieurs images
- Combiner plusieurs images
- Bases de l'animation
- Création et étude des animations
- Optimisation des animations
- Réduire la taille des animations GIF
- Modification des animations
- Modifier et fusionner des animations
- Manipulation de la vidéo
- Travailler avec les images de vidéos réelles
- Comparaison d'images
- Comparer deux images ou plus
- Techniques avancées
- Manipulations complexes d'images
- Exemples d'arrière-plans
- Exemples de création d'arrière-plans aléatoires
- Dépôts de distribution
- Liens vers d'autres scripts IM et informations
- Index de référence
- Index rapide d'options particulières
- Scripts auxiliaires
- Scripts shell utilisés dans les exemples
Techniques de base (Basic Techniques)
- Création de canevas
- Créer des canevas ou des images d'arrière-plan
- Bases des couleurs et canaux
- Manipulation des couleurs à bas niveau
- Modification des couleurs
- Modifications courantes des couleurs
- Masquage et suppression d'arrière-plan
- Manipulation du canal alpha et de la transparence
- Réduction des couleurs et tramage
- Réduire le nombre de couleurs
- Recadrage et bordure
- Tranches, découpe, encadrement et rognage
- Redimensionnement et mise à l'échelle
- Agrandir et réduire les images
- Filtres de rééchantillonnage
- Contrôler le redimensionnement des images
- Composition d'images
- Superposer et fusionner deux images
- Dessin sur les images
- Graphiques vectoriels, images MVG et SVG
- Déformations simples d'image
- Inversion, rotation et torsion
- Transformations de distorsion d'image
- Comme dans le palais des glaces d'une fête foraine
- Transformation d'image
- Modifier en profondeur l'apparence d'une image
- Effets de mappage d'image
- Effets de lentille, de verre et d'ondulation
- Flou et netteté
- Flou, accentuation et ombres
- Morphologie
- Utiliser le voisinage des pixels
- Convolution
- Traitement de voisinage par moyenne pondérée
- Transformée de Fourier
- Modifier les images dans le domaine fréquentiel
- Anticrénelage
- Effets et problèmes de l'anticrénelage
- Divers
- Petites choses éparses
- API, scripts et compilation
- Utilisation dans d'autres environnements
- Utilisation sous Windows
- IM sur un PC Windows
- Développement et bogues
- Propositions de développement, anciennes et nouvelles, et bogues
Exemples d'utilisation d'ImageMagick — Introduction
Qu'est-ce qu'ImageMagick (résumé sans détour)
ImageMagick est conçu pour le traitement par lots d'images. Autrement dit, il permet de combiner des opérations de traitement d'image dans des scripts (shell, DOS, Perl, PHP, etc.) pour les appliquer à de nombreuses images, ou de l'utiliser comme sous-système d'un autre outil : application web, outil de traitement vidéo, générateur de panoramas, etc. Ce n'est pas un éditeur d'images à interface graphique.
ImageMagick est avant tout un convertisseur d'image vers image. C'était là son but de conception initial. Il convertit ainsi presque n'importe quel format d'image (dites-nous s'il en existe un qu'il ne sait pas traiter) vers tout autre format d'image.
Mais c'est aussi, en même temps, une bibliothèque d'algorithmes de traitement d'image. On peut y accéder depuis la ligne de commande et les scripts shell/DOS (ce que montrent ces pages d'exemples), ou depuis de nombreux langages de programmation comme C, C++, Perl, Ruby, PHP, et bien d'autres. Voyez l'API d'ImageMagick.
La vitesse n'est pas le point fort principal d'IM ; l'accent est plutôt mis sur la qualité des images produites. Cela ne veut pas dire qu'il ne peut pas convertir des images dans un délai raisonnable, simplement qu'il n'est pas d'une rapidité éblouissante. C'est pourquoi IM peut prendre du temps sur certains traitements, en particulier lorsqu'on cherche à compresser vers un format d'image aux capacités limitées.
ImageMagick traite principalement des images sous la forme d'un tableau rectangulaire de pixels (couramment appelé « matriciel »). Il sait aussi traiter les formats d'image « vectoriels » comme Postscript ou PDF, mais au prix d'une conversion en matriciel à la lecture et de la génération, à l'enregistrement, d'une enveloppe d'image vectorielle autour du matriciel. Il en résulte que les images vectorielles sont souvent mal traitées avec les réglages par défaut. Certaines options permettent toutefois d'améliorer la situation. Voyez Un mot sur les formats d'image vectoriels.
À propos de ces exemples d'utilisation d'ImageMagick
Ces pages prolongent et développent un recueil de trucs et astuces pour ImageMagick que j'ai commencé à écrire en 1993 et que j'ai placé sur le tout nouveau World Wide Web, apparu à peu près au même moment. Pour beaucoup d'aspects d'IM, ce document contient encore des informations qui ne figurent pas dans ces pages. Mais alors que la présente page est conçue pour être lue par d'autres, le recueil d'astuces ne servait qu'à mes propres notes. Il peut donc, par endroits, être vague ou en désordre. Vous êtes les bienvenus pour le parcourir, en tirer des enseignements et m'envoyer vos commentaires.
D'autres exemples ont été extraits ou développés à partir de réponses à des questions d'utilisateurs sur les forums IM, ou proposés comme solutions à divers problèmes.
J'attends avec plaisir les suggestions et les courriels des autres utilisateurs d'IM. De tels courriels conduisent en général à améliorer et enrichir ces pages d'exemples.
L'environnement en ligne de commande
Tous les exemples ont été écrits en supposant l'utilisation de scripts BASH sur un système UNIX, et plus précisément GNU/Linux. Certains exemples emploient donc des boucles « for-do » du shell. De nombreux exemples placent une barre oblique inverse « \ » en fin de ligne pour prolonger la commande sur la ligne suivante. Les commandes longues sont découpées sur plusieurs lignes afin de mettre en évidence les étapes appliquées.
Cela dit, moyennant une légère modification de la manière de traiter certains caractères, ces exemples peuvent aussi être utilisés depuis des scripts batch sous PC Windows. Avec de menus ajustements, on peut aussi les exécuter directement depuis un appel « system » au sein d'un script PHP.
Pour plus de détails sur l'utilisation des commandes ImageMagick dans ces environnements de substitution, voyez Utilisation sous Windows et API et scripts. Les contributions et exemples testés sont les bienvenus.
PerlMagick et les autres API
Tous ces exemples devraient pouvoir s'adapter à l'utilisation de l'API d'IM depuis des langages comme Perl, C, C++, Ruby, PHP, etc. Je recommande de les essayer d'abord en ligne de commande pour s'assurer qu'ils fonctionnent correctement, puis de traduire l'opération vers l'API particulière que vous utilisez.
La situation s'est nettement améliorée avec IM version 6, mais la ligne de commande ne traite en réalité qu'une seule séquence d'images à la fois. L'API, en revanche, n'a pas cette limite : elle peut manipuler plusieurs séquences d'images, séparément ou ensemble, pour réaliser des traitements plus complexes. Cette capacité facilite l'implémentation de ces exemples via l'API d'IM et évite l'enregistrement temporaire d'images dans des fichiers, nécessaire dans de nombreux exemples en ligne de commande. Avec l'API, il suffit d'enregistrer sur disque les seules images permanentes ou semi-permanentes.
Pour l'essentiel, mieux vaut se servir des pages d'exemples comme tremplin pour découvrir ce que l'on peut faire avec ImageMagick, monter d'abord en ligne de commande ce que l'on souhaite réaliser, puis le transposer dans des scripts ou du code d'API plus difficiles à modifier.
Je recommande aussi de commenter abondamment le code d'API et, si possible, d'y indiquer l'équivalent en ligne de commande de ce que l'on cherche à faire. On peut ainsi vérifier et comparer avec les résultats obtenus en ligne de commande. Cela aide à déboguer les problèmes que l'on peut rencontrer par la suite, en particulier lorsque le traitement d'image de la bibliothèque Core ImageMagick est amélioré.
Télécharger les images d'entrée et les résultats
Dans la mesure du possible, j'utilise comme entrée des commandes d'exemple IM des images intégrées à IM (comme « logo: » ou « rose: »), ou je génère l'image d'entrée avec une commande IM. Il m'arrive aussi souvent de réutiliser la sortie d'une commande précédente dans un exemple ultérieur. Vous n'avez donc en général pas besoin de télécharger d'image « de test » pour essayer les exemples par vous-même.
Cependant, ces images générées ou intégrées ne conviennent pas toujours. Lorsque j'utilise une image externe, je réutilise donc cette image d'entrée, ou le résultat d'un exemple précédent, dans les exemples qui suivent au sein de la même section.
Il arrive que l'image source d'origine soit affichée ; pour les images de grande taille, un lien vers l'image source est plutôt fourni. Plus souvent, comme l'entrée est connue ou évidente, seule l'image de résultat finale est montrée.
Presque toutes les commandes d'exemple IM présentées sont exécutées dans le même répertoire web où elles figurent. Autrement dit, la commande que vous voyez est celle qui a réellement servi à produire l'image. En modifiant l'URL de la page, vous pouvez donc télécharger ou consulter les images d'entrée utilisées par l'exemple. Des copies de réserve des images sources externes sont aussi placées dans les sous-répertoires « images » et « img_photos ». Voyez aussi l'exemple Fancy Photo Index de ces images.
Lorsqu'un exemple produit une sortie texte ou des informations sur l'image, celle-ci est enregistrée dans un fichier texte, et une image en est générée pour l'affichage sur la page web. En sélectionnant l'image de la sortie texte, vous accédez par un lien à une copie du texte réellement produit par la commande.
Dans tous ces exemples, en sélectionnant l'image de sortie vous devriez pouvoir télécharger l'image réellement créée par la commande d'exemple. Notez toutefois que tous les navigateurs ne savent pas interpréter l'ensemble des formats d'image utilisés.
Sources des images externes
Au passage, la plupart des images sources utilisées dans ces exemples proviennent de la bibliothèque d'icônes d'Anthony, en particulier des sections tuiles d'arrière-plan, grands cliparts et dragons de la bibliothèque (car j'aime les dragons !). Note : ces pages peuvent être hors ligne, le site web étant en cours de migration progressive vers un nouveau serveur.
Cette bibliothèque est en fait antérieure au WWW. Je l'ai créée en 1991 faute d'images d'icônes de bonne qualité et propres pour le système X Window. L'arrivée du WWW a bien sûr changé la donne, mais ma bibliothèque d'origine existe toujours et, même si elle ne croît plus activement, elle reste disponible comme source d'images.
Certaines images particulières, ou une partie des images plus grandes, ont été apportées par les auteurs des exemples concernés. Ces auteurs sont mentionnés dans la section des contributions ou en bas de page.
Si vous cherchez une image précise, je vous recommande d'en trouver une appropriée via la recherche d'images Google (ou un service similaire). Vous pouvez bien sûr convertir et redimensionner ces images avec IM selon vos besoins. Mais prenez garde aux droits d'auteur si vous envisagez un usage commercial.
Les images PNG sur une page web
De nombreux exemples utilisent des images au format PNG, comme celle montrée à droite de ce texte. Le format d'image PNG prend en charge les images comportant des pixels semi-transparents, une fonctionnalité que peu d'autres formats d'image offrent. C'est aussi un format très bien compris, disponible dans la plupart des programmes d'image et des navigateurs web actuels.
Toutefois, certains navigateurs web ne gèrent pas correctement les images PNG transparentes (en particulier Microsoft Internet Explorer v6). C'est pourquoi j'utilise en général les formats JPEG et GIF pour les images sur le web, et ne réserve le format PNG qu'aux images comportant des pixels semi-transparents, ou lorsque des couleurs exactes sont nécessaires dans des exemples ultérieurs.
Pour faire afficher les images PNG dans le navigateur IE v6, j'utilise une « feuille de style » spéciale recourant à du JavaScript complexe. À ce sujet, voyez PNG transparent pour IE. Techniquement, il ne s'agit pas d'un problème d'ImageMagick, mais uniquement d'IE.
Affichage des images à l'écran
Des problèmes d'affichage peuvent aussi survenir lorsqu'on affiche une image à l'écran. C'est pourquoi je recommande l'utilisation d'une commande comme la suivante, qui dispose un motif « checkerboard (damier) » sous l'image afin de faire ressortir les pixels transparents et semi-transparents.
magick composite -compose Dst_Over -tile pattern:checkerboard image.png x:
L'image affichée dans l'exemple ci-dessus est une image de test spéciale au format PNG, générée par un script shell. Normalement, cette commande affiche son résultat sur votre écran, et non sur une page web comme ici.
En regardant bien, on voit le damier à travers les couleurs semi-transparentes. Pourtant, l'image dans son ensemble est entièrement opaque. Cette technique devrait donc fonctionner sur tous les écrans, navigateurs web et visionneuses d'images.
Depuis IM v6.0.2, le programme « magick display » fait automatiquement quelque chose de similaire. Toutefois, il ne semble pas traiter de cette manière les images utilisant une table de couleurs (c'est-à-dire les GIF). En utilisant le format d'image de sortie « x: » comme ci-dessus, on peut afficher l'image directement à l'écran sans l'enregistrer. Pour plus de détails, voyez Afficher l'affichage de sortie.
Utilisation des polices
Les polices utilisées dans ces exemples proviennent d'une petite collection de polices TrueType que j'ai trouvées et conservées pour mon usage personnel au fil des ans. Certaines étant protégées par des droits d'auteur, je ne peux pas les publier en ligne.
Mais vous êtes les bienvenus pour les remplacer par d'autres polices à votre disposition. Les exemples devraient fonctionner avec n'importe quelle police appropriée disponible sur votre système (au prix de légères variations de la taille des images). La police « Arial » de Microsoft, ou encore « Times-BoldItalic », fonctionnera sur la plupart des systèmes.
Pour vérifier les polices actuellement disponibles dans votre version d'IM, exécutez la commande suivante…
magick -list font
Avertissement : lorsque la police demandée est introuvable, ImageMagick substituait auparavant en silence une police par défaut (généralement Arial ou Times). Il le fait toujours, mais émet désormais un avertissement. Testez vos polices à l'avance pour vous assurer qu'il s'agit bien de la police voulue et non de la police par défaut.
Sur mon système Linux, j'utilise un script Perl spécial, « [**imagick_type_gen**](../static/img/scripts/imagick_type_gen) », pour générer un fichier « type.xml » que j'enregistre dans le sous-répertoire « .magick » de mon répertoire personnel. ImageMagick recherche les polices à l'aide de ce fichier, qui contient une liste de polices au format XML. Ce script « locate » et décrit toutes les polices disponibles sur le système (exécutez d'abord « updatedb » si vous venez d'ajouter de nouvelles polices). Grâce à cette configuration, il suffit d'indiquer le nom de la police voulue, sans avoir à fournir le chemin complet vers un fichier de police particulier.
Par exemple…
# Au lieu d'utiliser la commande suivante…
magick -font $HOME/lib/font/truetype/favorite/candice.ttf \
-pointsize 72 label:Anthony anthony.gif
# on peut employer une étiquette de police plus simple…
magick -font Candice -pointsize 72 label:Anthony anthony.gif
Avant IM v6.1.2-3, le fichier «
type.xml» s'appelait «type.mgk». Soyez-en conscient si vous utilisez une version d'IM plus ancienne.
Les polices utilisées dans ces exemples IM sont répertoriées dans l'exemple de montage des polices d'exemple. Ma préférée est Candice, c'est pourquoi elle est employée assez souvent.
Si la police «
Candice», ou d'autres polices que j'utilise, vous plaisent, vous pouvez vous les procurer sur Free Fonts ou 1001 Fonts .com.
Mises à jour des pages d'exemples
Ces pages d'exemples sont engagées dans un cycle d'amélioration continue. En général, lorsque mon intérêt se porte ailleurs, les ajouts aux pages peuvent s'interrompre pendant de longues périodes.
Ces exemples sont souvent reconstruits avec la dernière version bêta d'IM, ce qui me permet de repérer les changements et bogues susceptibles d'apparaître dans chaque version d'IM avant sa diffusion générale. Cela dit, les images d'exemple présentées sont celles que la commande IM indiquée a produites sur mon système. Si vous obtenez un résultat différent, c'est probablement que votre IM est soit dans une version bien plus ancienne (donc plus boguée), soit mal installé.
À noter que vos courriels, et les discussions à propos d'ImageMagick sur le forum de discussion, conduisent en général à l'ajout de nouveaux exemples ou de sections entières à ces pages. Plus il y a de discussions, meilleurs sont les exemples.
Si vous faites quelque chose d'intéressant avec IM, partagez-le donc et laissez-moi offrir un exemple de votre technique au reste de la communauté IM. Certaines des plus grandes avancées dans l'usage d'IM sont venues d'utilisateurs comme vous.
Remerciements particuliers
Je remercie tout particulièrement Cristy, qui a consacré des mois de travail sans relâche aux mises à niveau et corrections de bogues, et qui a supporté mes suggestions saugrenues… en particulier mes grandes propositions concernant le traitement de la ligne de commande, les parenthèses, les opérateurs de séquences d'images et le traitement des animations GIF.
Il a fait un travail remarquable pour faire de la version 7 le meilleur programme de traitement d'image en ligne de commande, à la pointe de ce qui existe. La plupart des utilisateurs ne lui en témoigneront aucune reconnaissance, mais j'apprécie sincèrement, moi, les efforts qu'il a consacrés à IM.
Merci aussi à Gabe Schaffer, qui m'a beaucoup aidé dans les discussions sur le format et la bibliothèque JPEG, l'opérateur de matrice affine et, plus généralement, sur le Magick Vector Graphics.
À Glenn Randers-Pehrson, qui a écrit le module codeur PNG et s'intéressait à la réduction des couleurs et au tramage. C'est lui qui a, le premier, ajouté le tramage « halftone » à IM, que j'ai ensuite révisé et étendu pour ajouter de nouveaux tramages dans le fichier de configuration du tramage ordonné.
Et enfin, merci au très grand nombre de personnes qui, en général, rôdent sur les forums d'utilisateurs d'IM avec leurs problèmes, suggestions et solutions. Beaucoup d'entre elles figurent désormais, tout au long des IM Examples, parmi les contributeurs d'idées et de suggestions.
Merci également à ceux qui répondent régulièrement aux questions sur le forum. Par exemple « Bonzo » et son site web RubbleWebs, qui détaille comment utiliser les commandes IM depuis des scripts PHP. Ou encore « scri8e » et son site web Moons Stars, consacré au traitement des scintillements et des étoiles. Merci aussi à Pete « el_supremo ».
Je remercie tout spécialement Fred Weinhaus. Chercheur des premières heures du traitement d'image, il m'a grandement aidé dans la première implémentation de l'opérateur de distorsion d'image générale. Les scripts ImageMagick de Fred sont consultables sur le site ImageMagick de Fred et servent souvent de preuve de concept pour de futurs ajouts à IM.
À Nicolas Robidoux, spécialiste du traitement d'image numérique. Il a refondu le rééchantillonnage par moyenne pondérée elliptique et a considérablement amélioré la sortie de la distorsion d'image générale.
Et enfin, à tous les nombreux utilisateurs d'ImageMagick qui, sur les forums et sur le web, m'ont permis de montrer à d'autres les commandes IM qu'ils ont utilisées dans le cadre de tel ou tel projet. Votre volonté et votre franchise à partager vos découvertes méritent à tous des éloges.
Sur ce, « assez bavardé », allons voir quelques exemples.
![[IM Output]](../static/img/images/test.png)
![[IM Output]](../static/img/test_undertile.jpg)