⚠️ 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/basics/index.html).

Exemples ImageMagick -- Utilisation de base

Nous expliquons ici en détail le traitement de la ligne de commande que suit IM, certaines des nouvelles capacités de traitement d'image, les idées, la philosophie et la méthodologie, ainsi que ce qui se passe réellement en interne. Avec ces connaissances de fond, le reste des pages d'exemples fournies deviendra beaucoup plus clair. Même si vous n'utilisez que l'interface de programmation d'application (API), cette section mérite d'être connue et comprise.


Traitement de la ligne de commande ImageMagick

Pourquoi le style de la ligne de commande a-t-il changé ! ou...

Le problème des versions précédentes d'IM

Dans les versions majeures précédentes d'ImageMagick (version 5.5.7 et antérieures), l'interface en ligne de commande de la bibliothèque IM était sujette à des problèmes liés à l'ordre dans lequel les opérations étaient effectuées. C'était assez aléatoire et déroutant pour quiconque essayait de comprendre ce qui se passait réellement. De plus, ce qui fonctionnait une fois pouvait ne pas fonctionner dans le même ordre une autre fois, l'auteur d'IM se battant constamment avec l'interface pour qu'elle fonctionne comme les gens s'y attendaient. La cause du problème était qu'ImageMagick suivait un style de ligne de commande UNIX assez standard...

**command  [options]  input_image   output_image**

Avec le temps, cela a commencé à poser des problèmes, car les images sont des objets complexes avec un nombre énorme d'opérations qui peuvent être effectuées sur elles, impliquant souvent d'autres images. En conséquence, la forme ci-dessus s'est lentement étendue pour devenir...

**command  [options] image1 [options] image2 [options]  output_image**

