⚠️ Ceci est un site de traduction non officiel, sans lien avec ImageMagick Studio LLC. Pour des informations officielles, consultez la page originale (https://usage.imagemagick.org/index.html).

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

[IM Output]

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:

[IM Output]

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.