Cela fonctionnait et constitue le style de base utilisé dans la version 5.5.7. Les diverses opérations sur les images telles que «[-negate](https://imagemagick.org/command-line-options/#negate)», «[-resize](https://imagemagick.org/command-line-options/#resize)» et «[-crop](https://imagemagick.org/command-line-options/#crop)», etc., pouvaient apparaître soit avant, soit après l'image à laquelle elles devaient s'appliquer. Par exemple, sous la version 5.5.7, les deux commandes suivantes étaient toutes deux valides et faisaient la même chose.

  magick -negate  image.gif   output.gif

  magick  image.gif  -negate  output.gif

Le problème survenait lorsqu'on traitait deux opérations de traitement d'image ! Par exemple...

  magick -size 40x20 xc:red  xc:blue \
          -append   -rotate 90    append_rotate.gif

[IM Output] Le résultat (dans IM v5.5.7) était que les deux images d'entrée étaient d'abord pivotées, puis assemblées, produisant une image comme... C'est-à-dire que l'opérateur «[-rotate](https://imagemagick.org/command-line-options/#rotate)» était appliqué AVANT le «[-append](https://imagemagick.org/command-line-options/#append)», ce qui n'est probablement pas ce que l'utilisateur voulait.
Avec ImageMagick version 6, les opérateurs sont toujours appliqués dans l'ordre de la ligne de commande tel que donné par l'utilisateur.
[IM Output] Ainsi, l'exemple précédent dans IMv7 donnera : les deux images étant d'abord assemblées, puis ce résultat étant pivoté ; produisant ceci...
Si l'utilisateur voulait réellement effectuer les rotations avant l'assemblage, il peut explicitement demander à IM v6 de le faire dans cet ordre.

  magick -size 40x20 xc:red  xc:blue \
          -rotate 90  -append    append_rotate_bad.gif

Ce genre de contrôle précis était tout simplement hors de portée des versions précédentes d'IM, et aurait probablement nécessité un pipeline ou des sauvegardes d'images intermédiaires pour y parvenir. La solution au problème a malheureusement nécessité une mesure drastique et une certaine incompatibilité. D'un autre côté, presque toutes les commandes « simples » qui fonctionnaient dans IM version 5 fonctionnent comme on s'y attend dans IM version 6. En substance, l'utilisation de la ligne de commande dans les versions antérieures à la version 6 était mal définie et, à mon avis, défectueuse, produisant de nombreux résultats étranges et inattendus.

Syntaxe de commande IMv7

Notez qu'aucune « opération » ne devrait être donnée avant qu'au moins une image ne soit lue ou créée. En fait, vous pouvez considérer une « lecture/création d'image » comme une opération elle aussi. Après tout, c'est vraiment une opération de traitement d'image, celle de traduire une image dans un fichier en une image en mémoire. La bonne façon de procéder dans IMv7 est donc de lire l'image, de la traiter, puis d'utiliser l'argument final d'« écriture implicite » pour écrire le résultat. C'est-à-dire...

**command  "image" { -operation }... "output_image"**

Bien sûr, certains paramètres peuvent être nécessaires pour contrôler la lecture de l'image et doivent être donnés avant de lire réellement l'image (voir ci-dessous pour la signification d'un paramètre). Ainsi, la syntaxe IMv7 suit fondamentalement ce qui suit...

**command { [settings] [operation] }...  "implict_write"**

La partie entre «{...}» étant répétée avec autant de « lectures » ou d'« opérations » que vous le souhaitez ou en avez besoin. Et «[operation]» étant soit une lecture ou création d'image, soit une opération de traitement d'image qui « fait réellement quelque chose ». Et vous les feriez dans l'ordre exact dans lequel vous voulez traiter les images.

Types d'options - Opérateurs et Paramètres...

Un résumé de ce qui suit est désormais également disponible sur le Site web d'ImageMagick à la page L'anatomie de la ligne de commande. Toutes les options de ligne de commande se répartissent désormais en deux groupes fondamentaux : les « paramètres » et les « opérateurs d'image ». Les paramètres définissent des valeurs, les opérateurs effectuent réellement une action. Options de paramétrage

| sont des options de ligne de commande qui ne font qu'enregistrer des informations, qui seront utilisées plus tard par d'autres « opérateurs d'image ». C'est-à-dire qu'elles ne font rien, sauf définir une valeur, à utiliser plus tard. Beaucoup des options ont à la fois un style «-» et un style «+». Ce dernier est généralement utilisé pour désactiver le paramètre, ou le réinitialiser à son état par défaut normal. Cela vous permet de supprimer l'effet d'un paramètre rapidement et simplement. Par exemple, «[+gravity](https://imagemagick.org/command-line-options/#gravity)» ramènera le paramètre de gravité à son état initial « gravity none ». Les paramètres peuvent être davantage divisés en un certain nombre de sous-catégories... Paramètres d'opérateur qui contrôlent le fonctionnement des opérateurs ultérieurs. Ils définissent les couleurs et les polices qui peuvent être utilisées par un opérateur, contrôlent le placement des images et du texte, la recherche de couleur dans les images sources, contrôlent la méthode de traitement de certains des opérateurs les plus complexes, etc., etc., etc..

-dither -gravity -fill -background -bordercolor -stroke -font -pointsize -strokewidth -box -virtual-pixel -interpolate

La plupart des options de paramétrage appartiennent à cette catégorie. Paramètres d'entrée sont spécifiquement limités au contrôle de la création des images qui sont créées ou lues. Ils sont généralement utilisés pour attribuer ou remplacer des métadonnées spécifiques à associer aux image(s) créée(s) après que ce paramètre ait été défini. elles sont créées ou lues depuis un fichier externe.

-label -delay -dispose -page -comment -size

Rappelez-vous, ils ne sont appliqués QUE lorsqu'une image est créée ou lue, et sont sinon complètement ignorés. L'opérateur spécial «[-set](https://imagemagick.org/command-line-options/#set)» a été fourni pour modifier les métadonnées des images après leur lecture en mémoire, ou après un traitement quelconque. Voir Métadonnées ci-dessous pour plus de détails. Paramètres de sortie qui ne sont utilisés que lors de l'écriture ou de la sauvegarde des images sur le disque. Bien qu'ils puissent être donnés n'importe où sur la ligne de commande, ils ne sont appliqués que lorsque l'image est écrite, soit par l'opération par défaut sur le dernier argument de nom de fichier d'image, soit via une opération «[-write](https://imagemagick.org/command-line-options/#write)» ou «[-identify](https://imagemagick.org/command-line-options/#identify)».

-quality -loop -compression -format -path -transparent-color

S'ils ne sont pas définis, ou désactivés (en utilisant leur forme plus «+»), une valeur par défaut appropriée sera utilisée. Généralement, cette valeur par défaut est une valeur enregistrée de la dernière image lue. Quelques « paramètres d'opération » tels que la couleur «[-background](https://imagemagick.org/command-line-options/#background)» actuelle sont également attribués à l'image, si le format de fichier l'exige. Paramètres de contrôle et de débogage qui contrôlent la manière dont IM, en général, effectue ses tâches. Cela inclut...

-verbose -debug -warnings -quiet -monitor -regard-warnings

Voir Contrôles d'opération IM ci-dessous, pour plus d'informations sur ces paramètres spéciaux.

Opérateurs d'image
| Sont des arguments de ligne de commande qui modifient l'image (ou les images) d'une manière ou d'une autre. Ils sont exécutés immédiatement lorsqu'ils sont rencontrés, et peuvent utiliser d'autres « options de paramétrage » qui ont été données précédemment sur la ligne de commande. Ces opérateurs peuvent être regroupés en quelques sous-catégories... Opérateurs de création d'image qui liront des images depuis un fichier ou un pipeline, ou généreront de nouvelles images. Cela inclut...

image.png xc: canvas: logo: rose: gradient: radial-gradient: plasma: tile: pattern: label: caption: text:

En tant qu'« opérateurs », ils sont eux aussi exécutés immédiatement lorsqu'ils sont rencontrés sur la ligne de commande. Ils ajoutent seulement de nouvelles images à celles déjà en mémoire, mais ne touchent pas celles lues précédemment. Bien sûr, étant des opérateurs, tous les « paramètres » définis précédemment leur seront appliqués. Notamment les Paramètres d'entrée, utilisés pour contrôler l'entrée depuis le fichier ou le flux de fichier. Par exemple «[-size](https://imagemagick.org/command-line-options/#size)», qui indique la taille de l'image que vous voulez créer, ou les paramètres qui définissent ou remplacent les métadonnées d'image telles que «[-delay](https://imagemagick.org/command-line-options/#delay)» et «[-page](https://imagemagick.org/command-line-options/#page)». Opérateurs simples de traitement d'image modifieront toutes les images qui ont déjà été lues en mémoire. Chaque image est modifiée séparément de toutes les autres. Ils incluent des opérations telles que...

`-crop -repage -border -frame -trim -chop -draw -annotate -resize -scale -sample -thumbnail -magnify -adaptive-resize -liquid-resize -distort -morpohology -sparse-color -rotate -swirl -implode -wave -flip -flop -transpose -transverse -blur -gaussian-blur -convolve -shadow --radial-blur -motion-blur -sharpen -unsharp -adaptive-sharpen -adaptive-blur -noise -despeckle -median -negate -level -level-color -gamma -auto-level -auto-gamma -sigmoidial-contrast -normalize -linear-stretch -contrast-stretch -colorize -tint -modulate -contrast -equalize -sepia-tone -solarize -recolor -opaque -transparent -colors -map -ordered-dither -random-dither -raise -paint -sketch -charcoal -edge -vignette -emboss -shade -poloroid -encipher -decipher -stegano -evaluate -function -alpha -colorspace -separate

Et probablement de nombreux autres opérateurs que j'ai oubliés ! (ou qui ont été ajoutés)`

Parce que tous les opérateurs d'image sont exécutés immédiatement lorsqu'ils sont rencontrés sur la ligne de commande, ils doivent être donnés après les images sur lesquelles ils doivent opérer, qui ont été lues en mémoire. Si plus d'une image est présente, toutes les images sont traitées, une à la fois, en séquence. Vous devrez donc faire attention aux image(s) que vous avez dans la liste d'images courante. Notez qu'il est possible que certains de ces opérateurs génèrent plusieurs images. Par exemple «[-crop](https://imagemagick.org/command-line-options/#crop)» pourrait générer plusieurs « tuiles » d'image, ou «[-separate](https://imagemagick.org/command-line-options/#separate)» qui divise les images en images de canaux séparés. Vous pourriez donc vous retrouver avec plus d'images en mémoire. Mais toutes ne prennent qu'une seule image à la fois en entrée. Notez que de nombreuses API n'appliquent l'opération équivalente qu'à la première image de la liste d'images donnée. C'est-à-dire qu'elles peuvent ne pas boucler sur chaque image. Les commandes «magick» et autres commandes CLI (interface en ligne de commande) appliquent cependant l'opérateur à chaque image de la liste d'images courante à tour de rôle. Opérateurs sur liste multi-images sont particuliers en ce qu'ils modifient toute la liste d'images courante comme une seule entité. Ils peuvent remplacer toute la liste par une seule image combinée, ou modifier chaque image en fonction des autres images trouvées avant ou après elle. Ils sont utilisés pour la composition alpha, la gestion d'animation, la gestion des canaux de couleur, etc...

-append -flatten -mosaic -layers -composite -combine -fx -coalesce -clut -evaluate-sequence mean -evaluate-sequence

Rappelez-vous, toute la liste est traitée comme une seule entité, et certaines images peuvent être supprimées ou remplacées. La plupart des opérateurs ci-dessus fusionnent toutes les multiples images données en une seule image finale. La méthode Composition de couches est actuellement le seul opérateur qui divise la liste d'images courante en deux listes d'images complètement distinctes, avant de les fusionner pour former une liste d'images entièrement nouvelle. Il effectue la division en cherchant l'image spéciale «null:» quelque part dans la liste d'images courante. Aucun de ces opérateurs ne peut être utilisé dans une commande «[mogrify](#mogrify)», car cette commande traite une liste d'images d'entrée (données à la fin) comme des images individuelles. Opérateurs de pile d'images affectent l'ordre de la liste des images actuellement en mémoire. Plus précisément, ils fournissent un traitement spécial « en marge » des images. Ils sont à bien des égards similaires à l'Opérateur sur liste d'images précédent, mais ils ne modifient pas réellement les images elles-mêmes, seulement la façon dont elles sont disposées en mémoire.

( ) -delete -insert -swap -reverse -duplicate -clone

Notez que les parenthèses «(» et «)» peuvent nécessiter un échappement par barre oblique inverse ou une mise entre guillemets, pour éviter qu'un sens spécial ne leur soit donné par l'interface en ligne de commande du shell (CLI). Aucun de ces opérateurs ne peut être utilisé dans une commande «[mogrify](#mogrify)», car cette commande traite une liste d'images d'entrée (données à la fin) comme des images individuelles. Opérateurs spéciaux divers sont des opérateurs qui font des choses de manière inhabituelle ou non standard (par rapport à ce qui précède).

-geometry -version -list -bench -concurrent -preview

L'opérateur «[-geometry](https://imagemagick.org/command-line-options/#geometry)» est particulier car c'est le seul opérateur qui n'affecte qu'une seule image (la dernière) de la liste d'images, plutôt que d'affecter toutes les images d'une manière ou d'une autre. Il n'est fourni que pour la compatibilité ascendante et les besoins spéciaux de composition alpha. Voir Geometry, redimensionner seulement la dernière image pour plus de détails. Les deux autres «[-version](https://imagemagick.org/command-line-options/#version)» et «[-list](https://imagemagick.org/command-line-options/#list)» sont des opérateurs générateurs d'information, et font qu'IM quitte explicitement, après avoir retourné l'information demandée. Voir Contrôles spéciaux IM ci-dessous, pour plus d'informations sur ces options. Certaines options pourraient même faire que toute la commande soit exécutée plusieurs fois. Fondamentalement, elles sont gérées spécialement d'une manière étrange et inhabituelle. Généralement, elles ne sont pas utilisées sauf dans des situations spéciales ou pour récupérer des informations globales spécifiques.
J'espère que la séparation des options en paramètres et opérateurs est claire, car elle est vitale pour la façon dont IM fonctionne désormais. Rappelez-vous, sous la version 6 d'ImageMagick...

Les Paramètres sont enregistrés d'une manière ou d'une autre pour une utilisation ultérieure,
tandis que les Opérateurs sont appliqués immédiatement aux images.

C'est ce qui rend la version 6 différente de toutes les versions précédentes d'IM. Toutes les options sont définies comme étant soit un « paramètre » soit un « opérateur », et l'ordre déterminera exactement quand, et à quelles images, l'option sera appliquée. La Référence des options des Exemples IM peut être utilisée pour identifier ce qui est un « paramètre » et ce qui est un « opérateur ».

Exemple concret d'une commande IM

Examinons un exemple, et comment il sera traité par IM version 6. |

  magick eye.gif news.gif -append    storm.gif tree.gif \
           -background skyblue +append    result.gif

[IM Output]
Décomposons cela et regardons ce qu'IM v6 fait... Argument | | Action effectuée | Images
---|---|---|---


magick | Initialise et crée une « liste d'images » vide | séq. vide
eye.gif | Lit l'image et l'ajoute à la fin de la liste d'images courante | 1 image
news.gif | Ajoute une deuxième image à la liste (maintenant avec deux images) | 2 images
-append | Prend toutes les images de la liste courante et les assemble verticalement.
Toutes les images sont remplacées par une seule image. | 1 (fusionnée)
storm.gif | Ajoute une autre image à la liste d'images | 2
tree.gif | Et une autre | 3
-background skyblue | Définit une « couleur d'arrière-plan » à utiliser plus tard.
Aucune modification n'est apportée aux images. | 3
+append | Joint horizontalement les 3 images de la liste
La couleur d'arrière-plan courante est utilisée pour remplir l'espace vide | 1 (fusionnée)
result.gif | Comme c'est le dernier argument, une opération -write implicite est effectuée avec cet argument. La seule image de la liste courante est écrite en utilisant le nom de fichier donné, qui définit aussi le format de fichier image à utiliser. | écrite
Comme vous pouvez le voir, le traitement de la ligne de commande dans ImageMagick version 6 est très direct et logique, rendant le résultat prévisible. Et c'est tout l'intérêt...

Style de ligne de commande hérité (legacy)

Du fait que de nombreux très vieux scripts IM utilisent une commande avec un seul opérateur d'image de la forme...

**command  -operator  input_image   output_image**

C'est-à-dire que vous spécifiiez un opérateur d'image avant de lire réellement l'image à laquelle l'opérateur sera appliqué. Pour gérer cette situation héritée, IM enregistrera tous les opérateurs d'image qu'il voit, et les appliquera à la première image lorsqu'elle sera finalement rencontrée sur la ligne de commande. C'est-à-dire que ce qui précède fonctionnera comme si vous aviez écrit l'opération à la manière IMv7...

**command  input_image   -operator  output_image**

Par exemple, cette commande héritée IMv5 (gestion d'options UNIX).... |

  magick -flip  storm.gif   cmd_flip_legacy.gif

[IM Output]
Produira le même résultat que cette commande IM version 6... |

  magick storm.gif -flip  cmd_flip_postfix.gif

[IM Output]
Le style de ligne de commande hérité fonctionne, mais présente les mêmes problèmes qui ont affligé IM version 5 (voir Pourquoi le style de la ligne de commande a-t-il changé ci-dessus). Tous les paramètres sont appliqués avant la première lecture, et tous les opérateurs sont simplement mis de côté pour être exécutés lorsque la première image est lue (et seulement sur la première image). Il n'y a également aucune garantie que l'ordre de plusieurs opérateurs sera le même que l'ordre que vous donnez, bien qu'il soit probable qu'ils seront appliqués dans cet ordre. De plus, comme les opérateurs sont mis de côté jusqu'à ce que la première image soit réellement lue, vous pourriez constater que répéter une commande plusieurs fois avant de lire l'image peut faire « disparaître » certaines des commandes antérieures. Ce n'est pas un bug, mais une mauvaise utilisation des capacités héritées d'IM. Ce style de ligne de commande n'est destiné qu'au support des versions anciennes, et est donc déprécié, et devrait être évité dans la mesure du possible. Tout script contenant cet ancien style devrait également être mis à jour pour effectuer les lectures d'image avant les opérateurs que vous voulez leur appliquer. | Le support hérité se poursuivra dans IM version 7, qui inclut une commande permettant le traitement en une seule passe des lignes de commande. Cela lui permet de lire réellement les options de traitement d'image depuis des fichiers de script et même un pipeline. Cependant, une technique de traitement en une seule passe ne permettra pas la mise de côté d'opérateurs AVANT de lire une image à laquelle les appliquer. En fait, la commande «magick» produira des erreurs de type 'no image' si vous essayez d'utiliser un opérateur sans image en mémoire.
---|---

Ligne de commande vs API

Il existe quelques différences majeures entre IM en ligne de commande et l'utilisation des API Magick, telles que PerlMagick, RMagick, PHP IMagick et MagickWand.

Une seule liste d'images active
La ligne de commande n'a jamais qu'une seule liste d'images sur laquelle on peut travailler à un instant donné. Vous pouvez « empiler » ou sauvegarder temporairement une liste d'images (voir Parenthèses et MPR : Registres mémoire nommés). Vous pouvez même « cloner » (faire une copie efficace) des images de la dernière liste « empilée ». Mais vous ne pouvez pas réellement travailler sur deux de ces listes en même temps. Les API d'autres langages, en revanche, vous permettent d'avoir autant de listes d'images ou de « wands » séparés que vous le souhaitez. En fait, vous sauvegardez généralement chaque image comme un wand séparé (liste d'images et paramètres) pour un meilleur traitement, et ne fusionnez l'image dans une liste que selon les besoins ou dans le cadre de l'étape finale. Vous pouvez aussi travailler dessus dans n'importe quel ordre, et les stocker dans des bases de données ou d'autres structures de données, pour le tri ou la comparaison ultérieure. Sur la ligne de commande, cependant, une seule liste d'images signifie que vous ne pouvez pas faire les opérations dans n'importe quel ordre, mais que vous essayez généralement de faire les choses dans une séquence plus logique, en terminant complètement chaque étape de traitement d'image au fur et à mesure. En gros, cela signifie qu'il est beaucoup plus difficile de « revenir en arrière » ou de changer quelque chose plus tard, en utilisant les résultats d'un ensemble d'opérations pour sélectionner ou modifier quel ensemble d'opérations de traitement devrait être effectué ensuite. Il est particulièrement plus difficile de fusionner ou d'entrelacer (mélanger) deux listes d'images complètement distinctes en un tout logique. Cependant, certaines techniques ont été mises au point pour vous permettre de le faire depuis la ligne de commande. Par exemple, voir Composition alpha multi-couches de listes d'images.
Accès direct aux données de pixels
Là encore, vous pouvez effectuer un certain traitement mathématique et une fusion des données de pixels depuis la ligne de commande, mais vous ne pouvez pas facilement rechercher des attributs, ni lire et modifier un pixel ou une zone spécifique en utilisant l'interface en ligne de commande. Vous pouvez fusionner et modifier mathématiquement les données de pixels des images en utilisant l'Opérateur d'image FX spécial, mais c'est généralement limité à la transformation d'images entières, et c'est très très lent. Pour faciliter les choses, de nombreuses opérations courantes développées par les utilisateurs avec l'opérateur FX ont maintenant été intégrées à IM, créant des choses comme les Tables de correspondance de couleur, les Fonctions mathématiques Evaluate et les Fonctions à arguments multiples. Ainsi que l'Opérateur général de distorsion d'image, et quelques Méthodes de composition d'image spéciales. Les API peuvent manipuler les images de manière beaucoup plus directe, vous permettant de créer vous-même une opération unique beaucoup plus facilement, à la pleine vitesse fournie par le langage de l'API.
Traitement conditionnel
L'interface en ligne de commande d'IM ne peut pas facilement modifier les images en fonction d'un attribut dérivé de l'image. Par exemple, il est très difficile de traiter les images différemment selon que l'image utilise un arrière-plan clair ou un arrière-plan sombre. Oui, vous pouvez effectuer quelques actions conditionnelles limitées et spécifiques en utilisant l'Opérateur d'image FX, ou demander à IM d'ajuster (faire pivoter) l'Orientation d'une image selon certaines conditions, ou seulement réduire et jamais agrandir lors du Redimensionnement des images. Mais ce ne sont que des traitements de conditions spéciales bien connues et courantes. La seule façon vraiment pratique de faire du traitement conditionnel est d'utiliser des commandes séparées et des fichiers temporaires. Pour un exemple de ceci, voir le Script Jigsaw bien commenté. Les API, en revanche, peuvent effectuer ce type de traitement conditionnel, tout en conservant toutes les images concernées en mémoire, prêtes à poursuivre le traitement en fonction des conditions spécifiques, comme et quand vous en avez besoin.
Traitement en boucle
Vous ne pouvez pas non plus simplement boucler sur les images de manière contrôlée, ni facilement modifier le traitement en fonction de l'image de la séquence en cours de traitement. C'est-à-dire que vous ne pouvez pas simplement faire quelque chose de différent à chaque image en fonction du numéro de « scène » de l'image, ou des résultats des images précédentes. Par exemple, dessiner du texte à différentes tailles, ou flouter progressivement une image, ou générer une liste d'animation en une seule commande. Oui, vous pouvez modifier des images spécifiques dans une liste d'images. Par exemple, voir Modification image par image d'une animation. Mais vous devez savoir combien d'images se trouvent dans la liste d'images, et « dérouler » la boucle pour traiter chaque image de la liste séparément. La seule façon vraiment pratique de boucler sur les images depuis la ligne de commande est d'écrire les images individuelles comme des fichiers image séparés (voir Écrire plusieurs images) et de les traiter une à la fois dans une boucle scriptée externe. Par exemple, voir le script shell conçu pour Diviser une image verticalement. Alternativement, vous pouvez générer les images en utilisant une boucle de script shell, et rediriger le résultat dans une commande finale pour les fusionner en l'image ou la séquence d'images finale. Pour un exemple de ceci, voir Exemples d'images en couches, ou les divers générateurs de scripts shell d'Animations d'images déformées. Les API, en revanche, n'ont aucun problème pour boucler sur de multiples images, que ce soit dans une seule liste d'images, ou même plusieurs listes d'images, ou même avec tout un tableau ou une structure de données de listes d'images. Elles peuvent aussi conserver toutes les images en mémoire, prêtes pour l'étape finale de combinaison, sans pipeline ni fichiers temporaires.

Si votre application doit pouvoir faire l'une de ces choses (bien que peu d'applications aient réellement besoin d'aller aussi loin), alors une API peut être un meilleur choix. Le programme «[magick conjure](#conjure)» (voir ci-dessous) a été conçu à l'origine pour permettre une meilleure utilisation scriptée d'ImageMagick, permettant l'usage de listes d'images multiples. Les améliorations apportées à IM v7 «magick» ont vu cette API expérimentale tomber en désuétude, bien qu'elle soit toujours disponible et toujours développée.

Gestion des arguments

Au-delà des noms de fichiers et des options sur la ligne de commande, il n'y a que quelques styles fondamentaux d'arguments d'option utilisés.

  • Noms constants (pour des paramètres et types de méthodes spécifiques)
  • Liste de noms constants (par exemple deux couleurs, ou des canaux)
  • Argument de géométrie (une liste de nombres au format spécial avec des indicateurs)
  • Listes de nombres à virgule flottante (parfois avec des Échappements pourcent)
  • Chaînes de texte de forme libre (avec des Échappements pourcent)

Noms constants

Les noms constants sont des chaînes constantes spécifiques utilisées pour rechercher dans une bibliothèque interne de paramètres autorisés qui peuvent être utilisés par une option. Par exemple, le paramètre «[-gravity](https://imagemagick.org/command-line-options/#gravity)» peut prendre n'importe lequel de neuf paramètres différents. Une fois défini, ce paramètre est ensuite utilisé par tous les opérateurs de traitement d'image qui suivent le paramètre sur la ligne de commande. Par exemple : des paramètres tels que «North», «East» ou «NorthEast». Vous pouvez obtenir une liste de tous les paramètres valides en utilisant l'Option opérationnelle List (voir ci-dessous). Par exemple, avec la commande...

  magick -list gravity

Seuls ces paramètres spécifiques sont autorisés, et si vous tentez d'utiliser un autre paramètre, vous obtiendrez une erreur. Par exemple...

  magick xc: -gravity Invalid   null:

[IM Text]

Le paramètre peut être spécifié de différentes manières, toutes parfaitement valides. IM est très tolérant à ce sujet. Par exemple, un paramètre peut être spécifié en majuscules, en minuscules, ou n'importe quelle combinaison des deux. Les mots individuels (indiqués par des lettres majuscules dans la sortie de «[-list](https://imagemagick.org/command-line-options/#list)») peuvent comporter des espaces, des traits d'union ou des tirets bas supplémentaires, qui sont alors simplement ignorés (mais seulement entre les mots). Par conséquent, tous les arguments suivants sont valides pour définir la «[-gravity](https://imagemagick.org/command-line-options/#gravity)» « North East »...

'`NorthEast`', '`northeast`', '`NORTHEAST`', '`NorTheAst`', '`north east`', '`north-EAST`', '`NORTH_EAST`', '` North East `', '`___North___East___`'.

Mais un argument de 'Nor The Ast' n'est pas valide, même si les lettres sont toutes correctes, car il utilise des espaces à l'intérieur des mots déclarés du paramètre. Ces noms constants ne servent pas seulement aux paramètres, mais aussi à déclarer la méthode opérationnelle à utiliser dans certains des opérateurs de traitement d'image les plus complexes, tels que «[-layers](https://imagemagick.org/command-line-options/#layers)», «[-distort](https://imagemagick.org/command-line-options/#distort)» et «[-morphology](https://imagemagick.org/command-line-options/#morphology)». Certains des noms constants sont lus depuis des fichiers de configuration externes. Par exemple, les noms de couleurs comme pour «[-fill](https://imagemagick.org/command-line-options/#fill)», «[-stroke](https://imagemagick.org/command-line-options/#stroke)», «[-background](https://imagemagick.org/command-line-options/#background)» et «[-mattecolor](https://imagemagick.org/command-line-options/#mattecolor)». Ou les « cartes de seuil » spéciales utilisées pour «[-ordered-dither](https://imagemagick.org/command-line-options/#ordered-dither)». Là encore, «[-list](https://imagemagick.org/command-line-options/#list)» peut être utilisé pour rechercher quels noms votre version d'IM actuellement installée connaît.

Liste de noms constants

Ceci est un argument peu utilisé, le plus couramment employé dans les paramètres nécessitant une ou deux couleurs, comme l'Ajustement de niveau par couleur. L'option «[-level-colors](https://imagemagick.org/command-line-options/#level-color)» peut prendre n'importe lequel des styles d'argument suivants.

color color1,color2 color1-color2

Elle est également utilisée pour la sélection d'image, pour les opérations qui font usage de plusieurs index d'image, par exemple Duplicate et Clone. Les index commencent à zéro pour la première image, tandis que des index négatifs peuvent être utilisés pour désigner des index d'image à partir de la fin de la liste d'images. Par exemple, '-2-1' signifie prendre l'avant-dernière image (index '-2'), jusqu'à la deuxième image (index '1'). Et oui, cela signifie réellement prendre les images dans l'ordre inverse de celui spécifié ! Une autre option qui fait un usage intensif de ceci est la Sélection de canal où vous pouvez spécifier une liste de canaux spécifiquement nommés. Par exemple : 'Red,Green,Blue,Black,Alpha'. Cependant, le Paramètre de canal peut aussi utiliser une notation abrégée avec une chaîne de lettres simples (par exemple : 'RGBA')

Arguments de géométrie

C'est la forme la plus courante d'argument d'option, et elle est généralement utilisée pour spécifier des tailles, des rectangles et des décalages pour diverses opérations. Mais elle est aussi utilisée par toute option qui a besoin d'une liste de 1 à 5 nombres, qu'ils soient entiers ou à virgule flottante. Par exemple, des options comme «[-crop](https://imagemagick.org/command-line-options/#crop)» et «[-resize](https://imagemagick.org/command-line-options/#resize)» utiliseront la syntaxe complète d'un argument de géométrie, tandis que d'autres comme «[-border](https://imagemagick.org/command-line-options/#border)», «[-level](https://imagemagick.org/command-line-options/#level)» et «[-gamma](https://imagemagick.org/command-line-options/#gamma)» n'en utiliseront qu'une petite partie. Ce type d'argument est si courant qu'un analyseur spécial (et complexe) a été écrit pour transformer de telles chaînes d'arguments en nombres et indicateurs, pour être utilisés par tout opérateur ayant besoin d'un argument de géométrie. Un argument de géométrie permet fondamentalement à un utilisateur de spécifier un seul argument de type chaîne contenant jusqu'à 5 valeurs à virgule flottante (bien que la plupart des opérateurs n'utilisent que des entiers). Toutes les formes de chaîne suivantes sont comprises par l'analyseur d'argument de géométrie...

WxH+X+Y WxH +X+Y A A/B/C A,B,C,D,E

Les utilisateurs pourraient spécifier la petite liste de nombres sous N'IMPORTE laquelle de ces formes, mais la forme utilisée dépend généralement de l'opération pour laquelle l'argument est utilisé. Les premières sont généralement utilisées pour la spécification d'un rectangle de taille et d'emplacement spécifiques, ou simplement d'un décalage à des fins quelconques. Les décalages sont toujours décodés en nombres différents, ceux de part et d'autre d'un 'x' dans la chaîne. C'est-à-dire qu'un «+X+Y» est toujours décodé comme les 3e et 4e nombres, tandis qu'il indique que les 1er et 2e sont indéfinis (ou zéro). Les dernières formes permettront jusqu'à un maximum de 5 valeurs d'entrée possibles, et sont généralement utilisées pour spécifier une valeur pour chacun des canaux d'image RGBKA standard. En plus de ces nombres, l'analyseur rapporte aussi si des caractères « indicateurs » spéciaux sont présents (l'un de '%', '^', '!', '<', '>' ). L'analyseur rapporte cependant uniquement si les caractères sont présents. Il ne rapporte pas où ils ont été trouvés dans l'argument. IM par exemple ne se souvient pas que '%' était attaché à un nombre spécifique. Il ne rapporte pas non plus s'il apparaît plusieurs fois. Cela signifie qu'un argument de géométrie de '%50' a exactement la même signification que '50%', bien que ce dernier soit préféré pour la lisibilité. De même, '50%x30' signifiera probablement en réalité '50%x30%' et NON 50 % de la largeur de l'image et 30 pixels de haut comme vous pourriez le penser. | _Comme un argument de géométrie peut contenir des indicateurs spéciaux '%', vous ne pouvez actuellement pas utiliser les Échappements pourcent pour définir ses valeurs en fonction des attributs de l'image.

Il existe une Proposition future sur le moment exact où un échappement pourcent sera développé, qui pourrait résoudre ce problème avec les arguments de géométrie. Et fera, espérons-le, partie d'IMv7.

_
---|---

Listes de nombres à virgule flottante

Si plus de 5 nombres à virgule flottante sont nécessaires, peut-être même un nombre inconnu de valeurs, alors un argument de Liste de nombres à virgule flottante est utilisé, bien qu'au moment présent ils soient généralement analysés par les options individuelles, car ils peuvent varier légèrement d'une option à l'autre. Généralement, ils consistent en une chaîne (typiquement entre guillemets) de nombres à virgule flottante séparés par des virgules ou des espaces. L'Opérateur Distort est probablement l'opérateur le plus connu utilisant une liste de nombres à virgule flottante. D'autres incluent les Noyaux de morphologie et de convolution définis par l'utilisateur, bien qu'ils aient aussi une syntaxe supplémentaire spécifique à la définition d'un tableau de nombres (noyaux). Une variante de nombres à virgule flottante est utilisée par «[-sparse-color](https://imagemagick.org/command-line-options/#sparse-color)», vous permettant de substituer des couleurs à certaines valeurs à virgule flottante. En interne, celles-ci sont quand même converties en valeurs à virgule flottante lorsque le tableau résultant est passé à la fonction de bibliothèque centrale.

Chaînes de forme libre

D'autres options prennent simplement une chaîne comme argument. Que ce soit pour générer des étiquettes, annoter du texte, ou sauvegarder comme métadonnées d'image. Celles-ci incluront généralement des Échappements pourcent dans la chaîne, qui sont remplacés (substitués) à un moment donné avant que la chaîne ne soit utilisée. Cela peut être une substitution immédiate, ou la substitution peut être effectuée plus tard, juste avant que l'argument ne soit réellement utilisé. (Voir Échappements pourcent différés ci-dessous.

Arguments avec échappements pourcent

En raison de leur nature, l'un ou l'autre des deux derniers types d'arguments est souvent prétraité de manière à développer les Échappements pourcent de propriété d'image au sein de la chaîne. Cela signifie que des séquences spécifiques de caractères seront développées (remplacées ou substituées) en une autre chaîne, ou valeur recherchée ou calculée à partir de la (des) image(s) en cours de traitement. Ceci est généralement fait juste avant que l'argument ne soit réellement appliqué par l'opérateur à une image spécifique, afin que les paramètres spécifiques à cette image puissent être utilisés. Si les échappements pourcent sont autorisés dans un argument, vous pouvez à la place préfixer l'argument avec un '@' de sorte que tout l'argument soit lu depuis le fichier externe donné (ou l'entrée standard). Par exemple, '@filename' sera remplacé par le contenu du fichier 'filename'. Si cela se produit, aucun échappement pourcent ou autre échappement spécial n'est appliqué. C'est-à-dire que la chaîne lue depuis le fichier sera prise au sens littéral, et utilisée sans modification. AVERTISSEMENT : ce fichier pourrait être n'importe quoi, y compris des fichiers système et de mots de passe qui pourraient être lisibles par le programme. Par conséquent, les utilisateurs web devraient pré-vérifier les chaînes d'entrée pour ce cas spécial, ou mieux encore fournir cette chaîne à IM en utilisant la clause '@filename', comme mesure de sécurité.
Si la chaîne n'est pas lue depuis un fichier ou un flux d'entrée, alors toute chaîne '\n' est remplacée par un caractère « nouvelle ligne », et toute étiquette préfixée par '%' est remplacée par la valeur appropriée. Voir Échappements pourcent de propriété d'image pour la liste complète des remplacements. L'utilisation des échappements pourcent dans les arguments signifie que, pour la liste croissante d'opérateurs qui permettent l'usage de tels échappements, comme «[-set](https://imagemagick.org/command-line-options/#set)», «[-sparse-color](https://imagemagick.org/command-line-options/#sparse-color)», «[-distort](https://imagemagick.org/command-line-options/#distort)» ou «[-morphology](https://imagemagick.org/command-line-options/#morphology)», vous pouvez générer des arguments basés sur divers attributs d'image et métadonnées. ImageMagick version 7 permet l'usage des échappements pourcent dans presque CHAQUE argument (une fonctionnalité clé d'IMv7 !). Non seulement cela, mais vous pouvez même calculer différents arguments selon le contenu ou l'index de l'image ! Vous pouvez même pré-calculer certains paramètres complexes en utilisant des paramètres par image ou globaux prédéfinis. Avant IM v6.6.9-0, les Échappements pourcent et plus spécifiquement les Échappements pourcent FX impliquant des index d'image, tels que '%p', '%n', '%[fx:t]' et '%[fx:n]' étaient défectueux. Généralement, ils ne retournaient que des valeurs peu utiles de '0' ou '1', et non l'index réel et le nombre d'images dans la liste d'images courante.
--- ---

Échappements pourcent différés

Notez que pour certaines options de paramétrage, les Échappements pourcent ne sont pas développés immédiatement lorsqu'ils sont rencontrés, mais simplement stockés TELS QUELS. Ce n'est que plus tard, lorsque le texte est réellement utilisé, que tout Échappement pourcent trouvé dans la chaîne devrait être développé, lorsque l'image avec laquelle ils seront utilisés est finalement connue. C'est-à-dire que ces arguments doivent différer la substitution des Échappements pourcent jusqu'à ce que l'argument soit réellement utilisé. Ces options incluent les Paramètres d'entrée tels que : «[-label](https://imagemagick.org/command-line-options/#label)», «[-comment](https://imagemagick.org/command-line-options/#comment)», ainsi que le paramètre «[-format](https://imagemagick.org/command-line-options/#format)», et les valeurs globales «[-define](https://imagemagick.org/command-line-options/#define)». Cela signifie que vous pouvez spécifier un «[-label](https://imagemagick.org/command-line-options/#label)» contenant des Échappements pourcent spécifiques à l'image bien avant que l'image à laquelle il doit s'appliquer ne soit réellement lue. Ce n'est que lorsque l'étiquette est réellement attachée à l'image (juste après sa lecture) que les Échappements pourcent sont développés, afin qu'ils puissent utiliser les attributs de l'image à laquelle ils sont appliqués. | _La principale limitation à l'usage plus répandu des Échappements pourcent est qu'ils ne sont actuellement appliqués qu'à un ensemble limité d'arguments d'option. Par exemple, nous ne pouvons actuellement pas les utiliser avec les Arguments de géométrie, qui utilisent aussi des caractères « pourcent », mais à des fins différentes.

Ce problème est l'un des problèmes majeurs qu'IMv7 corrigera._
---|---


Commandes ImageMagick

Bien que la majeure partie de ces pages d'exemples ImageMagick utilise la commande «magick» pour traiter les images, il existe un certain nombre d'autres commandes ImageMagick, que je vais présenter brièvement ici. Certaines de ces commandes ne peuvent cependant pas être démontrées correctement sur une page web. Néanmoins, j'essaierai de vous donner des indices et des astuces concernant ces commandes ici, même si je ne peux pas réellement montrer leur sortie directement ici.

Convert -- Convertir et modifier les images

La commande «magick» est le principal cheval de bataille d'ImageMagick, et à ce titre, presque tous les ensembles d'exemples de ces pages utilisent cette commande. Je ne couvrirai donc pas beaucoup l'utilisation de cette commande ici, mais j'examinerai plutôt un peu son histoire. L'objectif initial de la commande lorsqu'IM a été créé était la conversion d'images d'un format d'image vers un autre. En fait, elle est toujours utilisée à cette fin, et c'est pourquoi elle s'appelle «magick». De ce fait, la commande peut même ne pas lire une image en mémoire, mais peut utiliser des programmes Délégués secondaires en dehors d'IM proprement dit pour effectuer la conversion directement. Cet aspect entièrement externe est cependant tombé en désuétude avec le temps, et faute de besoin, sauf comme moyen de lire et d'écrire des formats de fichiers d'image complexes. Sur une longue période, certaines fonctionnalités de traitement d'image supplémentaires ont été ajoutées pour apporter des modifications mineures aux images lors de leur transfert entre formats, ou même dans le même format. C'étaient généralement des options simples, mais à partir d'IM version 5, l'usage de ces fonctionnalités de traitement était devenu intensif, et un aspect bien plus important de la commande «magick» que la simple conversion d'images. À mesure que les options se multipliaient, que plusieurs options commençaient à être utilisées, l'ordre des options se mettait à produire des résultats étranges et incontrôlables. Pour les utilisateurs, IM est devenu connu comme instable et incontrôlable lorsque plusieurs options de traitement d'image étaient utilisées, et il a commencé à tomber en disgrâce. IM version 6 a vu le passage d'un simple style « options » à un style « fais-le au fur et à mesure » pour le traitement d'image, et en conséquence, les capacités de traitement d'image sont devenues stables, prévisibles, et les capacités de ligne de commande d'IM sont devenues bien des ordres de grandeur plus utiles. En conséquence, «magick» ne consiste plus tant à « convertir » des images d'un format à un autre, mais constitue une API en ligne de commande pour accéder aux fonctions de traitement d'image, pour créer et modifier des images de manières très complexes, sans avoir besoin d'un diplôme en traitement d'image, ni de programmer dans un langage informatique (tel que Perl, PHP ou C). Bien sûr, quelques connaissances en scriptage shell sont utiles, bien que pas strictement nécessaires.

identify -- Afficher les détails des images, telles qu'IM les voit

La commande «identify» est conçue pour retourner des informations sur une image de manière simple et utile. Par défaut, elle produit un résumé compact et simple, détaillant le nom de l'image, le format de fichier, la taille de l'image, la taille et le décalage du canevas virtuel, la profondeur de couleur, le type de format interne, et si elle est connue, la taille originale de l'image sur le disque en termes humains. Par exemple...

  magick identify  tree.gif

[IM Text]

Notez que le '8c' dans le résultat ci-dessus n'est pas le nombre de couleurs dans cette image (qui est en fait 6), mais la taille de la palette « pseudo-couleur » (voir l'exemple ultérieur pour le nombre réel de couleurs). Notez également que le « canevas virtuel » de l'image a la même taille que l'image réelle avec un décalage zéro, ce qui signifie qu'il n'est actuellement pas utilisé. Ajouter un -verbose, un Contrôle opérationnel, produira autant d'informations sur l'image qu'IM en connaît ou peut facilement calculer. Cela inclut les statistiques de couleur, les comptages de couleurs, les informations de profil, le type de sauvegarde interne de l'image, etc. etc.. Mais attention, la sortie est vraiment... verbeuse ! Des informations spécifiques peuvent être obtenues et produites de manières spécifiques en utilisant le paramètre «[-format](https://imagemagick.org/command-line-options/#format)», et les échappements pourcent ('%') spéciaux d'IM pour produire les Propriétés d'image. Cependant, vous devez généralement spécifier une fin de ligne (nouvelle ligne sous UNIX ou MacOSX) dans le cadre de cet argument (changé dans IM v6.8.5-8). Par exemple, vous pouvez simplement extraire un comptage du nombre de couleurs dans une image.

  magick identify -format '%k\n' tree.gif

[IM Text]

| Avant IM v6.8.5-8, «[-format](https://imagemagick.org/command-line-options/#format)» ajoutait automatiquement un (des) caractère(s) de fin de ligne à la sortie, afin de séparer les résultats de plusieurs images. Cela n'est plus fait, vous devrez donc peut-être ajouter vos propres caractères de fin de ligne appropriés à la chaîne «[-format](https://imagemagick.org/command-line-options/#format)».
---|---

Identify, faire un Ping ou non

Par défaut, «[magick identify](#identify)» ne lit que des informations de base minimales sur une image, en utilisant une technique connue sous le nom de «[-ping](https://imagemagick.org/command-line-options/#ping)». Cela signifie qu'identify ne lit que suffisamment du fichier image pour déterminer des informations simples sur l'image, comme la taille, sans essayer de lire toute l'image en mémoire. Voir Ping, Contrôle opérationnel ci-dessous. C'est un grand avantage de «[magick identify](#identify)» sur «[magick](#magick)». Cependant, la plupart des métadonnées d'image ne seront pas disponibles. Par exemple, les étiquettes d'image d'un fichier image PNG. Par exemple, ici je crée une image avec une « étiquette », et tente d'utiliser un simple paramètre de format pour afficher cette étiquette.

|

  magick rose: -set label "rose with a label" rose.png
  magick identify -format '"%l"\n' rose.png

[IM Output]
[IM Text]


Cependant, cela ne se produit que pour des cas très spécifiques. Tout «[-format](https://imagemagick.org/command-line-options/#format)» comportant des échappements plus complexes désactivera automatiquement l'utilisation d'une lecture « ping » minimale.

  magick identify -format '"%[label]"\n' rose.png

[IM Text]

Ou vous pouvez désactiver spécifiquement cette lecture « ping » minimale, et forcer identify à lire l'image « en totalité » afin qu'il obtienne l'information désirée.

  magick identify +ping -format '"%l"\n' rose.png

[IM Text]

Généralement, vous n'avez pas besoin de trop vous en soucier. Sauf si vous traitez de très grandes images comme des photos.

Identify comme calculatrice à virgule flottante

Vous pouvez effectuer des calculs à virgule flottante en utilisant les Expressions d'échappement FX...

  magick identify -ping -format 'double_width=%[fx:w*2] PI=%[fx:atan(1)*4]\n' tree.gif

[IM Text]

Notez que le calcul n'a même pas besoin d'être lié à l'image elle-même, ce qui vous permet d'utiliser IM comme une simple calculatrice à virgule flottante au sein de vos scripts. Comme nous n'avons besoin que d'informations de base, nous avons utilisé le contrôle Ping pour empêcher identify de lire toute l'image. Cela n'a aucun effet sur le résultat dans ce cas, mais peut accélérer énormément la commande.

Mises en garde supplémentaires sur Identify

Détails de format spécifiques
Normalement, IM lit l'image en mémoire (ce qui est essentiellement son propre format de données interne), en utilisant diverses API de bibliothèques d'images et programmes délégués, avant de produire les résultats qu'il voit avec identify. C'est-à-dire que «magick identify» analyse le contenu image/donnée qu'il a lu et stocké. Il n'analyse pas comment le format de fichier spécifique stocke ou gère les données image. C'est important car il peut y avoir des aspects très spécifiques de formats de fichiers spécifiques sur lesquels «magick identify» ne fera pas de rapport. Par exemple, bien qu'il liste le contenu de la table de couleurs d'une image GIF pour chaque image présente (plusieurs images sont possibles), il ne vous dira pas si toutes les images du fichier partagent la même table de couleurs ou non. Si vous avez besoin d'informations spécifiques sur un format de fichier image spécifique, il peut être préférable d'utiliser un outil conçu spécifiquement pour ce format. Par exemple «giftrans» pour le format de fichier GIF, et «jpegtrans» pour le format de fichier JPEG.
Sortie d'histogramme de couleur
Notez que si l'image a plus de 1024 couleurs, aucun histogramme ou table de couleurs ne sera inclus dans la sortie verbeuse. Pour forcer la génération de cette information, vous pouvez utiliser le format de fichier spécial 'histogram:' qui inclut tout sous forme d'un grand commentaire d'image.
Statut de sortie

Le programme identify retourne un statut de sortie non nul si une image corrompue est rencontrée et que vous ajoutez un Contrôle Regard Warnings.

error=magick identify -regard-warnings image 2>&1 >/dev/null; if [ $? -eq 0 ]; then echo "The image is good" else echo "The image is corrupt or unknown format" echo "$error" fi


Alternatives de sortie d'Identify

Depuis IM v6.2.4, vous pouvez également produire la sortie d'identify depuis la commande «[convert](#convert)» en utilisant le format de fichier de sortie spécial «[info:](files.html#info)».

  magick ../images/k* \
          -format 'image \"%f\" is of size %G\n'  info:

[IM Text]

Vous pouvez utiliser un Opérateur d'écriture pour écrire vers «[info:](files.html#info)» au milieu d'une séquence d'opérations, par exemple comme outil de débogage. Vous pouvez aussi lui faire écrire cette sortie vers un fichier spécifique (ou flux de fichier). Une méthode plus simple serait d'utiliser une option «[-identify](https://imagemagick.org/command-line-options/#identify)» pour écrire vers la « sortie standard » normale.

  magick ../images/k* \
          -format 'Image #%p named \"%f\" is a %m\n' -identify \
          null:

[IM Text]

Cela peut aussi être combiné avec une autre option, «[-print](https://imagemagick.org/command-line-options/#print)», pour produire d'autres informations.

  magick null: -print ' (50 + 25)/5  ==>  %[fx: (50+25)/5 ]\n' null:

[IM Text]

La principale différence entre «[-identify](https://imagemagick.org/command-line-options/#identify)» et «[-print](https://imagemagick.org/command-line-options/#print)» est que le premier sera exécuté une fois pour chaque image en mémoire, tandis que le second ne sera exécuté qu'une seule fois. Cela signifie que nous pouvons générer presque n'importe quel fichier texte que nous voulons sur les images en mémoire, entièrement depuis une seule commande ImageMagick. Par exemple, ici je génère un fichier HTML du même ensemble d'images que j'ai utilisé dans l'exemple précédent...

  magick ../images/k* \
     -print "<HTML><BODY><CENTER>\n" \
     -print "<H1>  Display of %n Thumbnails  </H1>\n" \
     -print "\n" \
     -format "<IMG SRC=\"%i\" ALT=\"%f\" WIDTH=%w HEIGHT=%h>\n" -identify \
     -print "\n" \
     -print "<BR>That's all folks\!\n" \
     -print "\n" \
     -print "</CENTER></BODY></HTML>\n" \
     null:

[IM Text]

Vous pouvez voir le résultat de la sortie ci-dessus sous forme de Page web HTML montrant les images. Un dernier mot sur ces options. Toutes, par défaut, écriront vers la « sortie standard » de la commande «magick». Vous ne pouvez pas spécifiquement écrire vers un autre « pipeline » ou vers un fichier spécifique, à moins d'avoir préalablement redirigé la « sortie standard ». Écrire la sortie en utilisant «[info:](files.html#info)» vous permettra de diriger la sortie vers un fichier spécifique, tout comme vous le pouvez vers un fichier image. Vous pouvez aussi diriger la sortie vers un descripteur de fichier préparé au préalable, en utilisant le format de fichier de sortie spécial «[fd:](files.html#fd)». Bien sûr, cela écrit une fois par image, donc une certaine jonglerie d'images peut être nécessaire pour faire en sorte que cela ne sorte qu'une seule fois.

Mogrify -- traitement par lot sur place

La commande «magick mogrify» ressemble à bien des égards à «magick», sauf qu'elle est conçue pour modifier les images sur place. C'est-à-dire que son objectif principal est de lire les images (ou animations), un fichier à la fois, et de les modifier, avant de sauvegarder l'image dans le même nom de fichier exact depuis lequel l'image a été lue. À cause de cela...

Mogrify est dangereux, car il peut facilement détruire l'image originale !

Par conséquent, avant de faire quoi que ce soit de définitif, testez «magick mogrify» avec une copie séparée de vos images. Ne l'utilisez pas sur une image originale qui n'a aucune sauvegarde. Maintenant, bien que «magick mogrify» sauvegarde normalement une image modifiée dans le même nom de fichier, il dispose de deux options spéciales qui lui permettent de sauvegarder les images dans un fichier différent. Le paramètre «[-format](https://imagemagick.org/command-line-options/#format)» spécifique à «magick mogrify» définit un format et un suffixe différents à utiliser lors de la sauvegarde des fichiers. Ainsi, une commande comme...

  magick mogrify    -format jpg   *.png

Vous permettra de convertir, ou de modifier par lot des images, sans détruire l'image originale. Dans ce cas, conversion de tous les fichiers PNG en fichiers JPEG avec le même nom de fichier mais un suffixe différent. Mais attention, s'il existe un fichier existant portant le même nom, il sera écrasé. Donc, laissez-moi le répéter...

Réfléchissez et vérifiez avant de Mogrifier

ou vous pourriez découvrir que vous venez d'écraser quelque chose que vous vouliez conserver. Depuis IM v6.2.0, vous pouvez aussi utiliser une nouvelle option «[-path](https://imagemagick.org/command-line-options/#path)» pour spécifier un répertoire différent dans lequel produire les images traitées. Cela le rend plus sûr, cependant cela écrasera quand même toute image du même nom qui pourrait déjà se trouver dans ce répertoire. Aussi, toute ancienne image laissée dans ce répertoire ne sera pas supprimée. Vous pouvez donc faire enregistrer les résultats par IM (par exemple des vignettes d'image) dans un sous-répertoire existant, en utilisant quelque chose comme ceci...

  magick mogrify   -path thumbnail-directory   -thumbnail 100x100  *

| Avant IM v6.3.4-3, les paramètres «[-format](https://imagemagick.org/command-line-options/#format)» et «[-path](https://imagemagick.org/command-line-options/#path)» étaient mutuellement exclusifs. À partir de cette version, vous pouvez changer les formats et l'emplacement du répertoire de sortie.
---|---
En raison de sa capacité de traitement multi-images, la commande «magick mogrify» ne peut utiliser aucun des Opérateurs sur liste multi-images ou Opérateurs de pile d'images. Cela signifie que vous ne pouvez pas utiliser des opérateurs de traitement d'image comme «[-fx](https://imagemagick.org/command-line-options/#fx)», «[+swap](https://imagemagick.org/command-line-options/#swap)», «[-composite](https://imagemagick.org/command-line-options/#composite)», «[-append](https://imagemagick.org/command-line-options/#append)», «[-flatten](https://imagemagick.org/command-line-options/#flatten)» et «[-layers](https://imagemagick.org/command-line-options/#layers)» dans une commande «magick mogrify». Comme certaines options de paramétrage doivent être définies avant la lecture de la première image (par exemple «[-size](https://imagemagick.org/command-line-options/#size)», «[-label](https://imagemagick.org/command-line-options/#label)» et «[-density](https://imagemagick.org/command-line-options/#density)»), ces options sont traitées et définies avant la lecture de la première image. Après cela, chaque image est lue et les opérateurs leur sont appliqués dans l'ordre de la ligne de commande avant que l'image ne soit sauvegardée et que l'image suivante ne soit lue. Il est important de garder cela à l'esprit car si vous changez un de ces paramètres plus tard dans la séquence, vous pouvez faire oublier à IM un paramètre précédent. Par exemple...

  magick mogrify -format gif  -size 200x200  -pointsize 18 \
          -font Candice -gravity north  -annotate 0 "%f" \
          -font Ravie   -gravity Center -annotate 0 "%f" \
          -font Gecko   -gravity south  -annotate 0 "%f" \
          -size 100x64   xc:gold  xc:orange   xc:tomato

[IM Output] [IM Output] [IM Output]

Comme vous pouvez le voir, la taille des images générées ci-dessus a été déterminée par le second paramètre d'entrée «[-size](https://imagemagick.org/command-line-options/#size)», le premier paramètre plus grand étant complètement ignoré. D'un autre côté, le paramètre opérationnel «[-font](https://imagemagick.org/command-line-options/#font)» est défini correctement pour chacune des opérations «[-annotate](https://imagemagick.org/command-line-options/#annotate)» individuelles. Cette complexité ajoutée signifie que c'est probablement une bonne idée de...

Mogrifier les images simplement.

N'essayez pas de faire des opérations très longues et complexes de type «magick» dans une opération par lot avec «magick mogrify», cela aura probablement des problèmes de « paramètres ». Si vous voulez vraiment faire un traitement complexe, écrivez un script shell/dos/perl pour utiliser «magick» afin de traiter chaque image une à la fois, ou passez à une interface API ImageMagick. Pour des exemples de modification de nombreuses images à l'aide d'un script, voir Exemples ImageMagick avancés. Rappelez-vous simplement que «magick mogrify» est une commande dangereuse, et devrait toujours être minutieusement testée sur des images de sauvegarde avant d'être mise en production. En fait, je recommande aussi que les scripts incluent un rapide « test » sur des choses comme «magick mogrify» pour s'assurer que la commande ne casse rien (en raison de changements de version ou de différences dans les installations informatiques) avant de traiter une très grande collection d'images. C'est-à-dire, faire un petit « cas de test » et abandonner s'il échoue à produire un résultat correct, avant de continuer. C'est en fait une bonne idée pour tout projet de traitement d'image à grande échelle, afin de protéger les utilisateurs des conséquences imprévues. Je le fais moi-même dans les Exemples IM, et cela m'a évité bien des ennuis.

Composition alpha avec «magick mogrify»

Parce que «magick mogrify» ne peut pas utiliser les Opérateurs sur liste multi-images, il ne peut pas facilement superposer des choses comme des logos, ou masquer des images en utilisant la Composition alpha. Il existe une exception à cela, en utilisant «[-draw](https://imagemagick.org/command-line-options/#draw)» pour effectuer la composition alpha d'image. Cela vous permet de spécifier la seconde image, dans le cadre des arguments de l'opérateur, en dehors de la liste d'images courante. Par exemple, ici je fais d'abord une copie des images originales que je veux traiter en utilisant un script spécial «[cp_perl](http://www.ict.griffith.edu.au/anthony/software/#mv_perl)». Je crée ensuite une image « masque » de cercle temporaire, que j'utilise alors pour découper une forme de cercle dans toutes ces images, en utilisant «magick mogrify» avec une méthode de composition alpha '[Dst_In](compose.html#dstin)'.

  cp_perl  's/^/mogrify_/'  eye.gif news.gif storm.gif tree.gif
  magick -size 32x32 xc:none -draw 'circle 15.5,15.5 15.5,0'  circle.gif
  magick mogrify  -alpha Set -draw 'image Dst_In 0,0 0,0 "circle.gif"'  mogrify_*.gif

[IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]

Notez que n'importe quelle méthode de composition alpha peut être utilisée de cette manière, mais seulement avec une image « source » ou « superposition » constante appliquée à toutes les images. Aussi, comme «magick mogrify» lira l'image « source » plusieurs fois, je vous suggère d'utiliser le format de fichier spécifique à IM «MPC:» pour réduire la charge de décodage de l'image lors de sa lecture répétée. Ce format de fichier image n'a pas besoin d'être analysé par IM car il sera mappé directement du disque vers la mémoire (pour la même machine sur laquelle il a été créé). Cela économise beaucoup de temps de traitement, surtout lorsqu'on traite un grand nombre d'images.

Utiliser Convert au lieu de Mogrify

En utilisant une technique spéciale pour modifier le nom de fichier de sortie au moyen des Échappements pourcent (voir Échappements pourcent de nom de fichier), vous pouvez remplacer «[mogrify](#mogrify)» par une commande «[convert](#convert)» plus polyvalente. Non seulement cela, mais elle vous fournira un plus grand contrôle sur le nom de destination final de l'image. et vous permettra de mieux gérer le traitement multi-images comme les compositions et les animations. Par exemple, ici je crée des vignettes des images du répertoire courant, en insérant une chaîne «_tn» dans le nom de fichier d'entrée, pour créer le nom de fichier de sortie approprié.

  magick *.jpg   -thumbnail 120x90 \
          -set filename:fname '%t_tn' +adjoin '%[filename:fname].gif'

Attention, n'incluez pas de suffixe de fichier différent dans le paramètre de nom de fichier lui-même. IM ne le verra pas au moment de décider du format de fichier image à utiliser. Notez que si IM ne peut pas décider à partir du nom de fichier, il se rabattra sur le format de fichier original qui a été lu, donc un suffixe clair, ou un préfixe de codeur, peut être important lors de l'utilisation de cette technique. Pour obtenir le nom de fichier original exact dont provient l'image source, utilisez «%i», «%d/%f» ou «%d/%t.%e». Bien sûr, tous ceux-ci ont le suffixe de nom de fichier, dans le paramètre de nom de fichier, qu'IM n'utilise pas, mais cela devrait convenir car il s'agit du même format de fichier image. Le vrai problème avec l'utilisation de «[convert](#convert)» au lieu de «[mogrify](#mogrify)» est que TOUTES les images sont lues en mémoire d'abord ! Mogrify prend grand soin de ne lire/modifier/écrire qu'un seul fichier à la fois (bien que ce fichier puisse contenir plusieurs images). Mais «[convert](#convert)» ne le fait pas. Vous pouvez donc très facilement dépasser les limites de mémoire si vous ne faites pas attention. Bien qu'il existe des moyens de contourner cela. Voir les exemples dans Modificateurs de lecture et Vignettes. De plus, comme toutes les images sont en mémoire dans une seule liste d'images, vous devrez faire attention à la façon dont vous traitez ces images. Par exemple, vous ne pouvez pas utiliser directement la Composition alpha comme vous le feriez normalement, mais vous devrez peut-être utiliser la Composition sur liste multi-images spécialisée pour faire le travail. Bien sûr, tout comme avec «magick mogrify», cette méthode d'utilisation de «magick» peut être dangereuse, car elle pourrait facilement écraser et détruire les fichiers image originaux.

Alternatives au traitement par lot

Si le traitement par lot des images avec «magick mogrify» n'est pas pratique, en particulier si vous copiez les images plutôt que de les modifier sur place, alors il peut être préférable d'utiliser d'autres solutions de bouclage non-IM. Cela inclut...

  # Use a simple shell loop, to process each of the images.
  mkdir thumbnails
  for f in *.jpg
  do   magick $f -thumbnail 200x90 thumbnails/$f.gif
  done

  # Use find to substitute filenames into a 'convert' command.
  # This also provides the ability to recurse though directories by removing
  # the -prune option, as well as doing other file checks (like image type,
  # or the disk space used by an image).
  find * -prune -name '*.jpg' \
         -exec  magick '{}' -thumbnail 200x90 thumbnails/'{}'.gif \;

  # Use xargs -- with a shell wrapper to put the argument into a variable
  # This can be combined with either "find" or "ls" to list filenames.
  ls *.jpg | xargs -n1 sh -c 'magick $0 -thumbnail 200x90 thumbnails/$0.gif'

  # An alternative method on linux (rather than plain unix)
  # This does not need a shell to handle the argument.
  ls *.jpg | xargs -r -I FILE   magick FILE -thumbnail 200x90 FILE_thumb.gif

Et ainsi de suite. Je recommande l'usage à la fois de «find» et «xargs» pour faire du traitement de fichiers récursif ou même non récursif. Lisez leurs pages de manuel. Pour une introduction rapide, voir ce Message de discussion IM, ainsi que le guide Xargs - Wikipedia qui inclut des informations sur les dangers impliqués. Si vos commandes commencent à devenir plus compliquées que cela, il est peut-être temps de passer à un script shell, ou à un programme API, pour lire plusieurs images, recueillir des informations, calculer les arguments appropriés, et traiter les images. Je recommande aussi de bien examiner la commande «[parallel](http://www.gnu.org/software/parallel/)» (généralement un remplacement direct de «xargs»). Cela peut non seulement vous permettre d'exécuter plusieurs commandes simultanément, mais peut, avec un peu de travail, exécuter chaque commande sur différents ordinateurs, vous permettant de faire du traitement distribué en réseau d'un très grand nombre de tâches. Pour les utilisateurs Windows, je vous renvoie à la section Utilisation Windows, et en particulier à Windows, traitement par lot de plusieurs fichiers. Rappelez-vous que «[mogrify](#mogrify)», et toutes les autres commandes IM, développeront aussi tous les noms de fichiers contenant des méta-caractères shell tels que '*' et '?'. Ceci est fait pour permettre l'utilisation de ces méta-caractères sur l'ancien shell de ligne de commande DOS. Cependant, cela pourrait causer un bug, une exécution répétée de magick mogrify, ou peut-être même un « hack » provenant d'une source malveillante qui aurait fourni le nom de fichier à utiliser. La prudence et une compréhension complète des problèmes de sécurité sont conseillées.

Composite -- superposer les images de façons spéciales

La commande «magick composite» est conçue spécifiquement pour la composition alpha simple (superposition) de deux images ensemble de diverses manières. Cela inclut la limitation de la zone dans laquelle les images sont combinées, par l'usage d'une troisième image de masquage. Contrairement à «magick», la commande «magick composite» est une commande très traditionnelle en ce qu'elle lira toutes ses options et paramètres avant d'effectuer réellement l'opération unique de traitement d'image pour laquelle elle a été conçue. La commande «magick composite» fournit aussi un accès simple à certains des modes de composition alpha les plus complexes. Par exemple, la composition d'image «[-dissolve](https://imagemagick.org/command-line-options/#dissolve)», «[-blend](https://imagemagick.org/command-line-options/#blend)» et «[-watermark](https://imagemagick.org/command-line-options/#watermark)». Si l'un de ces arguments est donné, il remplacera tout autre paramètre «[-compose](https://imagemagick.org/command-line-options/#compose)» qui a été (ou sera) donné pour cette commande. Notez aussi que le paramètre «[-tile](https://imagemagick.org/command-line-options/#tile)» fonctionne aussi différemment de celui de «magick» ou «magick montage» et «magick display». Dans «magick composite», cela fera que l'image superposée sera répétée en mosaïque sur toute l'image d'arrière-plan. Quelque chose qui n'est pas encore disponible dans les autres commandes IM. Bien que ces fonctionnalités spéciales rendent «magick composite» une commande utile, la composition alpha est désormais aussi disponible pour usage dans la commande «magick». (Pour plus de détails, voir Composition alpha dans IM). Pour un résumé de multiples façons différentes de superposer deux images ou plus, voir les exemples dans Composition de multiples paires d'images. Pour plus d'informations sur la méthode par laquelle deux images peuvent être fusionnées, voir la page d'exemples Composition alpha. Les capacités de limitation de superposition ou de « masquage » sont aussi détaillées dans la page d'exemples ci-dessus, dans Utiliser un masque de composition pour limiter la zone composée.

Montage -- générer des tableaux de vignettes

La commande spéciale d'indexation d'image IM «magick montage» suit aussi le même style de structure de ligne de commande « fais-le au fur et à mesure » que «magick». La seule différence est que lorsque la fin de la commande est atteinte (autre que l'argument final de nom de fichier de l'image de sortie), «magick montage» commencera à traiter la liste d'images en une (des) page(s) d'index de vignettes, selon les paramètres actuellement définis. Cela rend «magick montage» beaucoup plus polyvalent qu'il ne l'était dans IM version 5, car vous pouvez maintenant traiter les images tout comme vous le feriez dans «magick», puis définir tous les paramètres «magick montage» que vous voulez, et le laisser terminer le travail. Pour plus de détails sur «magick montage», voir Montage, tableaux de vignettes.

display -- Diaporamas d'images

Le programme «magick display» est conçu pour afficher une image, ou une liste d'images sous la forme d'un diaporama en boucle. Il n'est pas conçu pour une animation d'images soigneusement orchestrée et chronométrée, pour cela utilisez la commande «[animate](#animate)». Chaque image sera affichée dans une fenêtre de taille appropriée à l'image, à moins que d'autres options (comme «[-geometry](https://imagemagick.org/command-line-options/#geometry)» de la fenêtre, voir ci-dessous) ne remplacent ce comportement. L'image sera aussi généralement affichée sur un arrière-plan en damier afin de montrer les effets de toute transparence que l'image peut avoir (voir ci-dessous). Rappelez-vous que ce N'EST PAS conçu pour l'affichage d'une animation, mais comme un diaporama d'images réelles. Par conséquent, une certaine prudence peut être nécessaire lors de l'utilisation de display dans un programme de scriptage. Temps d'affichage d'image, boucle, et autres options Par défaut, un délai d'environ 2 secondes est utilisé en plus de tout délai que l'utilisateur spécifie avec le paramètre «[-delay](https://imagemagick.org/command-line-options/#delay)». Cependant, vous pouvez le faire attendre une entrée utilisateur (barre d'espace) en utilisant l'option «-delay 0». Mais les valeurs par défaut peuvent être remplacées par les images elles-mêmes, selon leur format de fichier. Ainsi, des formats d'animation comme GIF et MIFF pourraient entraîner soit une pause, soit un délai de 2 secondes plus le paramètre de délai des métadonnées de l'image. Il est donc recommandé de toujours définir un «[-delay](https://imagemagick.org/command-line-options/#delay)» approprié (rappelez-vous que «-delay 5x1» retardera de 5+2 ou environ 7 secondes) pour votre script et vos besoins. Il en va de même pour le paramètre «[-loop](https://imagemagick.org/command-line-options/#loop)». Par défaut, «magick display» boucle indéfiniment («-loop 0»), mais des formats d'image comme MIFF ou GIF peuvent remplacer cela de manière à le faire quitter après la dernière image de la boucle. Voir l'option «[-loop](https://imagemagick.org/command-line-options/#loop)» de manière appropriée à votre situation. Notez que «magick display» ne gérera aucun Paramètre d'animation GIF, de sorte que les images ne sont pas éliminées, et les tailles et décalages du canevas virtuel sont ignorés. En d'autres termes, vous verrez les images partielles brutes dans une animation GIF, et non l'image correctement superposée. Il fournit une option «[-coalesce](https://imagemagick.org/command-line-options/#coalesce)» pour nettoyer de telles animations à des fins d'affichage.

Gestion de la transparence

Les images contenant un canal alpha complet (par ex. les formats PNG et MIFF) seront superposées sur un motif d'arrière-plan en « damier », afin de vous laisser voir les effets de toute semi-transparence, comme les effets d'ombre. Vous pouvez changer cela en sélectionnant un arrière-plan différent avec «[-texture](https://imagemagick.org/command-line-options/#texture)» tel que...

  magick display -texture granite: test.png

  magick display -texture xc:black test.png

Les images avec une transparence par palette (ou booléenne), comme les formats GIF et PNG8, sont affichées avec la « couleur transparente » courante qui a été utilisée pour représenter la transparence dans la table de couleurs. C'est-à-dire qu'une couleur généralement aléatoire peut être utilisée (typiquement le noir) plutôt que le motif en damier par défaut. Cela pourrait être considéré comme un bug, bien que techniquement ce n'en soit pas un. Cependant, si vous voulez que display gère de telles images de la même manière que les autres images contenant des informations de transparence, vous pouvez supprimer les métadonnées de palette avant de fournir l'image à «magick display» en utilisant les commandes suivantes pour changer le style interne du format de sortie de l'image.

  magick image.gif -type truecolormatte miff:- | display -

Alternativement, presque toute opération qui modifie l'image affichée supprimera aussi les métadonnées de palette existantes. Ainsi, certaines options de «magick display» peuvent être utilisées pour supprimer la palette. Par exemple, en utilisant «[-coalesce](https://imagemagick.org/command-line-options/#coalesce)».

  magick display -coalesce image.gif

Cela a le bonus supplémentaire de nettoyer les optimisations d'animation GIF qui pourraient être présentes. Bien que pour plusieurs images non reliées, cela pourrait avoir d'autres effets secondaires indésirables. Oui, ces méthodes sont maladroites, mais elles fonctionnent.

Afficher avec Convert

Une méthode d'affichage alternative (autre que l'utilisation de «magick animate», voir ci-après) consiste à utiliser le format d'image de sortie «x:» plus simple (voir format de sortie display).

  magick image.png x:

Cette méthode ne fournit pas de fenêtre d'arrière-plan, d'options de menu, ni d'autres contrôles. Elle affiche simplement les images une image à la fois. Si vous voulez seulement simplement « afficher » l'image résultante, le Délégué de lancement de sortie spécial 'show:' ou 'win:' fera la même chose en exécutant la commande «[display](#display)» sur l'image de sortie, et en quittant sans attendre que cette fenêtre soit fermée.

  magick image.png show:

Taille de sortie de Display

Display ne mettra pas une image à l'échelle pour l'adapter à l'affichage de la fenêtre X. La taille de la fenêtre sera ajustée pour s'adapter à chaque image, à moins d'être définie en utilisant le paramètre «[-geometry](https://imagemagick.org/command-line-options/#geometry)». Ce paramètre peut aussi être utilisé pour fixer la position de la fenêtre sur l'affichage X. Les images plus grandes que l'écran ne seront pas non plus redimensionnées, mais déborderont de l'écran ; display fournira cependant aussi une « fenêtre de défilement » pour permettre à l'utilisateur de se déplacer dans l'image. Cela peut être pénible lors de la visualisation d'une photo numérique haute résolution moderne. Pour limiter display à une zone de 800x600 pixels par exemple (redimensionner seulement vers le plus petit, jamais vers le plus grand), utilisez...

  magick display -resize 800x600\> photo.jpg

Pour les images JPG, vous pouvez accélérer la lecture de l'image en utilisant un paramètre spécial d'indication de taille d'entrée jpeg. Voir Options de contrôle de lecture JPEG.

  magick display -define jpeg:size=1600x1200 -thumbnail 800x600\> photo.jpg

Si l'image provient d'un appareil photo numérique moderne, vous pouvez aussi utiliser «[-auto-orient](https://imagemagick.org/command-line-options/#auto-orient)» pour corriger la rotation de l'appareil photo de l'image affichée, en utilisant les métadonnées EXIF du format de fichier de l'image. Si vous ne voulez pas de menus, vous pouvez les désactiver en utilisant le paramètre «[-immutable](https://imagemagick.org/command-line-options/#immutable)» pour «magick display», afin qu'il sache ne pas autoriser l'édition.

Utilisation scriptée de Display

Avec ces options à l'esprit, voici ma recommandation pour utiliser «magick display» pour afficher les résultats d'un script shell complexe...

  magick display -delay 0 -loop 1 -coalesce -resize 800x600\>   some_random_image

Display avec X Windows

L'option «[-window](https://imagemagick.org/command-line-options/#window) root» peut être utilisée pour afficher une image sur la fenêtre d'arrière-plan (root) de X. Dans ce cas, le programme «magick display» quitte automatiquement. Par défaut, une image est répétée en mosaïque sur l'arrière-plan. Par exemple, essayez ceci...

  magick display -window root pattern:checkerboard

Pour beaucoup d'autres exemples de tuiles d'image, et leur génération, voir Canevas en mosaïque, et Exemples d'images d'arrière-plan. Si vous voulez utiliser une seule image pour votre arrière-plan X Windows, vous devrez peut-être connaître la taille de votre affichage X. Le programme «xdpyinfo», bien que ne faisant pas partie d'ImageMagick, peut vous donner cette information.

  xdpyinfo | grep dimensions:

Et ici, nous utilisons la sortie de «xdpyinfo» pour redimensionner une image afin qu'elle remplisse complètement l'arrière-plan X Windows.

  screen_size=`xdpyinfo | sed '/dimensions:/!d;s/^[^0-9]*//;s/ pixels.*//'`
  magick display  -resize $screen_size! -window root photo.jpg

Contrôle à distance de Display

Display fournit une option spéciale «[-remote](https://imagemagick.org/command-line-options/#remote)». Celle-ci recherchera une commande «magick display» déjà en cours d'exécution, puis lui passera les arguments donnés. Par exemple...

  magick display wizard: &
  sleep 5
  magick display -remote logo: &

Affichera l'image intégrée « wizard » dans une commande exécutée en arrière-plan. Le script attendra ensuite 5 secondes avant de la remplacer par l'image intégrée « logo ». Notez que si aucune commande «magick display» n'est en cours d'exécution, la commande courante ouvrira une fenêtre et ne quittera pas. Vous devriez donc aussi exécuter les commandes «display -remote» en arrière-plan par précaution. À ce moment, vous ne pouvez pas demander à un «magick display» distant de quitter. Par conséquent, la meilleure façon de fermer le display distant est soit de tuer le processus en cours d'exécution, soit de « supprimer » la fenêtre de display en utilisant une commande X window quelconque. Par exemple (en utilisant la commande non-IM «xdotool»)...

  xdotool search -class "display" windowkill

animate -- Montrer une animation d'images

À bien des égards, «magick animate» et «[display](#display)» sont extrêmement similaires. Cependant, «[display](#display)» ne montre que les images du fichier image donné « telles quelles » sans modification, ajoutant une pause minimale de 2 secondes entre chaque image pour l'entrée utilisateur. «magick animate», en revanche, appliquera tous les Paramètres d'animation GIF qui sont sauvegardés avec l'image, et n'affichera chaque image que selon ses paramètres de « délai temporel », bouclant vers le début pour répéter l'animation. En d'autres termes, «magick animate» « anime » correctement les formats d'animation là où «[display](#display)» ne le fait pas. Cependant, à cause de cela, le canevas virtuel de la première image contrôlera la taille de l'image de sortie, et les autres images seront superposées dans cette zone d'image. Bien sûr, comme les images sont animées, vous avez un contrôle fin du minutage d'affichage des images, en utilisant des options comme «[-delay](https://imagemagick.org/command-line-options/#delay)». La commande a aussi un argument supplémentaire «[-pause](https://imagemagick.org/command-line-options/#pause)» pour ajouter une pause supplémentaire à la fin de la boucle d'animation, au-delà de ce que spécifie le paramètre «[-delay](https://imagemagick.org/command-line-options/#delay)» de l'image finale. Par exemple, vous pouvez utiliser «magick animate» pour générer une Comparaison par scintillement de deux images très similaires, en utilisant quelque chose comme...

  magick image1.png image2.png -scale 400% miff:- |\
     magick animate -delay 50 -loop 0 -

J'ai écrit un script pour tirer parti de cette méthode appelé «[flicker_cmp](../static/img/scripts/flicker_cmp)», et je le trouve extrêmement utile pour repérer de très subtils changements d'intensité de pixel que j'aurais autrement manqués.

compare -- Rechercher les différences

Toutes les informations actuelles à ce sujet se trouvent dans la section Page de comparaison d'images des Exemples IM.

stream -- traitement en pipeline d'images massives

«magick stream» est un programme spécial conçu pour gérer l'extraction d'une portion d'un très grand fichier image. C'est le seul programme de ce type au sein d'ImageMagick, tous les autres lisent les images complètement en mémoire avant de les traiter (l'exception étant les images JPEG via le «[-size](https://imagemagick.org/command-line-options/#size)», car cette option est passée à la bibliothèque déléguée JPEG). Vous pouvez sélectionner une portion de l'image avec le paramètre «[-extract](https://imagemagick.org/command-line-options/#extract)». Et vous pouvez spécifier la profondeur des octets bruts avec le paramètre «[-depth](https://imagemagick.org/command-line-options/#depth)». Et enfin, vous pouvez sélectionner quels canaux de couleur extraire en utilisant l'option «[-channel](https://imagemagick.org/command-line-options/#channel)». Cependant, «magick stream» ne produira que les octets de couleur bruts de l'image (format RAW) tels que définis par la profondeur de l'image, vous devrez donc peut-être rediriger la sortie du segment extrait dans convert. Par exemple... |

  magick stream -map rgb -storage-type char -extract 100x100+200+100 logo: - |\
    magick -depth 8 -size 100x100 rgb:-   magick stream_wand.gif

[IM Output]
Pour plus d'informations et d'exemples, voir Gestion d'images vraiment massives.

import -- lire des images depuis l'affichage à l'écran

La commande «magick import» est un programme spécial qui peut être utilisé pour capturer et extraire des images depuis un affichage X windows. Par exemple, faisons-lui capturer et imprimer une fenêtre que vous sélectionnez dans votre affichage...

  magick import -page A4 -gravity center ps:- | lpr

Elle est en réalité rarement utilisée car le format de fichier spécial «[X:](files.html#x)» fournit aussi exactement la même fonctionnalité depuis la commande magick. La seule différence entre les deux est que «magick import» a plus de paramètres spécifiques à X window que le format «[X:](files.html#x)», comme la spécification de l'affichage, de l'écran et/ou de l'ID de fenêtre depuis lequel l'image doit être capturée. D'autres options incluent le contrôle du « bip » de l'affichage et des captures répétées. Si aucune fenêtre spécifique n'est spécifiée, la souris peut être utilisée pour sélectionner quelles parties de l'affichage l'utilisateur veut capturer comme image.

  • Si un simple clic de souris est utilisé, toute la fenêtre dans laquelle on a cliqué est capturée et retournée comme image. Notez que si d'autres fenêtres de l'affichage masquent une partie de la fenêtre sélectionnée, alors vous capturerez une image dans laquelle les autres fenêtres masquantes masquent la fenêtre sélectionnée en cours de capture.
  • Un clic dans la fenêtre racine, ou la sélection de «-window root», retournera tout l'écran.
  • Si un clic-glisser de souris est utilisé, une section Recadrée de tout l'écran est retournée, ce qui signifie bien sûr aussi que l'emplacement (décalage du canevas virtuel) sur tout l'affichage (taille du canevas virtuel, ou page) est aussi retourné.

D'autres options vous permettent d'éviter l'interaction humaine avec la souris en capturant tout l'écran («-window root»), ou une fenêtre spécifique, étant donné un titre de fenêtre, ou un ID de fenêtre X, que vous pouvez trouver en utilisant l'utilitaire X window «xwininfo». Vous pouvez aussi réduire la zone de la fenêtre sélectionnée en utilisant «[-extract](https://imagemagick.org/command-line-options/#extract)». Voir aussi le format d'entrée spécial «[X:](files.html#x)» comme alternative à l'utilisation de «magick import».

    Note to import from the Windows clipboard use
      magick clipboard:myimage image.png
    and not "import"

conjure -- langage de scriptage expérimental d'IM

A été conçu à l'origine pour permettre une utilisation scriptée d'Imagemagick, avec l'usage de listes d'images multiples, mais les améliorations apportées à IM v6 «magick» ont vu cette API expérimentale tomber en désuétude. C'est un langage basé sur XML. Cela dit, si vous voulez du XML, SVG peut mieux répondre à vos besoins. À mon avis, l'utilisation du script «magick conjure» est probablement meilleure et plus facile lorsqu'on traite des listes multi-images. Et il est utilisé, bien que pas très largement, en raison du manque d'exemples et de support de la part des utilisateurs.


Listes d'images...

L'un des points les plus importants à retenir avec ImageMagick, et qui déroute à la fois les nouveaux utilisateurs et les utilisateurs expérimentés, est que...

ImageMagick travaille avec des listes ordonnées d'images, non avec des images uniques

C'est-à-dire qu'IM ne traite pas avec une seule image, mais potentiellement une liste ordonnée d'images, qu'il s'agisse d'images individuelles séparées, d'un ensemble d'images qui se superposent les unes sur les autres, ou des images d'une animation. De plus, en général, tous les opérateurs d'image seront appliqués à toutes les images de la liste courante. Ainsi, si vous utilisez un opérateur «[-draw](https://imagemagick.org/command-line-options/#draw)», il ne dessinera pas seulement sur la dernière image de la liste, comme beaucoup de nouveaux utilisateurs le supposeraient, mais il dessinera sur toutes les autres images de la liste d'images courante, et le fait sur chaque image à tour de rôle. Les opérateurs de superposition d'images, tels que «[-coalesce](https://imagemagick.org/command-line-options/#coalesce)» et «[-layers](https://imagemagick.org/command-line-options/#layers)» remplaceront chaque image de la liste par une nouvelle image modifiée en fonction des autres images de la liste. Ils peuvent même ajouter ou supprimer des images supplémentaires ! De plus, les opérateurs sur liste d'images, comme «[-append](https://imagemagick.org/command-line-options/#append)», «[-mosaic](https://imagemagick.org/command-line-options/#mosaic)» et «[-fx](https://imagemagick.org/command-line-options/#fx)», remplaceront TOUTES les images de la liste d'images courante par l'image combinée résultante. C'est-à-dire qu'ils détruiront toutes les images, à moins qu'elles n'aient été sauvegardées au préalable en utilisant des Parenthèses, et que des Images clonées n'aient été utilisées. Voir Opérateurs sur liste d'images ci-dessous pour des exemples pratiques. Enfin, lorsqu'une nouvelle image est lue ou créée, IM ajoute seulement cette nouvelle image à la fin de la liste d'images courante (qui existe toujours). Certains formats (comme GIF) peuvent en réalité ajouter plusieurs images à la liste d'images courante, à moins qu'un Modificateur de lecture d'indexation spécial ne soit ajouté au nom de fichier d'entrée, pour limiter ce qui est lu. Lors de la sauvegarde des images, IM sauvegardera toute la liste d'images qui est en mémoire au moment de l'écriture. Si le format d'image le permet, IM écrira TOUTES les images dans un seul fichier. Si le format ne permet PAS de multiples images (par exemple JPEG), il écrira les images dans des fichiers séparés (voir Écrire plusieurs images).

Parenthèses -- traiter les images « en marge »

Avec la formalisation des options de ligne de commande, l'ordre de traitement est désormais exactement prévisible, et il est aussi devenu possible d'ajouter des parenthèses (ou crochets) au traitement d'image. Cela a été une fonctionnalité souhaitée par les utilisateurs d'IM depuis longtemps, et vous permet de faire des choses jamais possibles auparavant en une seule commande. Le crochet ouvrant «(» démarrera en effet une nouvelle liste d'images, sur laquelle tous les opérateurs encadrés travailleront. Le crochet fermant correspondant «)» ajoutera ensuite la liste d'images résultante (qui peut comporter plus d'une image, ou aucune) à la fin de la liste d'images précédente. En d'autres termes, utiliser des parenthèses signifie...

« J'ai besoin de faire un peu de travail dans une liste d'images séparée
avant d'ajouter les résultats à la fin de la liste précédente. »

Cela vous permet de travailler sur un sous-ensemble d'images, comme un bloc-notes, puis d'ajouter le résultat dans la liste d'images principale sans affecter les images que vous avez déjà lues auparavant ou sur lesquelles vous travailliez. Examinons quelques exemples simples... |

  magick  eye.gif  storm.gif  -negate  +append  cmd_negate.gif

[IM Output]
Comme vous pouvez le voir, l'opérateur «[-negate](https://imagemagick.org/command-line-options/#negate)» a inversé les couleurs des deux images, car les deux étaient dans la liste d'images courante en mémoire à ce moment-là. Mais en ajoutant des parenthèses, nous pouvons limiter l'inversion à la seule seconde image... |

  magick  eye.gif \(  storm.gif  -negate \) +append  cmd_bracket.gif

[IM Output]
Parce que l'image «storm.gif» est lue dans une liste d'images séparée de celle de la première image (générée par l'opérateur de liste d'images «(»), elle peut être inversée sans affecter la première image. Ensuite, nous pouvons ajouter le résultat à la liste d'images principale (c'est l'opérateur «)»), avant d'assembler les deux images comme précédemment. | _Les parenthèses doivent être données comme un argument séparé. C'est-à-dire que vous devez les séparer des autres arguments par des espaces. Vous ne pouvez pas les coller contre les arguments voisins. En d'autres termes, dans l'argument de ligne de commande IM «\(+clone» c'est incorrect, alors que «\( +clone» est correct.

Aussi, dans le dernier exemple, j'ai eu besoin de placer une barre oblique inverse '\' avant les parenthèses. C'est parce que, lors de l'utilisation d'IM sur une machine UNIX (linux), les parenthèses ont une signification spéciale pour le shell de la ligne de commande. Je dois donc échapper, ou mettre entre guillemets, les symboles de crochets lorsque je les utilise.

Les scripts Windows DOS ne nécessitent pas que les parenthèses soient échappées avec une barre oblique inverse. Voir Scripts Windows DOS pour cette différence et d'autres par rapport au scriptage linux.

_
---|---
Les parenthèses rendent aussi possible quelque chose qui n'était pas possible auparavant en une seule commande «magick». Générer des tableaux d'images ! |

  magick eye.gif news.gif  +append \
         \( storm.gif tree.gif +append \)   -append  cmd_array.gif

[IM Output]
Des tableaux comme celui-ci étaient bien sûr possibles en utilisant «magick montage» (voir Mode concaténation de Montage), mais utiliser une commande séparée rend les scripts de traitement d'image plus complexes. Bien sûr, si vous aimez rendre la commande elle-même plus semblable à un tableau, vous êtes libre d'ajouter quelques parenthèses supplémentaires. |

  magick \( eye.gif    news.gif  +append \) \
          \( storm.gif  tree.gif  +append \) \
          -append  cmd_array2.gif

[IM Output]
Le premier ensemble de parenthèses n'est pas strictement nécessaire, et ajoute une infime quantité de travail supplémentaire au traitement interne d'IM, mais il rend clair ce que fait la commande en séparant les étapes de traitement. Il peut aussi être plus facile pour les scripts de traitement d'image d'effectuer chaque étape de traitement comme une parenthèse séparée, comme moyen de séparer les étapes de traitement qu'il applique.

Parenthèses et paramètres

Les « paramètres » d'option ne sont pas affectés par les parenthèses, et se poursuivront à travers les opérateurs d'image entre parenthèses, jusqu'à ce que le paramètre soit changé ou désactivé. Par exemple... |

  magick -pointsize 24 \
          -font Candice label:Outside \
          \(              label:Inside \
             -font Gecko  label:Inside \) \
          label:Outside       -append   cmd_settings.gif

[IM Output]
Notez comment le premier paramètre «-font Candice» n'est PAS réinitialisé à son paramètre par défaut lors de l'entrée dans les parenthèses, tandis que le second «-font Gecko» n'est pas remplacé par le paramètre de police original lorsque vous quittez les parenthèses. En d'autres termes...

Les parenthèses créent seulement une séquence d'images séparée.
Elles ne limitent pas les paramètres, seulement les images en cours de traitement.

Depuis IM v6.4.1-4, la nouvelle option de contrôle opérationnel «[-respect-parentheses](https://imagemagick.org/command-line-options/#respect_parenthesis)» peut remplacer ce comportement. Lorsqu'elle est donnée au début d'une commande IM, elle fera que les parenthèses sauvegarderont et récupéreront aussi les paramètres précédents qui ont été donnés. Cela signifie que tout paramètre donné à l'intérieur des parenthèses ne restera défini que jusqu'à la fin des parenthèses. Par exemple... |

  magick -respect-parentheses   -pointsize 24 \
          -font Candice label:Outside \
          \(              label:Inside \
             -font Gecko  label:Inside \) \
          label:Outside       -append   cmd_settings2.gif

[IM Output]
Comme vous pouvez le voir, lorsque les parenthèses se sont terminées, le paramètre de police a été restauré à la police « Candice » précédente, au lieu de la police « Gecko » qui avait été définie à l'intérieur des parenthèses. Cela peut être très utile lorsque vous devez changer beaucoup de paramètres, pour seulement un court instant...

  magick -respect-parentheses \
          -font Arial   label:"This is a line of plain text." \
          \( -font Candice -pointsize 16 -fill red -undercolor lightblue \
              label:"A line using a lot of different settings." \) \
          label:"Text is back to normal -- like Magick\!" \
          -append  cmd_settings_lots.gif

[IM Output]

Opérateurs sur liste d'images

Avec l'accent plus fort mis par IM sur les séquences d'images, surtout au sein des parenthèses, il n'est pas surprenant qu'un ensemble de nouveaux opérateurs d'image ait été fourni pour manipuler les listes d'images.

Les arguments de ces opérateurs sont des nombres indexant la liste d'images, commençant à zéro («0») pour la première image, et un («1») pour la deuxième image, et ainsi de suite. Cependant, si vous donnez un index négatif, les images sont référencées depuis la fin (dernière image ajoutée) de la liste d'images. C'est-à-dire qu'un index de «-1» est la dernière image de la liste d'images courante (généralement la dernière image lue ou créée), «-2» pour l'avant-dernière, et ainsi de suite.

-delete {index_range_list}

L'opérateur de liste «[-delete](https://imagemagick.org/command-line-options/#delete)» est le plus simple des opérateurs sur liste d'images, il supprime simplement des images de la liste d'images courante. |

  magick font_[0-3].gif -delete 1 +append  seq_delete.gif

[IM Output]
La forme « plus » de l'opérateur, «[+delete](https://imagemagick.org/command-line-options/#delete)», ne prend pas d'argument, et supprime simplement la dernière image de la liste d'images courante. L'opérateur «[-delete](https://imagemagick.org/command-line-options/#delete)» acceptera aussi une liste de nombres séparés par des virgules, ou une plage de nombres à supprimer. |

  magick font_[0-7].gif -delete 1-4,6 +append  seq_delete2.gif

[IM Output]
Ou tout supprimer (et ajouter une nouvelle image)... |

  magick font_[0-7].gif -delete 0--1  tree.gif seq_delete3.gif

[IM Output]
L'argument '0--1' signifie supprimer les images de la première image (index 0) à la dernière image (index -1). En d'autres termes, TOUTES les images de la liste d'images courante. L'image tree a ensuite été ajoutée pour donner un résultat réel à IM, afin d'éviter une erreur de type 'no image'. Une image de sortie «[NULL:](files.html#null)» aurait aussi pu être utilisée, pour ne produire aucune sortie. Si un index d'image n'existe pas, ou si une plage de nombres est inversée, «[-delete](https://imagemagick.org/command-line-options/#delete)» ignorera silencieusement cette suppression d'image spécifique. Par exemple, l'argument '-25' tentera de supprimer la 25e dernière image de la liste d'images, mais ne fera silencieusement rien si moins de 25 images sont présentes. Vous pouvez ainsi générer une animation glissante de 24 images en utilisant une séquence comme...

  magick animation.gif  new_frame.gif  -delete -25  animation_new.gif

Cependant, aucune image ne sera supprimée si le nombre d'images était de 24 ou moins. En conséquence, l'animation grandira d'une image à chaque exécution de la commande, jusqu'à atteindre un maximum de 24 images. Après cela, la plus ancienne (première) image sera supprimée tandis qu'une nouvelle image est ajoutée. Depuis IM v6.3.4, «[-delete](https://imagemagick.org/command-line-options/#delete)» ne supprimera pas les images qui résulteraient en une inversion de la plage numérotée. Cela signifie que ce dernier exemple pourrait être réécrit ainsi...

  magick long_animation.gif  new_frame.gif  -delete 0--25  animation_new.gif

Cette fois, le «[-delete](https://imagemagick.org/command-line-options/#delete)» supprimera toutes les images entre la première et la 25e dernière image, laissant au plus 24 images dans la liste. Si seulement 24 images ou moins sont présentes, la plage d'images donnée à supprimer sera de fait inversée, et l'opérateur «[-delete](https://imagemagick.org/command-line-options/#delete)» ne supprimera rien.

-insert {index}

L'opération «[-insert](https://imagemagick.org/command-line-options/#insert)» est en quelque sorte l'opposé de «[-delete](https://imagemagick.org/command-line-options/#delete)». Elle prendra la dernière image de la liste d'images courante et l'insérera de sorte qu'elle soit positionnée à l'index donné. |

  magick font_[0-3].gif tree.gif -insert 1 +append seq_insert.gif

[IM Output]
Vous pouvez concevoir l'index d'insertion comme le nombre d'images qui devraient apparaître avant le point où l'image a été insérée. Bien sûr, l'image qui était à cet index (et toutes les images après elle) sera décalée vers la position d'index suivante pour faire place à la nouvelle image. Si une position d'index négative est utilisée, la position d'insertion est calculée après que l'image en cours d'insertion a été retirée de la fin de la liste. C'est-à-dire qu'elle agira comme si l'image en cours d'insertion ne faisait pas partie de la liste d'images originale. Ainsi, «-insert -2» fera « rouler » les trois dernières images, plaçant deux images entre l'image nouvellement insérée et la fin de la liste d'images. |

  magick font_[0-3].gif tree.gif -insert -2 +append seq_insert2.gif

[IM Output]
La forme plus «[+insert](https://imagemagick.org/command-line-options/#insert)» déplacera la dernière image vers l'avant de la liste d'images (index 0), faisant en effet rouler toute la liste d'images d'une image. |

  magick font_[0-3].gif tree.gif +insert +append seq_insert3.gif

[IM Output]
Pour faire l'inverse de ce qui précède (déplacer une image vers la fin de la liste d'images), on peut d'abord utiliser «[-duplicate](https://imagemagick.org/command-line-options/#duplicate) 1,0» pour copier la première image, puis utiliser «[-delete](https://imagemagick.org/command-line-options/#delete) 0» pour supprimer la première image.

-swap {index}[,{index}]

Simplement, «[-swap](https://imagemagick.org/command-line-options/#swap)» échangera les positions de deux images dans la liste d'images courante. Par exemple, «-swap 0,2» échangera la première et la troisième image de la liste d'images courante. |

  magick font_[0-3].gif  -swap 0,2  +append  seq_swap.gif

[IM Output]
La forme plus de cette option «[+swap](https://imagemagick.org/command-line-options/#swap)» échangera les deux dernières images de la liste d'images courante. En d'autres termes, elle est équivalente à «-swap -2,-1». |

  magick font_[0-3].gif  +swap  +append  seq_swap2.gif

[IM Output]
L'usage probablement le plus courant de cet opérateur est d'échanger deux images avant qu'elles ne soient utilisées par un opérateur de superposition d'image tel que «[-composite](https://imagemagick.org/command-line-options/#composite)», «[-flatten](https://imagemagick.org/command-line-options/#flatten)», «[-append](https://imagemagick.org/command-line-options/#append)» ou «[-fx](https://imagemagick.org/command-line-options/#fx)». |

  magick tree.gif  frame.gif   +swap \
          -gravity center  -composite   framed_tree.gif

[IM Output]
Depuis IM v6.4, un «[-swap](https://imagemagick.org/command-line-options/#swap)» avec un seul nombre échangera la dernière image avec le nombre donné. C'est-à-dire que «-swap 1» est équivalent à un «-swap 1,-1». |

  magick font_[0-3].gif  -swap 1  +append  seq_swap3.gif

[IM Output]

-reverse

L'opérateur «[-reverse](https://imagemagick.org/command-line-options/#reverse)» (ajouté à IM v6.3.4) inversera tout simplement l'ordre de toute la liste d'images. |

  magick font_[0-3].gif -reverse  +append seq_reverse.gif

[IM Output]
C'est fondamentalement un Opérateur Swap ultime.

-clone {index_range_list}

Cet opérateur sur liste d'images est un peu différent. Étant donné un numéro de liste d'images, «[-clone](https://imagemagick.org/command-line-options/#clone)» fera une copie d'une image qui a été sauvegardée par l'opérateur « crochet ouvrant » ou « parenthèse ». C'est-à-dire...

Clone ne devrait être utilisé qu'à l'intérieur de parenthèses

La raison en est qu'il vous permet d'extraire une copie d'une image depuis la dernière liste d'images sauvegardée (empilée), afin que vous puissiez la traiter davantage. Par exemple. |

  magick font_[0-2].gif \( -clone 1 -rotate 90 \) +append  seq_clone.gif

[IM Output]
La forme « plus » sans argument «+clone» fera simplement une copie de la dernière image de la liste d'images sauvegardée (empilée) afin que vous puissiez la traiter davantage |

  magick font_[0-2].gif \( +clone -flip \) +append  seq_clone2.gif

[IM Output]
Depuis la sortie de la version 6.2.2, l'opérateur «[-clone](https://imagemagick.org/command-line-options/#clone)» prendra une liste d'images séparées par des virgules, ou une plage d'index de la forme '_{index}-{index}_'. |

  magick font_[0-2].gif \( -clone 1-2 \) +append  seq_clone_range.gif

[IM Output]
Bien sûr, les index négatifs se comportent toujours exactement comme vous vous y attendriez. Par exemple, pour dupliquer toute la liste d'images, vous pouvez la spécifier en utilisant les nombres '0' (première image) et '-1' (dernière image), c'est-à-dire en utilisant la plage '0--1'. Cela peut paraître étrange mais c'est logique et fonctionne très bien. |

  magick font_[0-2].gif \( -clone 0--1 \) +append  seq_clone_all.gif

[IM Output]
Lorsque vous utilisez une liste d'index séparés par des virgules, les images sont extraites dans l'ordre que vous spécifiez. |

  magick font_[0-2].gif \( -clone 2,0,1 \) +append  seq_clone_list.gif

[IM Output]
Si les images d'une plage sont inversées (après que les index négatifs ont été convertis en un index d'image réel), les images extraites sont aussi inversées, dans le cadre du processus. |

  magick font_[0-2].gif \( -clone 2-0 \) +append  seq_clone_reversed.gif

[IM Output]

L'Opérateur Clone d'image peut être utilisé sans parenthèses, et copiera simplement les images de la liste d'images courante et les assemblera directement. Cependant, ce n'est pas son usage prévu et c'est à décourager car cela produira un résultat différent si vous entourez plus tard cet ensemble d'opérations de parenthèses. Aussi, dans les exemples ci-dessus, je génère des clones et les assemble à la liste d'images courante, pour démontrer l'opérateur. En réalité, je devrais utiliser l'Opérateur Duplicate d'image pour dupliquer les images de la liste d'images courante. Vous le devriez aussi, car cela rendra plus clair ce que vous essayez de faire. Le Registre mémoire d'image MPR: peut aussi être utilisé pour cloner des images et était disponible dans IM v5. C'est en fait toujours une méthode utile pour cloner et stocker toute une liste d'images (de longueur inconnue) pour usage ultérieur, et pas seulement une image individuelle unique comme le font les opérateurs sur liste d'images ci-dessus.

-duplicate {count}[,{index_range}]

Vous pouvez utiliser «[-duplicate](https://imagemagick.org/command-line-options/#duplicate)» pour générer des copies (clones) supplémentaires d'une image, depuis la liste d'images courante (ajouté dans IM v6.6.8-7). Les nouvelles images sont ajoutées à la fin de la liste. Contrairement à l'Opérateur Clone précédent (et plus ancien), il ne requiert pas l'usage de parenthèses. Par exemple, pour faire N copies supplémentaires d'une image (pour un total de N+1), vous pouvez faire ceci... |

  magick font_5.gif   -duplicate 4   +append seq_duplicate.gif

[IM Output]
Notez que cet opérateur peut générer des centaines d'images très rapidement, cependant jusqu'à ce que les images soient traitées, les images sont simplement des « clones » les unes des autres, partageant les données d'image réelles entre elles. Ainsi, les images dupliquées sont très efficaces en mémoire. Si plus d'une image est présente, la dernière image est dupliquée N fois... |

  magick font_[0-1].gif   -duplicate 3   +append seq_dup_n.gif

[IM Output]
Si vous voulez seulement dupliquer la dernière image une fois, vous pouvez utiliser la forme « plus » de l'argument. |

  magick font_[0-3].gif  +duplicate   +append seq_dup_last.gif

[IM Output]
Si vous voulez sélectionner une image particulière pour la dupliquer plusieurs fois, vous pouvez spécifier l'index de l'image comme second argument. |

  magick font_[0-2].gif  -duplicate 2,0  +append seq_dup_index.gif

[IM Output]
La partie index de l'argument peut contenir une liste ou une plage d'index d'image à dupliquer N fois. Par exemple, dupliquer toute la liste deux fois pour créer trois fois le nombre d'images original...

  magick font_[0-4].gif  -duplicate 2,0--1  +append seq_dup_list.gif

[IM Output]

Une animation de type Cycle de patrouille est aussi facile à créer en utilisant une liste d'images qui est inversée. |

  magick font_[0-9].gif -duplicate 1,-2-1 \
          -set delay 50 -set dispose previous -loop 0  seq_reverse_anim.gif

[IM Output]
Notez que je n'ai pas copié toute la liste d'images, mais ai sauté la copie de la toute première (0) et de la dernière (-1) image, faisant que les index d'image sont -2 à 1. Si votre version d'IM est plus ancienne que v6.6.8-7, vous pouvez quand même générer des images dupliquées, Opérateur Clone d'image, mais seulement un ensemble d'images à la fois. Ou en utilisant une technique qui détourne fondamentalement l'Opérateur Color Morph, générer plusieurs images dupliquées. L'astuce est de d'abord faire un clone pour générer deux images identiques, puis d'utiliser «[-morph](https://imagemagick.org/command-line-options/#morph)» pour générer les N-2 dernières images entre elles. |

  magick font_7.gif \( +clone \) -morph 3  +append seq_dup_morph.gif

[IM Output]
Notez cependant qu'en détournant l'Opérateur Color Morph, les images sont en réalité traitées, de sorte que morph prend du temps pour traiter réellement les images (ne produisant aucun changement). De plus, les images créées contiendront des copies réelles des données originales, et ne sont pas de simples clones économes en mémoire.

Combiner les opérations de séquence d'images

En utilisant ces opérateurs, vous pouvez extraire une copie d'une image spécifique, la modifier, et remettre cette image là où vous l'avez prise. Par exemple, ici je fais un «[-clone](https://imagemagick.org/command-line-options/#clone)» de la 2e image (index d'image '1'), je fais tourner les couleurs des images du bleu vers le rouge, puis je remplace l'image originale par celle modifiée en la «[-delete](https://imagemagick.org/command-line-options/#delete)» d'abord et en «[-insert](https://imagemagick.org/command-line-options/#insert)» la nouvelle. |

  magick font_[0-3].gif  \( -clone 1  -modulate 100,100,166 \) \
          -delete 1  -insert 1    +append seq_update_1.gif

[IM Output]
Une autre façon qui semble être devenue plus courante consiste à utiliser «[-swap](https://imagemagick.org/command-line-options/#swap)» pour remplacer l'image originale, puis «[+delete](https://imagemagick.org/command-line-options/#delete)» l'ancienne image qui est maintenant à la fin. Cela ne vous oblige à donner la position de l'image que deux fois, au lieu de trois fois. Une fois pour cloner, et une fois pour remplacer l'image modifiée. |

  magick font_[0-3].gif  \( -clone 2  -modulate 100,100,166 \) \
          -swap 2  +delete     +append seq_update_2.gif

[IM Output]
Ces techniques sont poursuivies ci-dessous dans la section suivante sur le Traitement et débogage d'images complexes.


Traitement et débogage d'images complexes

Grâce à l'ajout des Opérateurs de séquence d'images (voir ci-dessus), vous n'avez plus besoin de traiter les images une étape à la fois, en sauvegardant l'image et en la relisant à chaque fois. À la place, vous pouvez maintenant simplement conserver l'image intermédiaire en mémoire et continuer à la traiter. Cela économise beaucoup de temps, à la fois dans la conversion des images vers un format de fichier, et dans les E/S réelles pour sauvegarder l'image sur un disque lent. Ce type de commandes de traitement d'image peut devenir très long et complexe. Il est donc préférable d'écrire la commande dans des scripts, et d'essayer de placer chaque opération majeure sur une ligne à part pour faciliter la programmation et l'édition. Voir Conseils pour de meilleurs scripts Shell/PHP ImageMagick. Par exemple, ici je parcours toute une séquence de traitement complexe pour générer un bouton rouge sur un arrière-plan noir. |

  magick -size 30x30 xc:black -fill white  -draw 'circle 15,15 5,15' \
          \( +clone -shade 110x90 -normalize -negate -alpha Off \) \
          \( +clone -clone -2 -compose Plus -composite \) \
          \( -clone 0 -shade 110x50 -normalize -alpha Off \) \
          \( +clone -gamma 1,0,0 \) \
          \( -clone 2,-1  -compose Multiply -composite \) \
          -append  seq_process_fx.gif

[IM Output]
Chaque ligne de la commande magick génère une nouvelle image, sauf la dernière ligne où j'ai simplement Assemblé toutes les images de travail pour produire les résultats de toutes les étapes de traitement, plutôt que seulement l'image finale. Cette technique vous permet de suivre ce que chaque étape (encadrée par des parenthèses) de la commande très complexe a produit, et facilite le débogage de chaque étape d'un processus. Notez comment elle n'utilise que la taille et la forme de l'image initiale pour générer la forme initiale du bouton, vous êtes donc libre d'utiliser n'importe quelle forme ou image que vous voulez ! Le reste de la commande la traitera tout comme avant. Bien sûr, vous voudriez normalement Supprimer toutes les images de travail temporaires. C'est-à-dire que je remplacerais la dernière ligne de ce qui précède par quelque chose comme ceci...

          -delete 0--2  seq_process_result.gif

D'autres façons de vérifier les résultats consistent à rediriger le résultat dans la commande display, afin de visualiser les résultats à l'écran, au lieu de les sauvegarder dans un fichier image. C'est-à-dire, utiliser quelque chose comme ceci pour la dernière ligne...

          +append  miff:- | display -

Alternativement, au lieu de «[display](#display)», vous pouvez utiliser 'show:' qui affichera l'image résultante à l'écran, puis permettra à la commande originale de continuer ou de quitter. Voir Show, sortie d'affichage d'image pour plus d'informations.

          +append  show:

Vous n'avez en réalité même pas besoin du «[+append](https://imagemagick.org/command-line-options/#append)», auquel cas IM montrera chaque image en séquence, en appuyant sur la « barre d'espace ». Vous pouvez même devenir plus sophistiqué en utilisant la commande «[montage](#montage)» pour visualiser les résultats d'une manière plus agréable...

          miff:- | montage - -bordercolor blue -border 1 -geometry +2+2 show:

Ce type de traitement d'image permet aussi de visualiser facilement les images intermédiaires, immédiatement après la création de l'image. Fondamentalement, vous pouvez insérer des lignes comme celle-ci entre les instructions «\( ... \)».

          \( +clone -write show: +delete \)\

IM continuera automatiquement le traitement une fois que cette image intermédiaire aura été produite à des fins d'affichage. Voir Show, sortie d'affichage d'image. Alternativement, en insérant plutôt cette ligne, vous pouvez afficher toutes les images courantes générées jusqu'à ce point du traitement...

          \( -clone 0--1 -append -write show: +delete \)\

Après avoir débogué et stabilisé les étapes de traitement d'image, vous pouvez optimiser le code, afin de ne pas utiliser autant d'étapes de parenthèses, ainsi que moins d'Images clonées, résultant en moins d'images intermédiaires à Supprimer à la fin. Rappelez-vous aussi que la «Composition d'image», et/ou l'«Aplatissement de couches» fusionnent plusieurs images ensemble, pour ne laisser qu'une seule image résultante, ce qui peut réduire le nombre global d'images intermédiaires en mémoire. |

  magick -font Ravie -pointsize 48 -background black -fill white \
          label:'IM' -bordercolor black -border 5  seq_label.gif

  magick seq_label.gif -alpha Off \
          \( +clone  -shade 110x90 -normalize -negate \
             +clone  -compose Plus -composite \) \
          \( -clone 0 -shade 110x50 -normalize -gamma 1,0,0 -alpha Set \) \
          -delete 0 +swap  -compose Multiply -composite  seq_button.gif

[IM Output] [IM Output]
La capacité d'ImageMagick à traiter n'importe quelle image, d'une manière standard, programmée et automatisée, en utilisant plusieurs étapes toutes dans une seule commande, est ce qui fait d'IM un outil si puissant. Vous pouvez scripter une opération très complexe, puis l'appliquer à de nombreuses images. Les opérateurs sur liste d'images, et les parenthèses, ont juste rendu IM un ordre de grandeur plus puissant, vous permettant d'écrire des programmes de manipulation d'image plus complexes, avec moins de commandes. Pour un autre exemple de scriptage d'un processus d'images complexe, voir l'exemple Puces 3D scriptées à partir de formes. Voir aussi Conseils pour de meilleurs scripts Shell/PHP ImageMagick, sur les façons d'améliorer votre scriptage de traitement d'image, à la fois pour une édition et une compréhension plus faciles, et pour que d'autres puissent suivre ce que vous avez fait.


Métadonnées d'image : Attributs, Propriétés et Artefacts

Jusqu'à présent, nous avons examiné les images et le contenu réel ou les données qui composent l'image. Mais les images sont plus que de simples « données d'image ». Il y a beaucoup d'attributs ou de métadonnées qui font aussi partie d'une image, et affectent son traitement d'image et la façon dont les autres programmes devraient gérer l'image. Par exemple, une image pourrait avoir un « décalage » ou faire partie d'un « canevas virtuel » (page) plus grand. C'est-à-dire qu'une seule image peut n'être qu'une petite partie d'une image plus grande, composée d'une série d'autres images, pour former des « couches » ou une « animation ». IM attache aussi beaucoup de « paramètres » spéciaux utilisés par de nombreux opérateurs de traitement d'image pour modifier leur fonctionnement. Par exemple, la « couleur d'arrière-plan » à utiliser. Certains sont des paramètres globaux, qui sont identiques sur toute une liste d'images, tandis que d'autres peuvent être différents pour chaque image de la liste. Alors, quel genre de choses font aussi partie d'une image ? Beaucoup de choses...

  • Des métadonnées d'image qui sont généralement (mais pas toujours) sauvegardées avec l'image dans les formats de fichiers d'image. Par exemple : profils, étiquettes, légendes et commentaires, et information de canevas virtuel (page). Ce sont tous des paramètres par image, et peuvent être différents pour chaque image de la liste d'images courante.
  • Des paramètres globaux utilisés par de nombreux opérateurs de traitement d'image différents, mais généralement non sauvegardés avec l'image : Couleurs telles que background, bordercolor, fill et mattecolor, aussi font et pointsize, gravity, méthode de composition, gestion des canaux de couleur, profondeur de bits en lecture/écriture des valeurs de couleur.
  • Des paramètres experts et des defines, utilisés pour contrôler le fonctionnement plus profond et de bas niveau d'opérateurs de traitement d'image spécifiques. Par exemple : fenêtre de distorsion, arguments de méthode de composition spéciaux,
  • Comment l'image doit réellement être stockée en mémoire au sein d'ImageMagick : par exemple en RGB ou CMYK. Si un canal alpha est présent, et activé ou non, aussi la palette qu'une image pouvait avoir lors de sa lecture. Cependant, certains de ces paramètres de stockage sont codés en dur au moment de la compilation (comme la qualité des valeurs de couleur en mémoire).
  • Certains paramètres opérationnels généraux d'IM, tels que les paramètres de débogage ou verbeux, contrôlant généralement la sortie d'information ou la gestion des erreurs.

C'est-à-dire, beaucoup d'informations qui peuvent être sauvegardées, et/ou affecter la façon dont les images sont traitées. Et bien qu'elles puissent se répartir en un certain nombre de groupes, la façon dont ImageMagick gère chacune de ces choses et si elles sont globales ou spécifiques à l'image dépend beaucoup de la chose spécifique impliquée. Oui, je suis vague, parce que tant qu'on n'en arrive pas aux spécificités, il est très difficile de ne pas l'être. Cela peut aussi être très déroutant. Toutes ces valeurs sont stockées avec les images en mémoire de trois manières différentes...

Attributs
Ceux-ci sont stockés comme des éléments de structure de données spéciaux pour chaque image, généralement afin de permettre un accès rapide et direct par les divers opérateurs de traitement d'image. Par exemple : taille d'image, géométrie de canevas virtuel, background, fill, stroke, couleurs matte, pointsize, density, font, compose, interpolate, méthode virtual-pixel, blocs de profil, paramètres de délai temporel et de disposal ; et bien d'autres choses. Notez que certains de ceux-ci sont « spécifiques » à chaque image, tandis que d'autres sont traités comme un paramètre « global » qui est défini à la même valeur sur toutes les images par l'interface CLI, même s'ils sont quand même stockés comme partie de chaque image individuelle. Les attributs sont généralement modifiés en utilisant les nombreuses options, dans le cadre du traitement d'image normal, ou plus généralement en utilisant Set.
Propriétés
Ce sont un ensemble de chaînes clé-valeur de forme libre qui sont attachées à chaque image sur une base individuelle. Chaque image peut avoir un ensemble de chaînes complètement différent. Essentiellement, ce sont des éléments de métadonnées qui n'ont pas besoin d'être accédés ou décodés régulièrement, ou qui sont utilisés d'une manière spéciale. Des exemples typiques en sont : les chaînes d'étiquette, de légende et de commentaire ; les dates de création et de modification ; les chaînes définies par l'utilisateur ; les résultats de certains opérateurs. Les utilisateurs peuvent utiliser Set pour les définir ou les changer, tant que la « clé » ne correspond pas à un « attribut » connu.
Artefacts
C'est un ensemble global de chaînes de forme libre qui est commun à toutes les images. Il est utilisé pour contenir des paramètres globaux de forme libre qui définissent ou modifient la lecture et le traitement d'image de toutes les images. Un exemple en est le paramètre «verbose» qui fait que certaines opérations produisent des informations générales sur leurs actions, y compris une sortie magick identify plus verbeuse. Les utilisateurs peuvent modifier ces valeurs globales en utilisant Define (voir ci-dessous), ou avec un cas spécial de Set, (voir Utiliser Set "Option:" pour définir un artefact).

Comprendre ces trois méthodes de stockage est la clé pour savoir comment fonctionne la gestion des paramètres et des métadonnées au sein d'ImageMagick. Et vous permet de faire des techniques de traitement d'image très avancées et normalement difficiles à réaliser.

Définir/Changer les attributs/propriétés d'image

Les métadonnées simples sont des attributs d'image qui ont souvent la plus grande importance pour le traitement d'image. Si importants qu'ils sont décodés et rendus disponibles dans la structure de données d'image pour permettre un usage rapide par les opérateurs de traitement d'image. De telles données sont généralement modifiées de deux manières. Un changement direct des métadonnées d'image au moment où une image est lue ou créée. Ou une modification des métadonnées d'une image qui est déjà en mémoire. Par exemple, «-label 'string'» définira le commentaire dans chaque image qui est lue ou créée après que ce paramètre ait été défini. Cependant, «-set label 'string'» changera les métadonnées « label » de toutes les images de la liste d'images courante, déjà en mémoire. La raison des deux méthodes est due à la compatibilité ascendante historique et à la commodité. Fondamentalement, «-label» a traditionnellement été défini AVANT que l'image à laquelle il s'applique n'ait été lue. Il n'affecte que les images qui sont lues (ou créées) après qu'il ait été défini, ou changé. Par exemple....

  magick -label one  image_one.png \
          -label two  image_two.png     output_image_list

D'un autre côté, l'opérateur «[-set](https://imagemagick.org/command-line-options/#set)» change TOUTES les images qui sont dans la liste d'images courante, y compris celles lues précédemment. Vous devez donc généralement utiliser des parenthèses pour limiter à quelle image vous appliquez l'option, à moins de vouloir l'appliquer à TOUTES les images lues jusque-là.

  magick \( image_one.png -set label one \) \
          \( image_two.png -set label two \)  output_image_list

Vous pouvez annuler la définition du paramètre en utilisant «+label», auquel cas les métadonnées d'étiquette seront laissées intactes lorsque l'image est lue ou créée. Si l'image lue n'a pas non plus d'étiquette, IM se rabattra sur une valeur par défaut logique. Pour l'étiquette, c'est juste la chaîne vide. Vous pouvez voir des exemples plus détaillés et spécifiques des deux méthodes dans Étiquetage d'images avec Montage, qui en fait un usage intensif à des fins d'étiquetage. Cette « dualité » de définition des métadonnées d'image existe aussi pour d'autres options. Cela inclut... «[-comment](https://imagemagick.org/command-line-options/#comment)», «[-caption](https://imagemagick.org/command-line-options/#comment)», «[-page](https://imagemagick.org/command-line-options/#page)», «[-dispose](https://imagemagick.org/command-line-options/#dispose)» et «[-delay](https://imagemagick.org/command-line-options/#delay)». Le paramètre de taille de canevas virtuel et de décalage d'image (page) a cependant aussi une troisième méthode, utilisant un opérateur spécial «[-repage](https://imagemagick.org/command-line-options/#repage)» (voir Canevas virtuel ci-dessous).
Par exemple, ici j'utilise toutes les méthodes de paramétrage disponibles pour définir le « décalage de canevas virtuel » ou « page » des images individuelles, alors que je crée une Animation à partir d'elles... |

  magick -delay 100 -dispose Background \
            -page 100x100+5+10  eye.gif  \
            -page +35+30        news.gif  \
            \( storm.gif  -set page +62+50 \) \
            \( tree.gif   -repage   +10+55 \) \
          -loop 0  animation_page.gif

[IM Output]
Comme vous pouvez le voir, la méthode traditionnelle (non-set) est plus simple lors de la création d'une liste multi-images à partir de fichiers image séparés. Mais «[-set](https://imagemagick.org/command-line-options/#set)» ou les opérateurs spécialisés «[-repage](https://imagemagick.org/command-line-options/#repage)» sont meilleurs lorsque vous devez changer une image qui a déjà été lue en mémoire, ou qui a été créée par des méthodes de traitement d'image complexes. Par exemple, pour changer le décalage d'image de la troisième image (index d'image '2', ou l'arbre 'tree') dans le dernier exemple... |

  magick animation_page.gif \
          \( -clone 2 -set page +55+10 \) -swap 2  +delete \
          animation_mod.gif

[IM Output]
Pour un exemple plus extrême d'extraction et de modification d'images individuelles dans une liste d'images, voir Modification image par image d'une animation. Voici un autre exemple utilisant «[-set](https://imagemagick.org/command-line-options/#set)» pour spécifier un commentaire sur toutes les images, puis modifier une image spécifique.

  magick xc: -duplicate 9 \
              -set comment 'T minus %[fx:n-t]' \
              \( -clone 7 -set comment 'We have ignition!' \) -swap 7 +delete \
              -format "image #%p : %c" info:

[IM Text]

Vous pouvez utiliser «[mpr:](files.html#mpr)» comme façon alternative de définir des attributs sur des images en mémoire. Par exemple, ici nous prenons une image avec un commentaire « Bad », qui est en mémoire, et remplaçons le commentaire par un « Good »...

  magick -comment 'Bad Comment' rose: \
          -write mpr:rose +delete \
          -comment Good   mpr:rose  rose.jpg


  magick identify -format "image comment = %c" rose.jpg

[IM Text]

Cela fonctionne, mais est extrêmement maladroit et pénible à utiliser, surtout lorsqu'on traite plusieurs images comme une animation. En fait, c'est la seule façon de changer les métadonnées dans les images dans IM version 5. (Beurk !)

Attributs globaux généraux

En construction

Most of these attributes are generally set globally either before or after
reading images into memory (it makes no difference).  They are typically used
as a general control of the later image processing operations.

 * Many settings are simpley globally saved for use as needed
     -fill  -background  -bordercolor  -strokecolor  -mattecolor  -quantize
     +dither  -channels  -size  -gravity  -units  -density  -font  -pointsize
     -tile

 * Some settings affect the way an image is saved to disk, or the meta-data
   saved with the image.  This includes
     -loop  -compression  -quality  -depth
     -density  -background

 * -compose is awkward, as it can only be set globally. But if unset
   then individual images can have a different setting (for layering).

   Most of these however can be turned off, (using a + version) which
   causes the operator to retrieve the setting from image meta-data
   (eg: +background falls back to the original images meta-data if present)
   but more generally it falls back to some default value. (eg:
   +gravity falls back to 'None' to mean no gravity has been set).

   A few of these also get saved with images when written. Specifically
   the GIF format will save an the -background and -bordercolor as part of the
   images attributes, however these are normally ignored by programs which
   read these images.

You may have noticed that some settings are used in multiple places.
for example  -density

  * used in reading in many vector format images like
    Postscript, PDF, and WMF image formats.
  * also in special image generators such as label: caption: and text:
  * used as part of font drawing in -annotate -draw and -polaroid  operators.
  * And finally some formats save the density or resolution as part
    of the the image file format. For example postscript wrapped raster
    images, JPEG, and TIFF.

Is it any wonder then why settings can be so confusing.

Canevas virtuel, et les opérateurs Page et Repage

L'objectif principal des paramètres « page » ou « canevas virtuel » au sein d'IM est de définir comment la partie « réelle » d'une image (la partie qui contient réellement les données de pixels de couleur) s'inscrit dans un contexte plus large de « canevas ». C'est particulièrement important lorsque plusieurs images sont impliquées et doivent être positionnées les unes par rapport aux autres pour les Couches de plusieurs images et dans les Animations GIF. Il est aussi utilisé (d'où son nom du terme « page ») pour définir où une image s'inscrit sur une feuille de papier physique plus grande ou « page », en Postscript ou pour générer une image d'une « page » de Texte. Bien qu'il soit le plus souvent utilisé pour les Couches de plusieurs images et dans les Animations GIF, il est aussi impliqué dans la mémorisation des positions originales des images lors du Recadrage, et du Rognage des images, ainsi que dans la Composition sur liste multi-images, et dans les Distorsions d'image générales. Or, la « page » définit deux parties distinctes : un « canevas virtuel » ou zone, définissant un espace plus grand dans lequel l'image existe, et le « décalage » ou emplacement au sein de ce « canevas » où l'image réelle est positionnée. Bien que les « décalages » négatifs soient autorisés, la « taille du canevas » est limitée à une zone allant de 0,0 à la largeur et la hauteur données. C'est-à-dire que seul un canevas positif peut être spécifié.
Ces deux aspects, « taille » et « décalage », sont étroitement liés, mais vous voulez généralement gérer ces aspects séparément, ou d'une manière plus contrôlée. Ainsi, en plus des méthodes normales «[-page](https://imagemagick.org/command-line-options/#page)» et «[-set](https://imagemagick.org/command-line-options/#page) page», une option séparée «[-repage](https://imagemagick.org/command-line-options/#repage)» a aussi été fournie pour permettre un contrôle plus fin. Plus précisément...
+repage
Sans arguments, réinitialisera le canevas virtuel de l'image à l'image elle-même. C'est-à-dire, effacer simplement toute information de canevas virtuel que l'image peut avoir. Ceci est souvent important après l'application des opérateurs de subdivision d'image tels que le Recadrage, et le Rognage. C'est particulièrement important pour supprimer la taille et les décalages du canevas virtuel avant de sauvegarder aux formats de fichiers d'image GIF ou PNG, car de nombreux navigateurs utilisent l'information de canevas/décalage dans le cadre de l'affichage de l'image.
-repage WxH
Change la taille du canevas virtuel des images existantes, mais ne réinitialise pas la position de l'image sur ce canevas. Notez que fournir cet argument soit à «[-page](https://imagemagick.org/command-line-options/#page)» soit à «[-set](https://imagemagick.org/command-line-options/#set) page» réinitialisera l'emplacement de l'image à '+0+0', ce qui n'est probablement pas voulu..
-repage +X+Y
Déplace simplement l'image sur le canevas virtuel vers cet emplacement absolu sans changer la taille du canevas de l'image.
-repage +X+Y\!
Effectue un déplacement relatif de l'image sur le canevas virtuel en ajoutant les nombres donnés (positifs ou négatifs) à la position de décalage existante de l'image.
-repage 0x0
Tente de trouver la meilleure taille de canevas virtuel qui contient toute l'image. Cela échouera cependant pour les images avec un décalage négatif car il n'y a aucun moyen de spécifier un canevas virtuel avec des composantes négatives. Pour éviter les problèmes, il utilisera la taille de l'image réelle comme la plus petite taille de canevas possible. C'est-à-dire qu'il n'assignera jamais un canevas virtuel avec des dimensions nulles.
-repage 0x0+X+Y
Déplace le décalage des images, puis redimensionne le canevas virtuel pour s'adapter au mieux au nouvel emplacement des images.
-repage 0x0+0+0
Équivalent à un «[+repage](https://imagemagick.org/command-line-options/#repage)» ou «[+set](https://imagemagick.org/command-line-options/#set) page» ou un «[-set](https://imagemagick.org/command-line-options/#set) page 0x0». Toute information de canevas virtuel et de décalage est supprimée.
-repage WxH+X+Y
Équivalent à un «[-set](https://imagemagick.org/command-line-options/#set) page WxH+X+Y». C'est-à-dire, assigne simplement les valeurs données directement.
Notez que l'usage d'un indicateur '!' fera du décalage donné un déplacement relatif au décalage actuel des images. C'est-à-dire qu'un '-repage +5+0\!» déplacera le décalage des images de 5 pixels vers la droite, sans modifier la taille du canevas virtuel. Il n'est actuellement pas possible de spécifier directement un redimensionnement relatif de la taille du canevas virtuel. Cependant, cela peut être fait en utilisant les Échappements pourcent FX. Mais ce n'est pas couramment nécessaire. Un exemple est donné dans Rognage avec une couleur spécifique. La prudence est requise pour donner à une image une position de décalage finale négative, car le format de fichier GIF ne peut pas gérer cela, et la réinitialise à zéro si elle est négative. De plus, certains navigateurs deviennent fous lorsqu'on leur donne des images PNG avec des décalages négatifs. L'information de canevas virtuel qui est sauvegardée avec une image dépend du format. JPEG Comme beaucoup de formats de fichiers d'image, les images JPEG ne sauvegardent pas du tout l'information de canevas virtuel. L'information est simplement ignorée et perdue.
GIF La taille du canevas virtuel et les décalages seront sauvegardés dans le cadre de sa gestion d'animation GIF. Cependant, il ne gérera pas les décalages négatifs. Tout décalage négatif sera réinitialisé à zéro lors de la sauvegarde.
PNG Les décalages et même les décalages négatifs sont sauvegardés, mais le format de fichier PNG ne sauvegarde normalement pas l'information de canevas virtuel. Cependant, les images PNG sauvegardées par IM incluront l'information de taille de canevas virtuel, mais elle n'est utilisée que par d'autres commandes IM. Si IM lit une image PNG sans cet attribut spécifique à IM, il définira le canevas virtuel de l'image à une taille appropriée pour s'assurer que l'image est visible sur le canevas virtuel (comme pour un «-repage 0x0»). Pour les images sans décalage, cela signifie que le canevas virtuel a la même taille que l'image réelle.
Certains formats comme GIF et PNG sauvegardent l'information de canevas virtuel, d'autres comme JPEG ne le font pas. Tous les formats ci-dessus ont leurs propres limitations pour l'information de canevas virtuel. Seul le format de fichier interne MIFF n'a aucune de ces limitations. Notez que «[-page](https://imagemagick.org/command-line-options/#page)» a une signification spéciale pour les opérateurs générateurs d'image «text:» et «ps:» (voir Text: Fichiers texte multi-lignes et PS: Texte et graphiques au format Postscript). Par conséquent, ses significations normales de taille de canevas et de décalage ne sont pas utilisées lors de la création de ces images.

Set et propriétés par image

Cependant, IM ne peut pas créer une option pour gérer chaque paramètre possible qu'une image peut avoir. Ce serait tout simplement impossible. Sans compter que les utilisateurs aiment souvent ajouter ou définir leurs propres paramètres. Pour cette raison, l'option «[-set](https://imagemagick.org/command-line-options/#set)» peut en réalité définir N'IMPORTE QUEL paramètre avec N'IMPORTE QUELLE valeur. Si le paramètre n'est pas un attribut spécifiquement connu d'une image (à sauvegarder d'une manière permettant un accès rapide par les opérateurs), il est sauvegardé dans l'image comme une « Propriété » (un tableau de chaînes), et sera listé vers le bas d'une sortie «magick identify» verbeuse, ou récupéré et développé en utilisant les Échappements pourcent. L'image rose intégrée, par exemple, génère automatiquement trois « propriétés » : deux chaînes de date, et un « hachage de signature ». À cela, j'ai aussi ajouté mon propre paramètre « propriété » défini par l'utilisateur.

  magick rose:  -set my_property my_value   -verbose info: |\
    sed -n '/Artifacts/q; /Properties/,$ p'

[IM Text]

Certains opérateurs de traitement d'image retournent même des valeurs d'intérêt particulier comme « propriétés » d'image. Elles ne sont pas nécessaires aux autres opérateurs, donc ne sont pas stockées comme « attribut », mais sont sauvegardées comme une chaîne de « propriété » pour un usage possible par l'utilisateur. Par exemple, le pointsize final sélectionné par une Étiquette au meilleur ajustement sera sauvegardé comme une propriété d'image spéciale. |

  magick -size 100x label:Anthony  -verbose -identify  property_label.gif |\
    sed -n '/Artifacts/q; /Properties/,$ p'

[IM Output]
| [IM Text]


| Notez que le générateur label: lui-même définit aussi un attribut 'label', qui se trouve être sauvegardé comme une chaîne de propriété.
---|---
| _Toutes les 'propriétés' sont sauvegardées comme un type de données de chaîne de forme libre, et stockées comme métadonnées d'image.

À cause de cela, tous les 'attributs' ne sont pas sauvegardés comme 'propriétés', car de nombreux attributs ont besoin d'être sauvegardés et utilisés directement comme données numériques par les opérateurs de traitement d'image. Un exemple en est l'attribut de 'page' du canevas virtuel._
---|---
Ici, j'utilise un paramètre «[-format](https://imagemagick.org/command-line-options/#format)» d'identify pour faire produire par IM le pointsize de l'étiquette qu'il a créée et écartée. |

  magick -size 100x label:Anthony \
          -format 'pointsize = %[label:pointsize]pts' info:

[IM Output]
Utiliser cette information pour générer une nouvelle image d'étiquette est délicat et sera examiné ci-dessous. L'un des paramètres définis par l'utilisateur les plus utiles que vous pouvez utiliser est le paramètre «filename:». Par exemple...

  magick rose: -set filename:my_area '%wx%h' 'rose-%[filename:my_area].png'

Ce qui précède générera une image nommée «rose-70x46.png». Seuls les paramètres définis par l'utilisateur préfixés par la chaîne «filename:» peuvent être utilisés à l'intérieur du nom de fichier de sortie, comme mesure de sécurité, bien que n'importe quel nom puisse être utilisé. Pour plus d'exemples de ceci, voir Échappements pourcent de nom de fichier.

Define et artefacts globaux

Les valeurs définies sont connues sous le nom d'« Artefacts » et sont définies globalement sur toutes les images, et sont définies en utilisant l'opérateur spécial «[-define](https://imagemagick.org/command-line-options/#define)». L'objectif principal de tels « Artefacts » est de servir de paramètres spéciaux qui peuvent être utilisés comme paramètres supplémentaires (ou hors-bande) par les Codeurs de formats de fichiers d'image, ou les Opérateurs de traitement d'image. Fondamentalement, cela permet l'ajout de paramètres de forme libre pour des besoins spécifiques sans avoir besoin de créer un autre « attribut ». De plus, étant définis globalement, ils ne sont pas attachés à des images spécifiques, mais à toutes les images d'une séquence d'images, et sont disponibles quand aucune image n'a encore été lue ou créée. Notez que les API peuvent avoir plusieurs listes d'images, avec différents ensembles d'« artefacts » attachés, mais l'interface en ligne de commande (CLI) n'a qu'une seule liste d'images active, donc les « artefacts » sont réellement globaux.
En d'autres termes, les « artefacts définis » fournissent un moyen pour les utilisateurs experts de modifier le fonctionnement normal ou standard d'opérateurs spécifiques, au-delà de l'usage normal des arguments. Par exemple, les Paramètres du codeur JPEG, à la fois pour la lecture et l'écriture de telles images...
  -define jpeg:size=300x200
  -define jpeg:preserve-settings=1
  -define jpeg:optimize-coding=true

Options de distorsion d'image, telles que...

  -define distort:scale=2
  -define distort:viewport=44x44+15+0

Contrôles du filtre de redimensionnement, tels que

  -define filter:blur=0.75
  -define filter:support=1.25

Certains defines d'artefacts ont des raccourcis parce qu'ils sont utilisés très régulièrement par les utilisateurs. Par exemple, le contrôle opérationnel «[-verbose](https://imagemagick.org/command-line-options/#verbose)» (voir ci-dessous) est en réalité équivalent à utiliser «-define verbose», et crée ainsi un artefact «verbose». Par exemple...

  magick xc: -verbose info: |\
    sed -n '/Tainted:/q; /Artifacts:/,$ p'

[IM Text]

Il s'ensuit que la forme plus «[+verbose](https://imagemagick.org/command-line-options/#verbose)» supprime simplement l'artefact «verbose», et est ainsi équivalente à «+define verbose».

Artefacts et échappements pourcent différés

Les artefacts sont aussi souvent utilisés pour contenir des attributs spéciaux qui devraient être assignés aux images qui sont lues, après que le define ait été donné. Le paramètre «[-label](https://imagemagick.org/command-line-options/#label)» définit aussi simplement un artefact avec l'argument fourni par l'utilisateur. Cet artefact est ensuite converti en un Paramètre ou Propriété «label» après qu'une nouvelle image ait été lue ou créée. Par exemple, créer une image «rose:» avec une étiquette définie

  magick -label "%wx%h"  rose: -verbose info:  |\
      sed -n '/Tainted:/q; /Properties:/,$ p'

[IM Text]

C'est-à-dire que «[-label](https://imagemagick.org/command-line-options/#label)» a d'abord défini l'artefact «label» montré. Plus tard, quand l'image rose a été créée (et ses attributs de taille connus), IM a converti cet artefact global en une « propriété » spécifique à l'image, et n'a développé tout Échappement pourcent qu'à ce moment-là. Cela est connu sous le nom d'Échappements pourcent différés. La même chose se produit aussi avec quelques autres options de paramétrage, telles que «[-comment](https://imagemagick.org/command-line-options/#comment)» et «[-caption](https://imagemagick.org/command-line-options/#caption)». C'est à cause des Échappements pourcent différés que «[-define](https://imagemagick.org/command-line-options/#define)» ne sauvegardera que les chaînes, tandis que l'opérateur «[-set](https://imagemagick.org/command-line-options/#set)» fera le développement.

Utiliser Set "option:" pour définir un artefact

Nous avons montré ci-dessus comment vous pouvez «[-set](https://imagemagick.org/command-line-options/#set)» des Propriétés personnelles à but spécial, sur une base par image. Par exemple... |

  magick -size 80x40 xc:  -set myinfo 'I love IM!' \
          -gravity center -annotate 0x0 '%[myinfo]' \
          property_annotate.gif

[IM Output]
Mais comme les Propriétés sont attachées à des images spécifiques, vous ne pouvez pas les utiliser dans la création de nouvelles images. Par exemple, ceci échouera... |

  magick rose: -set myinfo 'I love IM!'  label:'== %[myinfo] ==' \
          -gravity center  -append   property_append_fail.gif

[IM Output]
Comme vous pouvez le voir, la propriété «myinfo» n'a pas été trouvée ou incluse dans l'étiquette assemblée. D'un autre côté, les Artefacts définis globalement sont disponibles pour les générateurs d'image. Ils doivent l'être afin que les générateurs d'image ou les codeurs de fichiers d'image puissent les lire pour divers paramètres de contrôle. Ainsi, utiliser un «[-define](https://imagemagick.org/command-line-options/#define)» fonctionnera comme prévu. |

  magick rose: -define myinfo='I love IM!'  label:'== %[myinfo] ==' \
          -gravity center  -append   artifact_append.gif

[IM Output]
Alors comment pouvez-vous créer une étiquette en utilisant une propriété ou un attribut d'image ? L'option «[-define](https://imagemagick.org/command-line-options/#define)» ne permet pas actuellement l'usage des propriétés d'image ! L'astuce est d'utiliser un préfixe spécial «option:» lors de l'utilisation de l'option «[-set](https://imagemagick.org/command-line-options/#set)». Cet ajout fait que «[-set](https://imagemagick.org/command-line-options/#set)» définit un « artefact » avec le nom qui suit le préfixe. Par exemple, ceci est équivalent au dernier exemple. |

  magick rose: -set option:myinfo 'I love IM!'  label:'== %[myinfo] ==' \
          -gravity center  -append   property_option_append.gif

[IM Output]
Plus important encore, l'option «[-set](https://imagemagick.org/command-line-options/#set)» développera les Échappements pourcent. Ce qui signifie que si nous avons une Propriété par image, nous pouvons la transformer en un Artefact global. Par exemple, ici je crée une étiquette, puis transforme la propriété «label:pointsize» que le générateur d'image «label:» a créée, en un artefact global «my_pointsize». En tant qu'artefact, cette information est disponible lorsque je crée une seconde image d'étiquette. J'assemble ensuite les deux étiquettes (avec une ligne «gray» de séparation). Un exemple très astucieux. |

  magick -size 100x -gravity center label:Anthony \
          -set option:my_pointsize '%[label:pointsize]' \
          -set option:my_height '%h' \
          -size 100x1 xc:gray \
          -size 100x label:'at %[my_pointsize]pt and %[my_height]px high' \
          -append  property_append.gif

[IM Output]
Notez le placement du «-set option:...» dans ce qui précède. Si vous deviez le placer APRÈS la création du «xc:gray», ce serait cette image qui serait utilisée pour définir l'artefact global. C'est-à-dire que parce que seules les propriétés de la dernière image définissent la valeur stockée dans l'artefact global. La raison est que seule la dernière image est utilisée pour définir l'artefact. En réalité, ce qui se passe vraiment est que «[-set](https://imagemagick.org/command-line-options/#set)» est appliqué à chaque image de la liste d'images courante, même s'il génère un artefact global. Ainsi, chaque image assignera ses propres propriétés dans l'artefact global, remplaçant les valeurs précédemment assignées. Une fois terminé, seule la dernière image aura « défini » l'artefact. | À ce moment, l'« échappement FX » n'a aucun moyen de lire les propriétés ou les artefacts. Et par conséquent, vous ne pouvez actuellement pas faire d'arithmétique sur de telles valeurs.
---|---

Type d'image lors de la lecture et de l'écriture

L'opérateur/paramètre «[-type](https://imagemagick.org/command-line-options/#type)» définit le style ou l'espace colorimétrique à utiliser quand une image est lue ou écrite, pour s'assurer que l'image résultante (en mémoire, ou dans le fichier image) est ce à quoi vous vous attendez. Dans ce cadre, il peut effectuer certaines modifications d'Espace colorimétrique au moment des E/S de fichier, mais seulement pour s'assurer que l'image est sous une forme attendue. Par exemple, «[-type](https://imagemagick.org/command-line-options/#type)» a un paramètre spécial «bilevel» qui peut être utilisé pour transformer et sauvegarder des images comme une image monochrome à deux couleurs pour certains formats d'image. De même, «TrueColor» et «TrueColorAlpha» peuvent être utilisés pour forcer une image TIFF à être sauvegardée comme une image RGB pleine couleur même si l'image est en réalité purement en niveaux de gris. D'autres paramètres incluent «GrayScale» et «GrayScaleAlpha» qui s'assureront que l'image écrite est uniquement en niveaux de gris (sans ou avec transparence, respectivement). Ou «Palette» pour forcer l'usage d'une carte de couleurs indexée dans les formats qui supportent cette option. Lors de la lecture des formats de fichiers d'image, un paramètre «[-type](https://imagemagick.org/command-line-options/#type)» de «TrueColorAlpha» forcera une image JPEG en cours de lecture à avoir un canal « Alpha » ajouté à son stockage en mémoire, même si le format JPEG lui-même ne peut pas gérer la transparence. Lors de l'écriture vers un format de fichier PNG, définir un «[-type](https://imagemagick.org/command-line-options/#type)» de «Pallette» le forcera à utiliser un format d'image interne PNG à couleur indexée «PNG8». De même, utiliser «BiLevel» forcera IM à tramer les images couleur en noir et blanc pour la plupart des formats de fichiers d'image. Malheureusement, la signification et les capacités exactes de «[-type](https://imagemagick.org/command-line-options/#type)» dépendent du format d'image spécifique que vous lisez ou écrivez. Voir les diverses zones d'exemples des Formats de fichiers d'image. Pour des exemples PNG spécifiques, voir Formats de sortie PNG.


Contrôler la qualité des images

Depth - Profondeur de bits du format de fichier

Qualité (Quality) et Profondeur (Depth) sont deux termes souvent évoqués dans les forums de discussion et dans ces pages d'exemples, donc j'aimerais les expliquer un peu. La Qualité est un paramètre fixé au moment de la compilation dans ImageMagick, et sert à déterminer la taille des valeurs utilisées pour stocker les images dans la mémoire d'IM et durant le traitement. Fondamentalement, cela signifie la Qualité de traitement pour laquelle un IM spécifique a été compilé. La Profondeur est la taille des valeurs utilisées quand une image est lue ou sauvegardée depuis/vers un format de fichier d'image. Elle est donc bien plus variable, et contrôlée par le paramètre «[-depth](https://imagemagick.org/command-line-options/#depth)», ou par la « profondeur » originale de l'image qui a été lue. Plus à ce sujet dans un instant. Rappelez-vous...

La Qualité est la taille des valeurs 'en mémoire', et est compilée dans IM.
La Profondeur est la taille des valeurs du format de fichier, et est variable.

Or, la plupart des formats d'image sont de profondeur 8. C'est-à-dire qu'ils utilisent 8 bits (ou une valeur de 0 à 2⁸-1) pour contenir chaque valeur de couleur utilisée dans l'image. C'est-à-dire une valeur de 0 à 255 pour le rouge, 0 à 255 pour le vert, et 0 à 255 pour le canal bleu. Plus communément, ce type d'image est désigné comme image 24 bits (c'est-à-dire « bits par pixel », et NON « bits par valeur » comme utilisé par le paramètre «[-depth](https://imagemagick.org/command-line-options/#depth)»). Cela inclut des formats tels que JPEG). Si le canal alpha est aussi impliqué, alors vous obtenez 4 x 8 bits de valeurs, ou une image de 32 bits/pixel. C'est ce qu'une image PNG utilisera généralement, bien que de telles images puissent aussi être sauvegardées en utilisant 16 bits par valeur. Ce que beaucoup de gens appellent des images 8 bits (8 bits/pixel) sont en réalité des images avec une palette ou carte de couleurs 8 bits (donnant une limite maximale de 256 couleurs sur toute l'image). Les données de pixels réelles sont une valeur d'index 8 bits (0-255) qui est ensuite utilisée pour rechercher la couleur de ce pixel dans la table de couleurs. C'est-à-dire que le « raster matriciel » (tableau de pixels) n'est qu'un index utilisé pour rechercher la couleur réelle du pixel dans une table de couleurs séparée. En d'autres termes, bien qu'une image 8 bits ait aussi une profondeur de 8 bits, les 8 bits sont un index dans une table de correspondance de couleurs et non une couleur réelle. Les images GIF en sont un bon exemple. La transparence dans de telles images est généralement gérée soit en spécifiant une couleur spécifique comme représentant la transparence (définie en utilisant le paramètre de métadonnées «[-transparent-color](https://imagemagick.org/command-line-options/#transparent-color)») comme dans le format GIF, soit en utilisant un profil spécial pour un nombre spécifique de couleurs dans la table de couleurs (comme utilisé par certaines images PNG8 (qui est aussi une image à couleur indexée comme GIF)). En général...

24 bit images are : 3 x 8 bit values - 3 color channels only
32 bit images are : 4 x 8 bit values - 3 colors + Alpha channel
8 bit images are : 8 bit color indexed image, with a 256 color limit

Parce que la plupart des formats d'image ne sauvegardent les valeurs de couleur qu'à une profondeur de 8 bits/valeur, beaucoup de gens ont installé IM en utilisant un niveau « Q » ou de qualité de profondeur 8, ce qui requiert bien moins de mémoire et traite les images plus rapidement qu'une version Q16 plus normale d'IM. Souvent 3 fois plus vite ou plus. Ces versions Q8 fonctionnent bien pour le traitement d'image général (recadrage, etc.) et la conversion entre formats, et peuvent aussi bien fonctionner pour générer des images simples, annoter ou superposer des images. Cependant, bien qu'un IM de basse qualité soit plus rapide et plus économe en mémoire, il ne fonctionne pas bien lorsque vous commencez à utiliser des séquences complexes d'opérations impliquant de multiples changements de couleur, redimensionnements, assombrissements, éclaircissements, corrections de couleur par gamma ou histogramme, etc.. En Q8, les images intermédiaires en mémoire resteront stockées en qualité 8 bits, et ainsi de multiples opérations introduiront chacune de petites distorsions de couleur incrémentales. Le résultat peut être des effets d'arrondi, surtout pour les couleurs extrêmes proches du blanc et du noir. (voir ci-dessous).

Quality - Qualité de bits en mémoire

Rappelez-vous, la Qualité est un paramètre fixé au moment de la compilation dans ImageMagick, et sert à déterminer la taille des valeurs utilisées pour stocker les images dans la mémoire d'IM et durant le traitement. Elle ne peut pas être changée, sauf en recompilant ImageMagick depuis les sources. Un ImageMagick « Q16 » (la valeur par défaut d'IMv7) utilisera ainsi au moins deux fois plus de mémoire pour contenir la même quantité de données d'image qu'une version « Q8 » d'ImageMagick, et selon votre processeur, sera beaucoup plus lent, bien que sur les processeurs d'aujourd'hui cela soit peu probable. De même, vous pouvez compiler des versions « Q32 » et « Q64 », bien que celles-ci ne soient pas très courantes, et soient généralement utilisées uniquement dans le traitement d'image très haut de gamme. Voir aussi la nouvelle option de qualité de compilation HDRI ci-dessous. Un ImageMagick « Q16 » vous permet aussi de sauvegarder plus d'information binaire pour chaque valeur de pixel. C'est-à-dire que les valeurs de couleur sont sauvegardées comme des entiers allant de «0» à «2^_quality_ -1». Cette dernière valeur est connue dans la programmation IM comme la « QuantumRange » actuelle (ou l'ancien nom obsolète « MaxRGB »). Plus le paramètre de qualité utilisé lors de la compilation d'IM est élevé, plus les valeurs de couleur sont précises lors du stockage de l'image en mémoire. Cela signifie que si, en traitant une image, vous générez beaucoup de très petites et légères variations de couleur, alors ces variations seront préservées dans le stockage en mémoire d'ImageMagick, et pourront être utilisées dans les étapes de traitement ultérieures. Des opérations telles que le redimensionnement, les filtres de bruit, le flou, l'accentuation, le moyennage, les modifications globales de couleur, de gamma et d'histogramme, ou un grand nombre d'opérations de composition d'image complexes, peuvent toutes produire des erreurs de couleur indésirables dans un IM Q8, créant des artefacts de couleur très distincts sur l'image résultante. Bien sûr, sauvegarder l'image finale dans un format d'image de « profondeur » 8 bits « quantifiera » ces valeurs de couleur de nouveau en 8 bits, mais durant le traitement de l'image en mémoire, la qualité intermédiaire de l'image est préservée. Certains formats sont disponibles qui préservent l'information de niveau de qualité supérieur utilisée par IM. Par exemple, le format IM MIFF, le format de pixel énuméré TXT, ainsi que les formats d'image NetPBM. Cependant, bien qu'une version Q8 d'IM vous permette de produire des images de profondeur 16 bits, une telle image n'aura quand même que l'information équivalente à une profondeur de 8 bits, car la qualité n'est tout simplement pas présente en mémoire, pour être sauvegardée. | _Si IM lit une image en utilisant des valeurs 8 bits (de nombreux formats d'image le font), la 'profondeur' de l'image sera définie à 8 bits, et lors de la sauvegarde, IM sauvegardera normalement l'image à cette même profondeur de valeur de 8 bits, même si vous traitez l'image en utilisant une version Q16 d'IM. Vous pouvez remplacer ce paramètre ou effacer le paramètre «[-depth](https://imagemagick.org/command-line-options/#depth)» pour cette image, afin qu'IM la sauvegarde à la meilleure profondeur possible pour que l'image corresponde à la qualité en mémoire d'IM.

Notez aussi que de nombreux opérateurs qui génèrent des couleurs supplémentaires comme le Redimensionnement d'image, réinitialiseront aussi la 'profondeur' de l'image en mémoire au paramètre de qualité fixé à la compilation, afin qu'IM essaie ensuite de la sauvegarder à une profondeur supérieure, si possible.

_
---|---

HDRI - qualité en virgule flottante

HDRI, ou High Dynamic Range Imaging, a été conçu à l'origine pour représenter plus naturellement la capacité de nos yeux à voir simultanément les zones claires et sombres d'une scène. En termes pratiques de traitement d'image, il fait bien plus que cela. Une version HDRI d'IM (la compilation par défaut) est compilée pour utiliser des valeurs en virgule flottante pour les images stockées en mémoire, afin de vous permettre d'effectuer une gestion HDRI plus exacte des opérations d'image, de manière à empêcher de telles opérations de « rogner » (clip) les couleurs de l'image aux extrêmes. HDRI utilise la même plage de couleurs que le Paramètre de qualité fixé à la compilation pour le stockage en mémoire. C'est-à-dire que les valeurs vont toujours de «0» à la « Quantum Range » pour signifier du noir au blanc. Mais les valeurs sont sauvegardées en utilisant la virgule flottante (des «doubles» en termes de programmation C) plutôt que des entiers, de sorte que les effets de « quantum » de l'arrondi des valeurs en entiers ne seront pas visibles. Les valeurs ne sont pas non plus « rognées » lorsqu'elles dépassent la « Quantum Range » ou deviennent négatives. Fondamentalement, vous perdez bien moins d'information entre les étapes de traitement. HDRI est ainsi vital lorsque vous prévoyez d'utiliser un traitement mathématique extrêmement lourd des images, impliquant l'usage temporaire de valeurs négatives, ou une forte mise à l'échelle vers de très petites ou très grandes valeurs. C'est particulièrement important pour les utilisateurs qui veulent faire pleinement usage des capacités de Transformées de Fourier rapides (FFT), et c'est ici que vous verrez le plus d'exemples d'une version HDRI d'IM, dans ces pages. Pour des informations sur la compilation d'une version HDRI d'IM, voir Activer HDRI dans ImageMagick sur le site web principal d'IM, ainsi que pour des informations spécifiques à Windows et Ubuntu Linux, voir la Discussion d'annonce des Transformées de Fourier sur les forums utilisateurs. Un opérateur important à garder à l'esprit lors de l'utilisation de HDRI est «[-clamp](https://imagemagick.org/command-line-options/#clamp)». Cette option rognera les valeurs d'une image qui tombent en dehors de la plage normale pour les images. C'est-à-dire que toute valeur négative sera rognée à zéro, et toute valeur supérieure à « QuantumRange » sera définie à cette valeur. Elle n'« arrondit » cependant PAS les valeurs en virgule flottante en entiers.

Effets de quantum, HDRI vs non-HDRI

Arrondi quantum... Par exemple, ici j'utilise les opérateurs Level et Reverse Level pour comprimer la plage de couleurs d'une image en dégradé de sorte qu'elle n'utilise que les valeurs de 0 à 15, puis la décomprimer de nouveau. Le dégradé résultant est aussi affiché comme un profil d'image (en utilisant le script «[im_profile](../static/img/scripts/im_profile)») pour faciliter le suivi. |

  # Using a normal non-HDRI version of IM...
  magick -size 20x600 gradient:  -rotate 90 \
          +level 0,15  -level 0,15  level_rounding.png
  im_profile -s level_rounding.png  level_rounding_pf.gif

[IM Output]

[IM Output]

Remarquez le sévère arrondi (effets de quantum) qui est maintenant visible, formant des marches dans le profil des dégradés. Comme seulement 16 valeurs de niveau de gris ont été utilisées, vous avez effectivement converti l'image en une profondeur de couleur de seulement 4 bits ! Notez que ce type de problème d'arrondi quantum devient très courant dans une version IM Q8, simplement en effectuant plusieurs tâches de traitement d'image, au-delà d'un simple redimensionnement et recadrage des images. Quelque chose que l'IM Q16 plus normal résout avec son usage de mémoire supplémentaire. L'arrondi quantum ne devient un problème pour l'IM Q16 que lorsque vous utilisez un traitement d'image vraiment lourd tel que les Transformées de Fourier rapides (FFT) ou la fusion d'images contenant différents temps d'exposition (intensité lumineuse) pour générer des images à haute plage dynamique. C'est après tout pourquoi HDRI a été ajouté à ImageMagick en premier lieu. Brûlure et rognage... Et ici j'« étire » le dégradé de sorte que les valeurs de couleur noire et blanche originales aillent bien au-delà de la « Quantum Range », avant d'être restaurées de nouveau. |

  # Using a normal non-HDRI version of IM...
  magick -size 20x600 gradient:  -rotate 90 \
          -level 20%  +level 20%    level_clipping.png
  im_profile -s level_clipping.png  level_clipping_pf.gif

[IM Output]

[IM Output]

Vous pouvez voir qu'un IM normal perd l'information aux deux extrémités. Les valeurs de l'extrémité inférieure sont « brûlées » lorsque les valeurs deviennent négatives, tandis que les valeurs supérieures sont « rognées » lorsqu'elles dépassent les limites maximales de la « Quantum Range » des entiers utilisés pour stocker les valeurs. Version HDRI d'ImageMagick résultat... Répéter ces deux opérations en utilisant une version HDRI d'ImageMagick ne produira aucun des arrondis, brûlures ou rognages des résultats ci-dessus, mais aura un coût supplémentaire en termes de mémoire (les doubles ont besoin de plus d'espace que les entiers). Côté vitesse, cela ne coûte pas grand-chose, et peut même en réalité être plus rapide sur de nombreux matériels informatiques d'aujourd'hui, en raison des accélérateurs de virgule flottante.

  # Using HDRI version of IM...
  magick -size 20x600 gradient:  -rotate 90 \
          +level 0,15  -level 0,15  level_rounding_hdri.png
  magick -size 20x600 gradient:  -rotate 90 \
          -level 20%  +level 20%    level_clipping_hdri.png
  im_profile -s level_rounding_hdri.png  level_rounding_hdri_pf.gif
  im_profile -s level_clipping_hdri.png  level_clipping_hdri_pf.gif

[IM Output] [IM Output]

Comme vous pouvez le voir, le dégradé reste parfaitement intact, même après une forte compression ou un fort étirement de l'image et inversement.

Clamp pour imposer les limites de l'image en HDRI

Vous pouvez forcer une image HDRI à être « rognée » par la plage de valeurs d'image normale en utilisant «[-clamp](https://imagemagick.org/command-line-options/#clamp)» entre les deux options de level. Par exemple... |

  # Using a HDRI version of IM...
  magick -size 20x600 gradient:  -rotate 90 \
          -level 20%    -clamp   +level 20%   level_hdri_clamp.png
  im_profile -s level_hdri_clamp.png  level_hdri_clamp_pf.gif

[IM Output]

L'usage de «[-clamp](https://imagemagick.org/command-line-options/#clamp)» ci-dessus a fondamentalement généré la même image que ce que j'aurais obtenu avec une version non-HDRI normale d'ImageMagick. Cependant, cette image ne serait pas exactement la même qu'un résultat non-HDRI, car bien que «[-clamp](https://imagemagick.org/command-line-options/#clamp)» brûle et rogne les valeurs de l'image, il n'ajoute pas d'effets d'arrondi quantum. Ainsi, les valeurs ne sont arrondies en entiers que durant la sauvegarde finale vers un format de fichier d'image non-HDRI. L'option «[-clamp](https://imagemagick.org/command-line-options/#clamp)» peut être d'une importance vitale lors de l'utilisation de HDRI, pour atteindre le résultat que vous voulez.

Formats de fichiers HDRI

Bien sûr, sauvegarder une image qui contient de très petites, grandes ou négatives valeurs dans un format de fichier d'image normal sera aussi rogné, quantifié, et même réduit en couleurs, pour les mêmes raisons que ci-dessus. Par conséquent, si vous avez besoin de sauvegarder des images qui n'ont pas été « normalisées » de nouveau dans une échelle de 0 à « Quantum Range », alors vous devrez utiliser l'un des rares formats de fichiers d'image en virgule flottante. Certains formats d'image qui peuvent gérer les valeurs en virgule flottante (sans rognage ni arrondi) incluent NetPBM PFM. C'est le seul format de fichier d'image qui ne requiert aucune option spéciale supplémentaire.
D'autres formats de fichiers d'image peuvent aussi être utilisés, mais requièrent un commutateur spécial pour spécifier que le fichier doit sauvegarder des valeurs en virgule flottante. Plus précisément, vous devez spécifier l'option de codeur «**-define quantum:format=floating-point**» pour demander des valeurs en virgule flottante dans ces formats de fichiers. Le paramètre «-depth» peut aussi être utilisé pour définir quel type de valeurs en virgule flottante est utilisé. Si «-depth 32» ou moins (la valeur par défaut dans la plupart des versions d'IM) est utilisé, alors des « floats » normaux sont utilisés. Mais si «-depth 64» est défini, alors des « doubles » sont utilisés pour les données en virgule flottante écrites vers, ou lues depuis, le format de fichier d'image. Les formats de fichiers d'image qui peuvent utiliser cet indicateur spécial pour sauvegarder des valeurs en virgule flottante incluent... TIFF, FITS et MIFF. Le format de fichier de données brutes RGB sauvegardera (et lira) aussi la virgule flottante, bien que ce format ne sauvegarde pas la taille de l'image, et que vous deviez aussi spécifier les paramètres de virgule flottante pour la lecture.
Une autre option de codeur spéciale est «-define quantum:scale=65535.0». Celle-ci sera multipliée avec la valeur lue depuis le fichier image, afin de mettre à l'échelle la valeur depuis une valeur en virgule flottante normalisée de 0.0 à 1.0, vers la plage de valeurs internes de 0.0 à 65535.0. Donc si vous obtenez une image presque noire pure lors de la lecture d'une image en virgule flottante, essayez d'ajouter cette option pour mettre à l'échelle les valeurs lues dans la plage appropriée.
Le format de fichier direct mémoire-vers-disque MPC sauvegardera aussi les valeurs en virgule flottante utilisées par une version HDRI d'IM, et n'aura pas besoin d'indicateurs spéciaux. Mais comme avec tout fichier image MPC, seule exactement la même version (compilation spécifique) d'IM sur la même machine lira correctement un tel fichier. Par conséquent, il n'est bon que pour des fichiers temporaires de « lecture rapide » pour le traitement d'image scripté, et non pour le stockage à long terme.

Quel niveau Q devrais-je utiliser

En résumé, quel type d'ImageMagick devrais-je utiliser ? Q8, Q16, HDRI ? Q8 a une empreinte mémoire plus petite, car les valeurs d'image sont sauvegardées en mémoire comme des valeurs 8 bits, tout comme la plupart des formats de fichiers d'image. Pour de la composition de base, de la conversion de format d'image, un simple « redimensionnement unique », ou du dessin sur des images, alors Q8 est « suffisant ». Q16 double l'empreinte mémoire car les valeurs de couleur sont sauvegardées en valeurs 16 bits (précision supérieure). Mais si vous prévoyez de faire un traitement d'image lourd impliquant de nombreux niveaux d'opérations, tels que « changement d'espace colorimétrique (même juste de sRGB vers/depuis RGB), redimensionnement, distorsions, flou, ombres, etc. etc. » tous sur la même image, dans la même commande (ce qui est recommandé pour la même raison), alors avoir du 16 bits est mieux car cela préservera la précision inférieure des images entre les étapes de traitement. Vous pouvez aussi alors sauvegarder dans des formats de fichiers 16 bits (PNG, MIFF, PbmPlus) entre les commandes, même si la sauvegarde finale est de nouveau vers un format de fichier d'image 8 bits comme ICO et JPEG. (C'est la valeur par défaut pour cette raison) Le niveau suivant est Q16 HDRI, qui porte la précision à des valeurs en virgule flottante 32 bits, ce qui vous permet de traiter des valeurs d'image qui deviennent très petites ou très grandes sans les effets d'arrondi et de rognage des images. Vous pouvez même traiter des valeurs négatives, surtout dans certains espaces colorimétriques. Essentiellement, il est utilisé pour empêcher la perte de données d'image lors du traitement d'images dans des extrêmes, comme lors de l'utilisation d'images HDRI, de transformées de Fourier, ou simplement de hauts niveaux de compression, d'expansion que vous pouvez obtenir dans le traitement mathématique de données brutes. C'est, en un mot, cela. Q16 est un bon compromis pour la plupart des opérations impliquant des distorsions et des compositions multi-images et des effets de traitement d'image. Q8 si la mémoire est limitée mais que vous ne faites que des opérations simples, HDRI si vous faites des opérations extrêmes.

Densité ou résolution d'image

La Densité d'une image est la résolution spatiale (d'espace) de l'image. C'est-à-dire que la densité (généralement exprimée en dpi, ou points par pouce) d'une image définit à quelle distance les uns des autres (ou quelle taille) se trouvent les pixels individuels, et ainsi la taille globale de l'image en termes du monde réel, et est généralement utilisée pour l'affichage ou l'impression de l'image sur un dispositif du monde réel. C'est juste un nombre stocké avec l'image pour indiquer aux dispositifs de sortie tels que les imprimantes et les écrans combien de points (ou pixels) par pouce l'image devrait être affichée, OU pour les formats vectoriels comme postscript, PDF, MWF et SVG, l'échelle de pixels à dessiner en utilisant toutes les coordonnées du monde réel qui peuvent être utilisées dans l'image. C'est complètement indépendant de la taille réelle en pixels de l'image, ou de la Qualité en mémoire et de la Profondeur du format de fichier de sauvegarde qui définit la « résolution » de couleur de l'image. Vous pouvez définir la résolution ou la densité d'une image lors de sa lecture dans IM en utilisant la fonction «[-density](https://imagemagick.org/command-line-options/#density)», avant de lire ou d'écrire l'image, ou en utilisant «[-set](https://imagemagick.org/command-line-options/#set) density» après avoir lu l'image. Un paramètre «[-units](https://imagemagick.org/command-line-options/#units)» peut être utilisé pour définir si le nombre de densité est exprimé dans les termes par défaut (impression traditionnelle) de «PixelsPerInch» ou dans des unités métriques plus modernes de «PixelsPerCentimeter» (PNG utilise ces dernières). Par exemple, une image de 200x200 pixels à 600 dpi sera ainsi affichée dans un carré de 1/3 de pouce en termes du monde réel. D'un autre côté, une image bien plus petite de 72x72 pixels à 72 dpi s'affichera dans un carré de 1 pouce, dans le monde réel, bien que sa qualité spatiale ne soit pas très bonne en comparaison. La première étant de « qualité photo » tandis que la seconde étant de « résolution d'affichage ». En termes pratiques, une image de 72 dpi paraîtra « numérique » ou « pixellisée » sur une imprimante. D'un autre côté, une grande photo numérique moderne prise à 1200 dpi devrait probablement être rééchantillonnée pour la montrer sur un écran, ou vous ne verrez peut-être qu'une infime partie de l'image. Pour plus d'informations sur la résolution et la densité des images, voir les notes sur l'Opérateur de redimensionnement Resample. Pour des informations sur la résolution et la densité pour le texte et les polices, voir Pointsize et taille de police réelle.

Photoshop et la densité

L'éditeur d'image « Photoshop » sauvegarde une copie supplémentaire de la résolution des images dans un profil séparé (nommé «8BIM») dans l'image, qu'IM ne touchera PAS. Ainsi, si vous changez la résolution d'une image avec IM, vous devriez probablement aussi retirer les profils de l'image avant de la recharger dans « photoshop », ou vous pourriez ne voir aucun changement de densité. Vous pouvez retirer juste ce profil d'une image en utilisant «+profile 8bim». D'une Discussion du forum IM, Jesper Nilsson (alias stroker), suggère d'utiliser le programme «[exiftool](http://www.sno.phy.queensu.ca/~phil/exiftool/)» pour modifier directement les Tags Photoshop de l'image. Par exemple

  exiftool -g -Photoshop:XResolution=300 -Photoshop:YResolution=300 file.tif

Tests de vitesse basés sur la qualité

Quelques tests de vitesse ont été soumis à IM Forum, Q8 vs. Q16 speed (& HDRI). Résultats approximatifs de l'article ci-dessus

  • La quantité de mémoire utilisée par pixel par canal est comme vous vous y attendriez. Q8 - 1 octet, Q16 - 2 octets, Q32 & tout HDRI - 4 octets, Q64 (HDRI) - 8 octets.
  • Le 64 bits a des améliorations de précision significatives pour les opérations en virgule flottante, mais c'est aussi le cas de toute autre version HDRI d'ImageMagick.
  • Côté vitesse, Q8, Q16 et HDRI sont tous à peu près à la même vitesse (à supposer que l'ordinateur ait une MPU à virgule flottante), Q32 environ 25 % plus lent et Q64 (HDRI) environ 50 % plus lent.

| Notez que Q64 utilise automatiquement des « double long floats », plutôt que des entiers 64 bits. C'est en quelque sorte un HDRI en double précision, mais bien que très précis, c'est le plus lent de tous les paramètres de qualité en mémoire, et le plus intensif en mémoire.
---|---
| _La vitesse réelle dépendra des spécifications de votre ordinateur, et de si vous avez un co-processeur mathématique ou non. Si ce n'est pas important, utiliser le Q16 par défaut, ou le HDRI standard, est probablement le mieux.

Si c'est important, alors vous devriez faire des tests similaires de vitesse, sur votre équipement, mais en utilisant les opérations que vous prévoyez typiquement d'utiliser dans votre traitement d'image.

_
---|---


Contrôles spéciaux ImageMagick

IM a aussi quelques options spéciales qu'il utilise pour contrôler son fonctionnement opérationnel, le rapport d'informations, et à des fins de débogage. -version | Produit la version d'IM, la qualité d'image qu'il utilise, et quand il a été construit. IM quittera implicitement après avoir produit cette information. | | Dans IMv7, «[-version](https://imagemagick.org/command-line-options/#version)» quittera si c'est la SEULE option sur la ligne de commande. C'est-à-dire qu'il rendra l'argument final d'« écriture implicite » optionnel. Si d'autres arguments sont présents, OU s'il a été lu depuis un script (fichier ou pipeline), la commande magick ne quittera pas, mais continuera.
---|---
-list | C'est une option purement informationnelle qui listera les éléments demandés, puis quittera. C'est-à-dire que vous ne pouvez pas l'utiliser avec une autre option, ou du traitement d'image. Elle est fournie purement à des fins informationnelles, surtout dans les scripts pour vérifier les options d'entrée et si IM a certaines options implémentées. L'argument donné définit quelle information vous voulez lister. Par exemple, une liste de noms de 'color' que vous pouvez utiliser, (tels qu'utilisés par («[-fill](https://imagemagick.org/command-line-options/#fill)», «[-background](https://imagemagick.org/command-line-options/#background)», «[-mattecolor](https://imagemagick.org/command-line-options/#mattecolor)», «[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)»). Tandis que 'font' liste les polices qui sont spécifiquement connues d'IM. Voici juste quelques-unes des listes les plus intéressantes... | list | que peut lister «[-list](https://imagemagick.org/command-line-options/#list)» !
---|---
font | Polices connues (IM connaît aussi les polices X et PS)
type | types d'image de fichier («[-type](https://imagemagick.org/command-line-options/#type)» )(après IM v6.3.5-7)
ou la liste des polices (avant cette version d'IM)
color | noms de couleurs connus pour diverses options de couleur.
dispose | tous les paramètres de disposal GIF («[-dispose](https://imagemagick.org/command-line-options/#dispose)»)
compose | les compositions alpha disponibles (inclut les méthodes internes)
layers | quelles méthodes multi-images «[-layers](https://imagemagick.org/command-line-options/#layers)» ont été implémentées
distort | Les méthodes de distorsion d'image disponibles.
morphology | Les méthodes morphologiques d'image disponibles.
kernel | Les noyaux morphologiques/de convolution qui sont disponibles.
command | quelles options de ligne de commande (à la fois paramètres et opérateurs) sont disponibles
configure | quels étaient les paramètres de configuration utilisés pour construire ImageMagick
Ce dernier paramètre de 'liste' 'Configure' est très important, car il vous dira quelles bibliothèques et délégués étaient disponibles quand IM a été construit. Il inclut aussi le numéro de version « point », qui était absent de la sortie «[-version](https://imagemagick.org/command-line-options/#version)» normale des versions plus anciennes. (Voir Gestion de version dans les scripts pour un exemple d'utilisation de cette information. IM quittera implicitement après avoir produit cette information. | Dans IMv7, «[-list](https://imagemagick.org/command-line-options/#list)» quittera si c'est la SEULE option sur la ligne de commande. C'est-à-dire qu'il rendra l'argument final d'« écriture implicite » optionnel. Si d'autres arguments sont présents, OU s'il a été lu depuis un script (fichier ou pipeline), la commande magick ne quittera pas, mais continuera.
---|---
-verbose | Rapporte des informations supplémentaires sur certaines des opérations les plus complexes.
Par exemple «[-segment](https://imagemagick.org/command-line-options/#segment)», qui produit beaucoup de détails de quantification de couleur.
Et «[-distort](https://imagemagick.org/command-line-options/#distort)», produisant des informations supplémentaires et des équivalents 'FX' à la distorsion d'image demandée. Ainsi que le suivi du nombre de changements lors de l'itération d'une opération «[-morphology](https://imagemagick.org/command-line-options/#morphology)». C'est particulièrement utile pour générer des informations d'image plus détaillées depuis les sorties «[info:](files.html#info)» et «[-identify](https://imagemagick.org/command-line-options/#identify)». Vous pouvez désactiver le paramètre en utilisant la forme 'plus' de l'option, «[+verbose](https://imagemagick.org/command-line-options/#verbose)».
-regard
-warnings
| Le '-regard-warnings' rendra fatals certains avertissements informatifs sur certains formats de fichiers d'image. Il fait aussi qu'IM retourne un statut de sortie correct selon de telles conditions d'erreur. Il peut être utilisé dans les scripts pour « assainir » les fichiers image fournis depuis des sources non contrôlées. C'est-à-dire que cette option fera échouer et quitter IM, si l'image JPEG ou TIFF n'était pas correcte, complète ou contenait des profils 'inconnus'.
-precision {number} | Contrôle le nombre de chiffres significatifs.
Lorsqu'IM produit des valeurs en virgule flottante en réponse à diverses requêtes de débogage, verbeuses ou de formatage, ce paramètre définit la précision que vous voulez pour cette sortie. Par défaut, il limitera de tels nombres à 6 chiffres significatifs, mais cet opérateur augmentera ou diminuera cette valeur par défaut. Le paramètre par défaut de 6 peut aussi être modifié en utilisant la variable d'environnement 'MAGICK_PRECISION'. Il affecte la sortie de...

  • La commande «[identify](#identify)» verbeuse ou les paramètres «[-identify](https://imagemagick.org/command-line-options/#identify)», «[-print](https://imagemagick.org/command-line-options/#print)» et «[-format](https://imagemagick.org/command-line-options/#format)».
  • La sortie 'debug()' d'un opérateur «[-fx](https://imagemagick.org/command-line-options/#fx)» et l'échappement de chaîne '%[fx:...]'. (Voir FX, opérateur de traitement d'image DIY
  • Les valeurs en virgule flottante d'un noyau «[-morphology](https://imagemagick.org/command-line-options/#morphology)» quand «-set option:showkernel 1» a été activé. Voir Afficher le noyau.

-quiet | Ne rapporte pas les messages d'avertissement informatifs. Seulement les erreurs proprement dites comme les erreurs d'E/S, ou les mauvaises options, etc. C'est particulièrement utile pour «[-crop](https://imagemagick.org/command-line-options/#crop)» ou «[-trim](https://imagemagick.org/command-line-options/#trim)» et «[-layers](https://imagemagick.org/command-line-options/#layers) optimize» qui rapportent normalement des avertissements de 'missed images', lorsque l'opérateur ne produirait aucune image 'réelle' comme résultat. Cela apaisera aussi les codeurs de certains formats de fichiers d'image complexes qui peuvent contenir des 'unknown chunks' qu'IM ignorerait normalement. Par exemple, lorsqu'IM lit des images TIFF, ou d'étranges formats vidéo MPEG (AVI).
-respect
-parenthesis
| Fait que les parenthèses non seulement sauvegardent et restaurent la liste d'images courante mais aussi tous les paramètres opérationnels courants sont sauvegardés et restaurés. Cela signifie que lorsqu'elle est donnée, tout paramètre défini à l'intérieur des parenthèses sera réinitialisé lorsque les parenthèses se terminent. Voir les exemples dans Parenthèses et paramètres ci-dessus.
-ping | Pour la commande «identify». IM essaiera d'éviter de lire et décoder complètement le format de fichier image en entier pour des informations de base telles que la taille des images.
-monitor | Rapporte un pourcentage de traitement durant chaque étape du traitement d'image, surtout pour les tâches de traitement d'image très grandes ou longues. Dans une API de plus bas niveau, vous utiliseriez SetImageInfoProgressMonitor() ou SetImageProgressMonitor()
-debug | Rapporte verbeusement exactement ce qu'IM fait, dans divers domaines. L'argument est une liste d'options séparées par des virgules, telles que... | exception | Ce qu'IM ne comprend pas dans la commande
---|---
cache | Voir combien d'espace disque IM met en cache
configure | Montre les tentatives de recherche d'IM pour trouver ses fichiers de configuration.
trace | Rapporte les points de trace au début de chaque fonction de bibliothèque
annotate | Rapporte les métriques de police quand une police est utilisée avec «[-annotate](https://imagemagick.org/command-line-options/#annotate)».
command | IMv7 -- montre les options de ligne de commande (ou le script) au fur et à mesure de leur traitement. Par ex. : le traitement des options.
all | Montre chaque point de trace durant le traitement
C'est très très TRÈS verbeux et non recommandé
Si «[-debug](https://imagemagick.org/command-line-options/#debug)» est utilisé, l'emplacement de la sortie de journalisation est contrôlé par le fichier «log.xml». Celui-ci est par défaut réglé sur «console». Pour le faire sauvegarder dans un fichier, changez <log output="console"/> en <log output="file"/> Pour l'usage en ligne de commande et API, vous pouvez aussi définir une variable d'environnement pour régler le niveau de débogage en utilisant les actions par IM.

  export MAGICK_DEBUG=all

Limiting image size (quick note)

To prevent excess memory usage, set your memory limit to say 16GB. Now set
the disk limit to 4GB. ImageMagick will exit if the disk limit is exceeded,
with a "cache resource exhausted" exception.