Exemples ImageMagick -- Gestion des fichiers image
- Modificateurs de lecture
- Gestion des méta-caractères dans le nom de fichier d'entrée
-
Séquences d'échappement par pourcentage dans le nom de fichier
- Images compressées GZip
- Attributs enregistrés
- Images chiffrées
- Écrire des images multiples (adjoin)
- Numéro de séquence (scène) de départ
-
Écrire une image, plusieurs fois
Formats de fichier de sortie spéciaux (spécifiques à IM)
miff:info:null:txt:sparse-color:histogram:mpr:mpc:fd:inline:clipboard:-- Lecture/écriture depuis/vers le presse-papiers Windowsephemeral:-- Suppression automatique après lectureshow:,win:, etx:-- Afficher les images directementx:(en entrée) -- Capture d'affichage et redessin Délégués et codeurs pour les formats d'image - Exemple de délégué de sortie
- Lister les délégués et les fichiers source
- Délégué d'impression
- Lancement de commandes externes
- Délégués Postscript et PDF
- Conversion directe de format par délégué (taint)
-
Gestion d'images vraiment massives Longs flux de nombreuses images, séquences vidéo Pour traiter une image, vous avez non seulement besoin d'opérateurs pour travailler sur les images, mais aussi de moyens pour lire et écrire l'image dans autant de formats de fichier différents que possible. Dans cette section, nous examinons les formats de fichier d'IM en général.
Résumé des formats d'image
L'une des utilisations les plus courantes d'ImageMagick n'est pas du tout de modifier les images, mais seulement de magick une image d'un format d'image vers un autre. En fait, la raison originelle de la création d'IM était précisément ce genre de conversion de format d'image. C'est pourquoi la commande IM principale s'appelle « magick ». À cette fin, ImageMagick peut gérer un éventail déroutant de formats d'image et de fichier. À cet éventail s'ajoutent un grand nombre de formats d'entrée et de sortie spéciaux pour des images de test intégrées, la création simple d'images, et des formats d'image spécifiques à la programmation de scripts shell et de programmes. Pour une liste complète, voir la page des formats d'image d'IM sur le site web d'IM. Tout cela peut être intimidant pour un nouvel utilisateur d'ImageMagick. Mon meilleur conseil est d'ignorer la plupart des formats de fichier, car vous n'en aurez probablement jamais besoin. Concentrez-vous plutôt sur ce que vous voulez faire, et essayez de le faire. Si vous ne savez pas comment, essayez de chercher un exemple dans ces pages et sur le web. Pour les formats d'image présentés dans les exemples IM, voir Index de référence, formats de fichier.
Lecture des images
Par défaut, IM tentera de déterminer le type de format d'image grâce aux codes d'identification « magic » du fichier contenus dans le fichier lui-même. Si cela échoue cependant, vous devrez spécifier le format de fichier des images en utilisant le suffixe du fichier, ou en ajoutant un préfixe de format. Certains formats ne liront aucun fichier et ignoreront tout nom de fichier donné. Voici quelques-unes des images intégrées courantes...
logo: granite: rose:
Certaines d'entre elles généreront des images en fonction d'arguments donnés comme nom de fichier et peut-être d'une option supplémentaire « [-size](https://imagemagick.org/command-line-options/#size) » contrôlant la taille finale de l'image...
-size 30x30 canvas:red
-size 30x30 gradient:yellow-lime
-size 30x30 pattern:fishscales
magick import:
Dans certains cas, vous pouvez même utiliser plusieurs formats...
-size 30x30 tile:pattern:gray95
C'est cependant excessif dans ce cas, car le codeur de format « pattern: » intègre déjà le codeur « tile: ». Mais cela rend clair ce que vous aviez l'intention de faire. IM peut aussi télécharger une image publiée sur le « world wide web » en spécifiant l'URL de cette image. Cela fournit essentiellement un codeur d'image « http: », ce qui explique pourquoi ça fonctionne. |
magick http://www.ict.griffith.edu.au/anthony/images/anthony_castle.gif \
-resize 100x100 castle_logo.png
![[Sortie IM]](../static/img/files/castle_logo.png)
Comme vous pouvez le voir, cette commande lit l'image depuis le WWW et la redimensionne avant d'enregistrer finalement le résultat sur le disque. | Lorsqu'un préfixe de format de fichier est donné, tout suffixe donné dans le cadre du nom de fichier n'a aucune incidence sur la façon dont le fichier est lu. Ceci est en fait essentiel pour la lecture de certains formats de fichier comme le format « [text:](text.html#text) » par opposition au format « [txt:](#txt) ». Bien sûr, si un générateur d'image lit réellement un fichier image pour le traiter d'une manière particulière (par exemple « [tile:](canvas.html#tile) »), alors le suffixe (ou préfixe) de format de fichier redevient important, comme c'était le cas dans le dernier exemple
---|---
Un préfixe de codeur spécial « implicit:: » peut être utilisé pour « désactiver » toute utilisation de codeurs, permettant l'usage de ':' dans le nom de fichier. Les noms de fichier peuvent contenir les « méta-caractères de fichier » spéciaux, tels que '*' et '?' intégrés. IM développera ces caractères pour générer une liste de noms de fichier à lire, évitant ainsi le besoin d'un shell externe pour le faire, ou les problèmes de limites de longueur de la ligne de commande. Par exemple...
magick montage '*.jpg' -geometry 50x50+2+2 image_index.gif
Cela produira une seule image d'index en montage de tous les fichiers JPEG du répertoire courant. Notez cependant que j'ai dû mettre l'argument entre guillemets pour empêcher mon shell UNIX de développer les noms de fichier plutôt qu'ImageMagick. Voir ci-dessous pour une spécification plus complète de « magick montage ». Bien sûr, les shells Linux peuvent aussi développer les caractères '*' et '?' qui leur sont passés sans guillemets. Cependant, dans certains cas, vous pourriez vous heurter aux « limites de la ligne de commande » si la liste de fichiers se développe en un très grand nombre de noms de fichier. Voici d'autres exemples d'utilisation d'un shell Linux pour développer le nom de fichier...
magick image_[0-9].gif image_[1-9][0-9].gif animation.gif
magick image_?.gif image_??.gif image_???.gif animation.gif
magick image_(?|??|???|????).gif animation.gif
Voir aussi le modificateur de lecture Read Frames ci-dessous, pour un numéro incrémental formaté dans le nom de fichier. Si le nom de fichier est simplement la chaîne d'un seul caractère '-', IM lit l'image depuis l'entrée standard. |
cat tree.gif | magick - -frame 5x5+2+2 read_stdin.gif
![[Sortie IM]](../static/img/files/read_stdin.gif)
Notez que certains formats de fichier image vous permettent simplement de concaténer plusieurs fichiers image ensemble en un long flux multi-images. Ces formats incluent les formats d'image simples PbmPlus/NetPBM, ainsi que le format de fichier spécial propre à IM, MIFF: |
for image in eye.gif news.gif storm.gif
do
magick $image miff:-
done |
magick - -frame 5x5+2+2 +append read_multiple_stdin.gif
![[Sortie IM]](../static/img/files/read_multiple_stdin.gif)
Le caractère spécial '@' au début d'un nom de fichier signifie remplacer le nom de fichier par le contenu du fichier donné. Autrement dit, vous pouvez lire un fichier contenant une liste de fichiers ! |
echo "eye.gif news.gif storm.gif" > filelist.txt
magick @filelist.txt -frame 5x5+2+2 +append filelist.gif
![[Sortie IM]](../static/img/files/filelist.gif)
Vous pouvez aussi utiliser '@' avec le nom de fichier spécial '-' pour lire les noms de fichier depuis l'entrée standard. |
echo "eye.gif news.gif storm.gif" |\
magick @- -frame 5x5+2+2 +append filelist_stdin.gif
![[Sortie IM]](../static/img/files/filelist_stdin.gif)
| La lecture d'une liste de noms de fichier depuis un fichier en utilisant la syntaxe '@' a été ajoutée dans IM v6.5.2-1.
---|---
| Par mesure de sécurité, cela ne fonctionne qu'avec de réels fichiers image. Cela ne fonctionne pas avec les générateurs d'image comme « rose: » ou « label:string ». Cela ne peut pas non plus être utilisé pour « inclure » des options de ligne de commande depuis un fichier.
---|---
Modificateurs de lecture ou réglage Extract
Une image peut être modifiée immédiatement après avoir été lue en mémoire, mais avant que la ou les images ne soient réellement ajoutées à la séquence d'images courante. Vous pouvez spécifier un réglage « [-extract](https://imagemagick.org/command-line-options/#extract) ». Par exemple, ici je rogne l'image rose... |
magick -extract 32x32+20+5 rose: +repage rose_extract.gif
![[Sortie IM]](../static/img/files/rose_extract.gif)
Ou vous pouvez ajouter un modificateur de lecture à la fin du nom de fichier en utilisant des crochets '[...]'. Par exemple... |
magick 'rose:[32x32+20+5]' +repage rose_read_modifier.gif
![[Sortie IM]](../static/img/files/rose_read_modifier.gif)
Notez cependant que les caractères '[]' sont aussi généralement des méta-caractères spéciaux du shell, donc si vous les utilisez, c'est une bonne idée de mettre le modificateur supplémentaire entre guillemets, pour empêcher les shells UNIX de l'interpréter. Le réglage « [-extract](https://imagemagick.org/command-line-options/#extract) » et le modificateur de lecture font le même travail, bien que ce dernier prévaille sur le premier. De plus, lorsque vous utilisez un modificateur, vous devez laisser IM gérer tout méta-caractère spécial d'expansion de fichier, tels que '*' et '?', car un shell UNIX ne « trouvera » pas les fichiers demandés à cause du modificateur. Ce qu'il fait réellement dans ce cas dépend du shell. Ainsi, le nom de fichier complet doit être mis entre guillemets lorsque vous utilisez des modificateurs de lecture. Le véritable but de ces modificateurs de lecture est de limiter la quantité de mémoire nécessaire, en supprimant les images indésirables ou en rendant les images plus petites, pendant que les images sont encore en cours de lecture en mémoire. Par exemple, lors de la lecture d'un répertoire entier de grandes images JPEG. Voici la liste de tous les modificateurs de lecture spéciaux (et des réglages « [-extract](https://imagemagick.org/command-line-options/#extract) ») et leurs effets. Un '#' représente un nombre.
- '
[#]' '[#-#]' '[#,#,#]'[#,#-#,#]'. Lecture de trames (Read Frames) -
Sélectionnera des sous-trames spécifiques d'un format de fichier multi-images depuis l'image qui a été lue. L'index '
#' donné spécifie le numéro de trame à lire. Plusieurs index peuvent être spécifiés soit dans l'ordre par virgules, soit comme une plage d'index. L'index d'image commence à zéro pour la première image, 1 pour la deuxième et ainsi de suite. Si vous spécifiez un index négatif, alors le comptage se fait à partir de la fin de la séquence d'images, en ordre inverse, -1 pour la dernière image, -2 pour l'avant-dernière image. C'est exactement la même convention que celle utilisée pour les opérateurs de listes d'images. Par exemplemagick document.pdf'[0]' first_page_of_pdf.gif magick animation.gif'[1-3]' second_to_fourth_frames.gif magick animation.gif'[-1,2]' last_then_the_third_frame.gif
Vous pouvez aussi demander à IM de lire des images en fonction d'une liste de nombres. Par exemple..
magick 'image_%03d.png[5-7]' ...
lira les fichiers « image_005.png », « image_006.png » et « image_007.png ». Avec cette méthode, vous ne pouvez pas utiliser d'index négatif.
- '
[#x#]' Lecture avec redimensionnement (Read Resize) -
À partir de la version 6.2.6-2 d'IM, un nouveau modificateur a été ajouté pour aider les utilisateurs d'IM à gérer de très très grandes images. Ce modificateur redimensionnera l'image qui vient d'être lue, immédiatement avant que cette image ne soit ajoutée aux autres images déjà en mémoire. Cela peut à la fois réduire ou agrandir les images. Par exemple... |
magick pattern:gray95'[60x60]' enlarged_dots.gif
![[Sortie IM]](../static/img/files/enlarged_dots.gif)
Attention, le modificateur de lecture n'utilise actuellement aucun des indicateurs de redimensionnement, tels que '!' (ne pas préserver les proportions) ou '>' (réduire uniquement les images plus grandes). (peut-être si vous en faites la demande ?) Vous pouvez aussi l'utiliser comme moyen alternatif de spécifier la taille d'un canevas de couleur unie. En réalité, ce qui se passe c'est qu'il redimensionne l'image par défaut d'un seul pixel. Par exemple... |
magick 'canvas:DodgerBlue[50x50]' canvas_size.gif
![[Sortie IM]](../static/img/files/canvas_size.gif)
Le modificateur est surtout important lorsque vous tentez de lire un grand nombre de très très grandes images, car chaque image sera redimensionnée avant que l'image suivante ne soit lue, produisant une économie substantielle de la mémoire totale nécessaire pour gérer ces images. Par exemple, au lieu de...
magick montage '*.tiff' -geometry 100x100+5+5 -frame 4 index.jpg
qui lit d'abord tous les fichiers tiff, puis les redimensionne. Vous pouvez à la place faire...
magick montage '*.tiff[100x100]' -geometry 100x100+5+5 -frame 4 index.jpg
Cela lira chaque image, et la redimensionnera, avant de passer à l'image suivante. Résultat : une utilisation de mémoire bien moindre, et peut-être éviter la pagination disque (thrashing), lorsque les limites de mémoire sont atteintes. Pour les images JPEG, je recommande aussi d'utiliser plutôt le réglage spécial « [-define](https://imagemagick.org/command-line-options/#define) », produisant quelque chose comme...
magick montage -define jpeg:size=200x200 '*.jpg[100x100]' -strip \
-geometry 100x100+5+5 -frame 4 index.png
Ce réglage spécial est passé à la bibliothèque JPEG et est utilisé pour limiter la taille de l'image JPEG pendant le processus de lecture. Cependant, ce n'est pas exact, l'image résultante ayant une taille comprise entre cette taille et le double de cette taille, avec le rapport d'aspect préservé. Voir Lecture des images JPEG pour plus de détails. Le résultat de la combinaison est une lecture bien plus rapide et une utilisation de mémoire encore plus faible pour les images JPEG. Surtout lors de la génération de nombreuses petites vignettes. Voir Création générale de vignettes.
- '
[#x#+#+#]' Lecture avec rognage (Read Crop) -
À partir d'IM v6.3.1, si vous ajoutez aussi un décalage, ce qui précède devient un rognage de l'image en cours de lecture. Par exemple, pour obtenir une sous-section plus petite de 600x400 pixels d'une image beaucoup plus grande.
magick 'image.png[600x400+1900+2900]' tileimage.png
Cela lira cependant l'image entière en mémoire puis la rognera avant qu'elle ne soit finalement ajoutée à la séquence d'images courante. Si vous voulez gérer des images vraiment grandes, je vous suggère de regarder la commande « [stream](basics.html#stream) » et de canaliser votre image vers la commande « magick » pour un traitement ultérieur. Voir Gestion d'images massives ci-dessous.
Si l'image est « gzip »ée, IM la décompressera automatiquement dans un fichier temporaire avant de tenter de déterminer le format d'image et de décoder le format de fichier image. Ainsi, vous pouvez non seulement enregistrer des images au format compressé gzip, mais aussi les utiliser directement dans un traitement IM ultérieur. Pour de grandes images basées sur du texte, cela peut entraîner d'énormes économies d'espace disque. | Le format PNG inclut la compression « gzip » dans le cadre de sa spécification de format. Dans ce cas, le premier chiffre du réglage « [-quality](https://imagemagick.org/command-line-options/#quality) » à deux chiffres du PNG définit le niveau de compression. Pour plus de détails, voir les exemples du format de fichier image PNG.
---|---
Ce qui précède n'est qu'un bref résumé des options d'entrée spéciales disponibles lors de la lecture d'images dans ImageMagick. Un résumé complet est donné sur la page Anatomie de la ligne de commande sur le site web d'ImageMagick.
Comme montré précédemment, l'entrée d'image peut être modifiée par certains réglages IM tels que « [-size](https://imagemagick.org/command-line-options/#size) » pour la création d'image et « [-define](https://imagemagick.org/command-line-options/#define) jpeg:size=?? » pour la lecture JPEG. D'autres options affectent aussi la création de l'entrée d'image, notamment « [-page](https://imagemagick.org/command-line-options/#page) », « [-type](https://imagemagick.org/command-line-options/#type) », « [-dispose](https://imagemagick.org/command-line-options/#dispose) », « [-delay](https://imagemagick.org/command-line-options/#delay) ». Voir Définir/modifier les méta-données d'image. | Soyez très prudent lorsque vous passez un argument fourni par l'utilisateur à IM dans un script, en vous assurant que l'argument est bien ce que vous attendez. Vous ne voulez pas qu'un script de traitement d'image web renvoie par exemple une image du fichier de mots de passe système.
---|---
Gestion des méta-caractères dans le nom de fichier d'entrée
En construction
Non seulement le shell gère les méta-caractères (à moins que cet argument ne
soit entre guillemets) mais IM fait aussi sa propre forme de gestion des
méta-caractères dans les noms de fichier.
Par exemple
magick *.jpg ....
est développé par le shell AVANT de passer les noms de fichier à IM, tandis que
magick '*.jpg' ....
fera passer "*.jpg" par le shell à ImageMagick, qui le développe ensuite en
une liste interne de noms de fichier ! Ceci a été fourni pour le support de
Windows DOS, et comme méthode pour éviter les débordements de limite de ligne
de commande dans des commandes comme "magick mogrify" et "magick montage", qui
traitent généralement de longues listes d'images.
Ainsi, pour amener IM à lire un fichier réellement nommé sur le disque
'*.jpg' vous devez utiliser l'une des formes suivantes...
magick '\*.jpg' ....
magick "\*.jpg" ....
magick "\\*.jpg" ....
magick \\\*.jpg ....
NOTE ; la deuxième ligne n'est PAS recommandée car certains shells (pas bash) et
certaines API (programmes C, possiblement PHP) peuvent en fait retirer la barre
oblique inverse unique, et passer '*.jpg' à IM qui le développera de nouveau !
En plus de '?' et '*', IM ajoute aussi la gestion des méta-caractères ':', '%'
et '[...]' pour la gestion des modificateurs de lecture. Ceux-ci ont cependant
une signification différente (spécification de codec, inclusion de numéro de scène,
et modificateurs de lecture) de la syntaxe shell normale de ces méta-caractères.
Par exemple, les utilisateurs DOS devront échapper une 'lettre de lecteur' dans
les chemins de noms de fichier passés à ImageMagick. Par exemple...
magick C\:\path\to\image.jpg ....
Un autre exemple est lors du chargement d'une image contenant un code temporel. Par exemple..
magick "time_10\:30.jpg" ....
lira le nom de fichier "time_10:30.jpg" depuis le disque. Sans la barre oblique
inverse, IM peut penser que l'image doit être lue avec un format de fichier image
(ou délégué) inexistant "time_10:", et échouer de manière inattendue.
Une alternative est d'utiliser un point d'interrogation...
magick "time_10?30.jpg" ...
Cependant, cela peut aussi correspondre à un autre fichier comme "time_10_30.jpg" !
Compression des images
En construction
IM lira aussi les fichiers qui ont été compressés, et reçoivent le suffixe
approprié, ou la spécification de format d'image.
Autrement dit, une image enregistrée sous "image.gif.gz" sera d'abord décompressée,
avant d'être décodée depuis son format d'image GIF.
Les images XPixmap (xpm) et NetPbm/PbmPlus (ppm) gzippées sont aussi gérées
automatiquement, à la fois par ImageMagick, et la bibliothèque déléguée normale
des formats. Ainsi vous pouvez utiliser les formes compressées directement soit
dans IM, soit dans d'autres programmes qui comprennent ces formats de fichier.
Voir [Enregistrer des images compressées](#save_gzip) ci-dessous.
Enregistrement des images
Traiter les images c'est bien beau, mais il peut être tout aussi important d'enregistrer les résultats de la bonne manière. Le dernier argument de « magick », « magick montage » et « magick composite » définit un nom de fichier, et un format d'image pour une écriture finale de l'image (sortie d'image par défaut). Cependant, vous pouvez aussi enregistrer une image au milieu d'une séquence d'images en utilisant « [-write](https://imagemagick.org/command-line-options/#write) » (voir ci-dessous). Pour spécifier dans quel format de fichier vous voulez enregistrer votre image, ou vos images, vous pouvez soit utiliser un suffixe de nom de fichier, comme je l'utilise dans presque tous ces exemples, soit préfixer le nom de fichier avec la chaîne « {format}: ». Par exemple... |
magick tree.gif GIF:tree_image
Si vous vérifiez l'image résultante, vous constaterez qu'un fichier image GIF a effectivement été créé, même si le nom de fichier lui-même n'a pas de suffixe « .gif ». La casse du format n'est pas sensible, vous pouvez donc utiliser des minuscules ou des majuscules. Cette spécification de format d'image devient particulièrement importante lorsque vous voulez enregistrer l'image vers la sortie standard de la commande (en utilisant un nom de fichier « - »). Ce nom de fichier spécial n'a pas de suffixe, donc vous devez indiquer à ImageMagick quel format utiliser. Si vous ne le faites pas, l'image utilisera par défaut le format d'image original duquel l'image provient (si connu). Par exemple, ici nous écrivons une énumération de pixels IM à l'écran en utilisant un « - » pour envoyer le résultat vers la sortie standard.
magick tree.gif -resize 1x3\! txt:-
Il est aussi utilisé pour transmettre l'image à une autre commande comme « magick identify » via un « pipeline » de shell, sans l'enregistrer dans un fichier temporaire.
magick tree.gif -resize 200% miff:- | identify -
Dans ce cas, vous pouvez aussi voir que le nom de fichier spécial « - » est aussi utilisé pour indiquer la lecture d'une image depuis l'entrée standard par la commande « magick identify ». Pour plus d'informations, voir le guide officiel à Anatomie de la ligne de commande, noms de fichier de sortie.
Séquences d'échappement par pourcentage dans le nom de fichier
Le nom de fichier d'enregistrement peut contenir quelques séquences d'échappement spéciales par pourcentage (%). Plus précisément, '%d', '%x' et '%o'. Celles-ci insèrent le « numéro de scène » de l'image dans le nom de fichier en utilisant les formats 'printf()' du C. Pour plus d'informations, voir Écrire une séquence multi-images ci-dessous. Bien sûr, cela signifie que si vous voulez insérer un caractère pour-cent dans le nom de fichier, vous devrez le doubler ('%%'). À partir d'IM v6.4.8-4, vous pouvez maintenant aussi insérer un réglage spécial préparé à l'avance (qui doit commencer par 'filename:') dans le nom de fichier final. Par exemple... |
magick rose: -set filename:mysize "%wx%h" 'rose_%[filename:mysize].png'
![[Sortie IM]](../static/img/files/rose_70x46.png)
Cela enregistre l'image rose intégrée dans un fichier contenant la taille en pixels de cette image. Plus précisément, le nom de fichier « rose_70x46.gif ». Cela vous permettra (avec un peu d'indirection) d'utiliser n'importe quelle séquence d'échappement par pourcentage de propriété d'image dans votre nom de fichier de sortie. Notez que seule une propriété d'image '%[filename:_label_]' peut être utilisée dans le nom de fichier de sortie (avec la séquence d'échappement normale '%d'). Cette restriction est pour des raisons de sécurité et parce que des noms de fichier image légitimes pourraient inclure '%' et '[]'. Attention, n'incluez pas le suffixe du fichier dans le réglage du nom de fichier ! IM ne le verra pas, et enregistrera l'image en utilisant le format de fichier original, plutôt que celui inclus dans le réglage du nom de fichier. Autrement dit, le nom de fichier aura le suffixe que vous spécifiez, mais le format d'image pourra être différent ! Le réglage 'filename:' n'a pas besoin d'être le même pour chaque image. Vous pouvez générer ou même calculer ou définir un réglage différent pour chaque image utilisée. Voici un autre exemple où je modifie une image, et l'écris dans un nouveau nom de fichier, construit à partir du nom de fichier original de chaque image individuelle.
magick eye.gif news.gif storm.gif -scale 200% \
-set filename:f '%t_magnify.%e' +adjoin '%[filename:f]'
Cela agrandit chaque image comme « eye.gif » et l'enregistre dans le fichier « eye_magnify.gif » dans le répertoire courant. Cependant, les trois images sont lues en mémoire, puis modifiées par la même commande. Ce n'est pas une solution recommandée pour un certain nombre de grandes images, ou de très grands nombres d'images, en raison de la possibilité d'atteindre les limites de mémoire et donc de passer à la pagination disque (thrashing). Notez que le « [+adjoin](https://imagemagick.org/command-line-options/#adjoin) » dans ce cas est essentiel pour empêcher IM d'enregistrer toutes les images dans une animation GIF multi-images, en utilisant juste le nom de fichier de la première image. J'ai aussi veillé à préserver le suffixe original du nom de fichier en utilisant la séquence d'échappement « %e ». Normalement, inclure le suffixe dans le réglage du nom de fichier est une mauvaise idée, car IM ne le voit pas lorsqu'il provient d'une séquence d'échappement, pour déterminer le format de fichier de sortie. Dans ce cas cependant, le format ne change pas, il n'y a donc pas de problème. La prudence est de mise. Pour obtenir le nom de fichier original exact de l'image, utilisez '%d/%f' ou '%d/%t.%e'. Vous pouvez aussi utiliser '%m' au lieu de '%e' qui est le format réel (en majuscules) qu'IM a trouvé dans le fichier original de l'image (qui peut ne pas correspondre au suffixe du nom de fichier original de l'image). Notez que pour les images intégrées, beaucoup de ces chaînes de séquence d'échappement sont vides. De plus, s'il n'y a pas de répertoire, le '%d' sera vide. C'est un problème connu pour IMv7. Un autre exemple d'utilisation des « séquences d'échappement de nom de fichier » se trouve dans Rognage en tuiles des images, où la technique est utilisée pour générer un nom de fichier basé sur une position de tuile calculée pour chacune des images résultantes. Voir aussi l'exemple dans Utiliser Convert au lieu de Mogrify.
Suffixe GZip automatique
IM « gzip »era aussi automatiquement les images si un suffixe « .gz » est donné. Par exemple, ici j'enregistre l'image « rose: » intégrée comme un fichier GIF non compressé « gzip »é. Je désactive la compression LZW normale du GIF, car elle empêcherait la compression « gzip » d'atteindre sa meilleure compression. |
magick rose: -compress none rose.gif.gz
La façon dont les navigateurs gèrent une image gzippée dépend du type de fichier renvoyé par le serveur web et de la façon dont votre navigateur gère les images compressées. À cause de cela, je n'ai pas affiché directement l'image ci-dessus. Cliquez sur l'icône 'art' pour voir ce que fait votre navigateur, avec une telle image depuis ce serveur web. Comparez la taille de celle-ci à une image GIF normale enregistrée avec compression LZW... |
magick rose: rose.gif
![[Sortie IM]](../static/img/files/rose.gif)
La rose « gzip »ée fait
octets, tandis qu'une rose normale compressée LZW fait
octets. Comme vous pouvez le voir, la compression GZIP est en fait légèrement meilleure que la compression LZW qu'utilise le format GIF, et peut donc être préférable à des fins d'archivage. Les fichiers image gzippés sont plus couramment utilisés pour le stockage à plus long terme des formats de fichier image qui n'ont aucune compression par défaut. Cela inclut le format de fichier IM « MIFF: » et les formats de fichier image NetPBM plus simples.
Attributs enregistrés
En construction
Autres réglages spécifiques à l'écriture d'image....
-depth -quality -compress -type -loop
-set label -set comment
Voir aussi [Profondeur d'image](basics.html#depth),
[Type d'image](basics.html#type),
[Qualité JPEG](formats.html#jpg_write),
[Qualité PNG](formats.html#png_quality).
[Boucle GIF](anim_basics.html#loop).
Parler des compressions de fichier, qui font partie de divers formats d'image.
Différentes compressions sont utilisées pour différents formats d'image.
Spécialement le changement de compression JPEG vers TIFF nécessaire.
Utilisation de "[-compress](https://imagemagick.org/command-line-options/#compress)
None" et "[-compress](https://imagemagick.org/command-line-options/#compress)" sélection de format texte/binaire NetPBM.
La compression GIF et le brevet de copyright.
À part utiliser IM pour réduire -quality ou changer le format pour autre chose,
l'option -compression est rarement utilisée. Souvent elle n'est utilisée qu'en
interne par IM pour enregistrer les images en utilisant la même compression avec
laquelle l'image a été lue.
Images chiffrées
IM vous permet aussi d'enregistrer des images sensibles chiffrées avec une phrase de passe en utilisant les options « [-encipher](https://imagemagick.org/command-line-options/#encipher) » et « [-decipher](https://imagemagick.org/command-line-options/#decipher) ». Voir Chiffrer les images
Écrire des images multiples - Techniques Adjoin
Un problème majeur lors de l'enregistrement d'images est qu'ImageMagick travaille avec une séquence ordonnée (liste) d'images, et pas seulement une image à la fois. À cause de cela, IM tentera d'écrire TOUTES les images de la séquence d'images courante dans le nom de fichier donné. Si le format de fichier autorise plusieurs images, IM enregistrera par défaut toutes les images de la séquence d'images courante dans ce fichier image. Par exemple, si vous regardez la page d'exemples Bases de l'animation GIF, vous verrez qu'il enregistrera plusieurs trames d'image dans un seul format de fichier image pour produire une animation. Si le format de sortie ne vous permet pas d'enregistrer plusieurs images dans un seul fichier, IM générera à la place plusieurs fichiers. Par exemple, lors de l'enregistrement dans des formats d'image comme JPEG et PNG etc. Vous pouvez aussi forcer ce comportement sur les formats d'image qui autorisent plusieurs images par fichier, tels que GIF et PS, en utilisant le réglage de gestion de fichier de sortie « [+adjoin](https://imagemagick.org/command-line-options/#adjoin) ».
magick eye.gif news.gif storm.gif +adjoin image.gif
Si vous regardez de près les noms de fichier des trois images générées ci-dessus, vous verrez qu'IM a généré des images nommées « image-0.gif » à « image-2.gif ». |
Avant la version 6.2.0 d'ImageMagick, le nom de fichier de sortie de ce qui précède aurait été « image.gif.0 » à « image.gif.2 ». Cela entraînait de nombreux problèmes dus à la perte du suffixe de nom de fichier, ce qui a été modifié pour ajouter le numéro d'image avant le suffixe de nom de fichier. |
|---|---|
Une alternative consiste à ajouter une construction « %d » du langage C 'printf()' au nom de fichier de sortie. Cette chaîne spéciale sera remplacée par le numéro d'image courant de chaque image dans la séquence. |
magick eye.gif news.gif storm.gif +adjoin image_%d.gif
Ici, nous avons généré les images « image_0.gif » à « image_2.gif », en utilisant un trait de soulignement plutôt que le tiret par défaut d'IM. | _Non seulement vous pouvez utiliser '%d' pour un nombre décimal, mais vous pouvez utiliser '%x' pour un nombre hexadécimal (minuscules), '%X' pour un nombre hexadécimal (majuscules), ou '%o' pour un nombre octal.
_
---|---
| _Si vous voulez vraiment un caractère pour-cent suivi de l'une de ces lettres, alors vous devrez doubler le caractère pour-cent pour échapper sa signification. Autrement dit, vous devrez utiliser '%%' pour vous assurer de générer réellement un symbole pour-cent.
---|---
| _Le '%d' dans le nom de fichier de sortie active en fait automatiquement le réglage « [+adjoin](https://imagemagick.org/command-line-options/#adjoin) » d'ImageMagick.
Cependant, bien que je n'aie pas réellement besoin du « [+adjoin](https://imagemagick.org/command-line-options/#adjoin) » ci-dessus, c'est probablement une bonne idée de le fournir quand même, juste pour qu'il soit clair que vous générez des images séparées.
---|---
Cela fonctionne bien pour un petit nombre d'images, mais si vous avez plus de dix images, vous obtiendrez un mélange d'images avec des numéros à un et deux chiffres. Et si vous en avez plus de cent, vous obtiendrez aussi des numéros à trois chiffres. Lorsque cela arrive, les listages de répertoire ne listeront plus les images enregistrées dans l'ordre, puisque « image_15.gif » apparaîtrait alphabétiquement avant « image_5.gif ». Bien sûr, il existe des moyens de corriger cela. Par exemple, en utilisant des expressions de shell de ligne de commande comme..
magick image_[0-9].gif image_[1-9][0-9].gif animation.gif
magick image_?.gif image_??.gif image_???.gif animation.gif
magick image_(?|??|???|????).gif animation.gif
magick 'image_%d.gif[0-123]' animation.gif
La dernière méthode est la bonne façon IM de gérer une séquence de fichiers, bien que vous deviez connaître la plage de numéros que vous voulez utiliser. Le '%d' formate chaque nombre pour qu'il corresponde au nom de fichier (voir ci-après). Dans tous les cas, c'est maladroit et sujet aux erreurs, peut produire des erreurs si des fichiers manquent, et peut dépendre du type de système informatique que vous utilisez. Mieux vaut éviter complètement ce problème. Si vous êtes familier avec le langage 'C' (consultez la page de manuel système UNIX pour 'printf'), alors vous saurez probablement que si vous utilisez quelque chose comme « %03d », vous obtiendrez toujours des nombres à 3 chiffres (avec des zéros de tête) pour le numéro de trame de la séquence d'images. Les noms d'image seraient dans ce cas « images_000.gif », « images_001.gif » et ainsi de suite.
magick eye.gif news.gif storm.gif +adjoin image_%03d.gif
En utilisant cette méthode, les images seront non seulement numérotées, mais aussi listées correctement par ordre alphabétique, rendant la gestion des fichiers image bien plus facile. Je recommande donc d'ajouter un '%03d' ou ce qui est approprié, au nom de fichier de sortie chaque fois que vous prévoyez d'écrire plusieurs images, comme des fichiers image séparés.
Numéros de scène écrits
Si vous voulez que la séquence d'images commence à '1', au lieu de '0', et ne voulez pas renommer tous les fichiers image résultants, la solution la plus simple est d'ajouter une image « factice » à l'avant de la séquence à écrire.
magick null: eye.gif news.gif storm.gif +adjoin image_%01d_of_3.gif
rm image_0_of_3.gif
Vous pouvez, bien sûr, utiliser « [+insert](https://imagemagick.org/command-line-options/#insert) » pour faire cela après votre traitement d'image. Ce n'est pas une solution particulièrement élégante, mais elle fonctionne, est simple, et rétrocompatible avec les anciennes versions majeures d'IM. À partir de la version 6.2 d'IM, vous pouvez utiliser le réglage « [-scene](https://imagemagick.org/command-line-options/#scene) » pour définir le numéro de départ de la séquence d'images courante.
magick eye.gif news.gif storm.gif +adjoin -scene 101 image_%03d.gif
Ce qui a produit les fichiers image « image_101.gif » à « image_103.gif ».
Écrire une image, plusieurs fois
Tant qu'on parle de l'écriture d'images, il est possible d'écrire une image depuis le milieu d'une séquence d'opérations d'image, en utilisant l'opérateur d'image spécial « [-write](https://imagemagick.org/command-line-options/#write) ». C'est très utile lorsque vous souhaitez produire une image plusieurs fois à divers moments pendant le traitement d'image. Par exemple, voir Traitement d'image complexe avec débogage. Voici un exemple où j'ai une photo de quelques perroquets, gracieuseté de la Kodak Lossless True Color Image Suite (image 23), mais je veux les enregistrer dans une gamme de tailles différentes, en utilisant une seule commande...
magick parrots_orig.png \
\( +clone -resize x128 -write parrots_lrg.jpg +delete \) \
\( +clone -resize x96 -write parrots_big.jpg +delete \) \
\( +clone -resize x64 -write parrots_med.jpg +delete \) \
-resize x32 parrots_sml.jpg
Comme vous pouvez le voir, nous pouvons utiliser les opérateurs de listes d'images pour traiter un 'clone' d'une image, écrire le résultat, puis supprimer et revenir en arrière vers l'image source originale, répétant le processus autant de fois que nécessaire. Dans ce cas particulier, cela signifie que je n'ai pas fini par redimensionner la même image encore et encore, accumulant ainsi des erreurs de redimensionnement. Cela signifiait aussi que j'aurais pu tout aussi facilement générer les images plus petites d'abord, puis les images plus grandes ensuite, sans problèmes, ou modifier l'image de nombreuses manières différentes pour chaque fichier image généré. Autrement dit, l'ordre et la modification de chaque image n'a pas d'importance ! Notez que « [+clone](https://imagemagick.org/command-line-options/#clone) » ne duplique pas réellement les données d'image ! IM utilise un processus de clonage par comptage de références qui ne copie les pixels de l'image que lorsqu'ils sont mis à jour. Ainsi, seule assez de mémoire pour contenir l'image originale et la nouvelle image générée est réellement utilisée, dans le processus ci-dessus. Cela rend aussi « [+clone](https://imagemagick.org/command-line-options/#clone) » très rapide et économe en mémoire.
Voici une autre technique pour faire la même chose, mais en enregistrant l'image originale dans un registre d'image nommé en utilisant « [MPR:](#mpr) » (voir ci-dessous), au lieu de « [-clone](https://imagemagick.org/command-line-options/#clone) ».
magick scroll.gif -background lightsteelblue -flatten -alpha off \
-write mpr:scroll -resize x128 -write scroll_lrg.jpg +delete \
mpr:scroll -resize x96 -write scroll_big.jpg +delete \
mpr:scroll -resize x64 -write scroll_med.jpg +delete \
mpr:scroll -resize x32 scroll_sml.jpg
Ici, nous enregistrons une copie de l'image originale dans le registre d'image « mpr:scroll », avant de modifier l'image encore en mémoire après l'écriture. Notez qu'un registre MPR peut en fait contenir toute une séquence d'images. Une fois que les résultats de cette opération sont écrits et supprimés de la mémoire, l'image originale (ou la séquence d'images) est récupérée, et le processus répété autant de fois que nécessaire. Bien sûr, comme précédemment, il n'est pas nécessaire d'utiliser « [-write](https://imagemagick.org/command-line-options/#write) » sur l'image finale, car nous pouvons simplement la produire normalement. Si vous avez utilisé un « [-write](https://imagemagick.org/command-line-options/#write) », vous pouvez à la place simplement jeter l'image finale en utilisant un autre format de fichier spécial « [NULL:](#null) » (voir ci-dessous).Un mot d'avertissement à propos de « [-write](https://imagemagick.org/command-line-options/#write) » : parce que certains formats de fichier exigent que les images soient dans un format spécial pour l'écriture, l'opérateur « [-write](https://imagemagick.org/command-line-options/#write) » pourrait modifier les images. Les images GIF, par exemple, peuvent voir leurs couleurs réduites (voir Quantification et tramage). Cependant, d'autres formats laisseront l'image source telle quelle (voir MIFF et MPC ci-dessous). Si vous devez vous protéger de ces changements (car vous ne supprimez pas simplement l'image ensuite), vous pouvez utiliser « [+write](https://imagemagick.org/command-line-options/#write) » qui fera un clone interne de l'image pour l'écriture, puis le supprimera ensuite. Cependant, rappelez-vous que cela peut entraîner un doublement de l'utilisation de la mémoire pour contenir la copie de l'image modifiée pour l'écriture. Au moins pendant un instant.
Formats de fichier spéciaux (spécifiques à IM)
Comme vous l'avez vu ci-dessus (et l'explorerez dans la section suivante Formats de fichier image courants), ImageMagick comprend un nombre énorme de formats de fichier image bien connus. Il inclut aussi un bon nombre de générateurs d'image spéciaux (comme illustré dans Création de canevas). En plus de cela, il existe aussi des formats de fichier très spéciaux, qui permettent une gestion très particulière des images.
-
miff: -
Est le format de fichier ImageMagick. Toute la séquence d'images et tous les attributs associés aux images sont enregistrés dans ce format de fichier. Bien sûr, seules les commandes ImageMagick liront ce format, il n'est donc pas adapté au transfert entre différents logiciels de traitement d'image. Le but principal du format de fichier «
miff:» est de servir de format d'enregistrement intermédiaire, lors du traitement d'images de manière longue et complexe. Il convient aussi pour « canaliser » une image d'une commande IM vers une autre, tout en transmettant les méta-données d'image et autres attributs associés à l'image. Je recommande, lors de l'écriture de «miff:», d'inclure une option «[+depth](https://imagemagick.org/command-line-options/#depth)». Cela réinitialisera la 'profondeur d'entrée' de l'image à la qualité mémoire d'IM afin d'utiliser la meilleure qualité possible pour l'enregistrement intermédiaire de l'image. Bien sûr, vous pouvez « tronquer » la profondeur de l'image enregistrée en utilisant «-depth 8» afin de réduire la taille de l'image sur le disque, mais cela forcera aussi des effets d'arrondi quantique (sauf si l'enregistrement HDRI en virgule flottante est aussi activé). Pour ceux que cela intéresse d'analyser ce format, il commence par un en-tête en texte brut de tous les attributs de l'image. L'en-tête se termine par une ligne contenant un seul caractère de saut de page. Cet en-tête est en lui-même un moyen utile d'extraire des informations de base sur l'image dans divers scripts de traitement d'image. Par exemple, ici j'utilise une commande GNU-sed pour lister l'en-tête «miff:» jusqu'au séparateur de saut de page, montrant tous les attributs de l'image «rose:» intégrée.magick rose: miff:- | sed -n '/^\f$/q; p'
C'est en fait assez utile car cela révèle tous les drapeaux de réglages courants et les méta-données qu'IM connaît sur l'image. Cependant, il y a aussi des statistiques, car celles-ci sont générées soit par la commande « magick identify », l'opérateur « [-identify](https://imagemagick.org/command-line-options/#identify) » ou le format spécial « info: » ; si demandé avec une option « [-verbose](https://imagemagick.org/command-line-options/#verbose) ». (voir ci-après) Le format de fichier image a des exigences d'analyse très faibles, et bien que non compressé, peut gérer N'IMPORTE QUEL type d'image qu'IM connaît. C'est presque le format le plus idéal à utiliser pour les images temporaires, et les commandes d'image canalisées que vous pouvez utiliser, bien que les programmes ImageMagick soient les seuls à pouvoir le lire. Voir aussi le registre mémoire d'image « [MPR](#mpr) », et les formats de mappage mémoire-disque « [MPC](#mpc) » ci-dessous. | _Les données d'image brutes (binaires) sont en fait préfixées par la séquence de quatre caractères "\n\f\n:", (saut de page seul sur une ligne, et deux-points). La façon dont ces données doivent être lues est encodée dans les données d'en-tête, mais consiste typiquement en des entiers binaires en triplets RVB. Mais elles peuvent avoir plus de canaux, et pourraient même consister en des flottants ou même des valeurs de données double.
À bien des égards, c'est pratiquement identique à un format de fichier image binaire PbmPlus, avec un en-tête grandement étendu pour contenir les méta-données d'image, et plus de variations dans le nombre de canaux et les types de données._
---|---
- Diffusion d'image MIFF (MIFF Image Streaming)
-
Le format «
miff:» est un format de fichier image « en flux » (streaming). C'est-à-dire que les images multiples sont gérées simplement en ajoutant ou en concaténant les images les unes après les autres. Cela signifie que vous pouvez générer un « flux » d'images multiples, simplement en écrivant les images vers la même destination, comme un pipeline. Même si les images individuelles ont été générées par des commandes différentes. Par exemple, vous pouvez avoir une boucle de commandes de traitement d'image, chaque commande produisant simplement une image MIFF « en flux ». Après la boucle, vous pouvez canaliser le « flux » d'images vers une seule commande pour générer des montages, collages, animations, ou autre chose. Par exemple, ce qui suit génère une liste de couleurs commençant par la lettre 'b', puis utilise une boucle de commandes «magick» pour générer une pastille de couleur étiquetée, une couleur à la fois. Celles-ci sont ensuite « canalisées » vers un «magick montage» pour générer une simple table de couleurs.magick -list color | egrep '^b' | \ while read color junk; do \ magick -label $color -size 70x20 xc:$color +depth miff:-; \ done |\ magick montage - -frame 5 -tile 6x -geometry +2+2 \ -background none color_table.png
L'exemple spécifique ci-dessus a été programmé dans un script « show_colors » que vous pouvez utiliser pour rechercher, trouver et afficher des couleurs, pour les utiliser dans votre traitement d'image. Ce qui précède est un exemple de 'pipeline d'images en flux ' qui est très utile pour générer des séquences multi-images. D'autres exemples de cette technique incluent Positionnement programmé d'images en couches, Épingles sur une carte, l'« image des couleurs nommées » dans Couleurs par nom, et les animations comme celle montrée dans Ondulations aléatoires. Cette technique peut aussi être utilisée avec des opérations comme « -write miff:- », afin de produire une image au format miff depuis plusieurs endroits dans une seule commande. Chaque image sera automatiquement ajoutée à la suite dans le flux de sortie final. Cela peut être particulièrement utile pour déboguer des commandes de traitement d'image complexes. La méthode alternative (couramment utilisée dans les scripts PHP) est d'utiliser une technique de « commande générée », qui utilise un script shell pour générer une longue commande « magick » à exécuter. Les scripts dans Animations de déformation d'image utilisent cette technique.
-
info: -
Le format de fichier «
info:» (ajouté dans IM v6.2.4) ne produit PAS d'image réelle ! Ce format produit essentiellement les mêmes informations que la commande «magick identify» d'ImageMagick produira. Comme «magick identify», ce format de sortie est contrôlé par les options «[-format](https://imagemagick.org/command-line-options/#format)» et «[-verbose](https://imagemagick.org/command-line-options/#verbose)» vous permettant de produire juste les informations spécifiques qui vous intéressent, telles que définies par la page Séquences d'échappement de propriété d'image. Par exemple, au lieu de canaliser une image MIFF vers «magick identify» comme nous l'avons fait ci-dessus (voir Enregistrement des images), nous aurions pu utiliser ce qui suit, pour récupérer l'identification sur une ligne unique du format d'image résultant.magick granite: info:-
Bien sûr, vous pouvez utiliser un réglage « [-format](https://imagemagick.org/command-line-options/#format) » pour produire les informations souhaitées d'une manière spécifique et plus facilement analysable. Ce qui est si utile avec « info: », c'est que vous pouvez maintenant produire votre image, tout en extrayant des informations supplémentaires à son sujet, en même temps. Cela se fait en utilisant l'opérateur « [-write](https://imagemagick.org/command-line-options/#write) » pour enregistrer ce format d'image spécial dans un fichier (ou la sortie standard normale de la commande). | |
magick rose: -shave 12x0 -repage 64x64+9+9 \
-format '%wx%h %g' -write info:info_paged.txt paged.gif
Il y a aussi un opérateur « [-identify](https://imagemagick.org/command-line-options/#identify) » qui équivaut à utiliser « [-write](https://imagemagick.org/command-line-options/#write) info: » pour produire des informations d'identification d'image vers la sortie standard. Cela rend encore plus facile de surveiller ce qui arrive à vos images lors du débogage de vos commandes IM. Par exemple... | |
magick logo: -identify \
-trim -identify \
+repage -identify \
-resize 80x80\! -identify \
logo_thumbnail.gif
Ici, vous pouvez voir comment « [-trim](https://imagemagick.org/command-line-options/#trim) » a réduit la taille de l'image mais préserve les informations de 'rognage' sur la partie de l'image qui a été rognée, puis « [+repage](https://imagemagick.org/command-line-options/#repage) » supprimant ces informations supplémentaires de 'canevas' ou de 'page'. Et ainsi de suite. De plus, comme la commande « magick identify », à la fois « [info:](#info) » et « [-identify](https://imagemagick.org/command-line-options/#identify) » deviendront beaucoup plus verbeux si le réglage « [-verbose](https://imagemagick.org/command-line-options/#verbose) » est activé. Ici, je limite la longue sortie aux quelques premières lignes seulement, juste pour que vous puissiez vous en faire une petite idée.
magick rose: -verbose info: | head
| _Le réglage « [-verbose](https://imagemagick.org/command-line-options/#verbose) » fera aussi imprimer des informations supplémentaires sur les images lues en entrée ou en sortie vers l'erreur standard (à l'exception du format « info: »). Il fait aussi en sorte que certains opérateurs comme « [-colors](https://imagemagick.org/command-line-options/#colors) » produisent des informations supplémentaires. Ainsi, vous voudrez peut-être le désactiver de nouveau après l'avoir utilisé avec soit « [-identify](https://imagemagick.org/command-line-options/#identify) » soit le format « info: ».
Par exemple _ « -verbose -write info:image_info.txt +verbose » ou « -verbose -identify +verbose » .
---|---
| La lecture scriptée de la sortie de toute forme de « [identify](basics.html#identify) » devrait se faire de manière insensible à la casse. Cela assure une meilleure rétrocompatibilité entre différentes versions d'ImageMagick.
---|---
NOTE : « info: » (et « [-identify](https://imagemagick.org/command-line-options/#identify) ») est uniquement un format de sortie, produisant la même sortie que la commande « [identify](basics.html#identify) ». Vous ne pouvez pas lire, ni créer une image en utilisant le format de fichier « info: ». Vous pouvez aussi utiliser « [-print](https://imagemagick.org/command-line-options/#print) » pour imprimer des informations, mais cela ne s'applique qu'une seule fois à toute la séquence d'images. Cela signifie que vous pouvez utiliser cet opérateur pour calculer des expressions '%[fx:...]' bien plus complexes impliquant plusieurs images. Mais rappelez-vous que, contrairement aux autres méthodes ci-dessus, il ne s'applique qu'une seule fois à travers toutes les images.
-
null: -
En tant que format de sortie, cela « jettera » simplement les résultats de l'image. Ainsi, s'il est utilisé comme argument final dans une commande «
magick», «magick montage» ou «magick composite», le résultat final ne sera pas enregistré ! Pourquoi ? Eh bien, il se peut que vous soyez plus intéressé par des images spécifiques, générées pendant le traitement d'image plutôt que par le résultat global, surtout lors du débogage. Par exemple, ici nous extrayons et enregistrons une image, depuis une séquence d'images, puis jetons toutes les autres images en utilisant «null:». |magick eye.gif news.gif storm.gif tree.gif rose: logo: \ ( -clone 2 -write write_storm.gif ) null:
![[Sortie IM]](../static/img/files/write_storm.gif)
C'est beaucoup plus simple que de tenter de supprimer toutes les autres images une par une. En tant que format d'image d'entrée cependant, « null: » générera une image de remplacement spéciale d'un seul pixel transparent, avec un drapeau spécial 'source nulle', dans la séquence d'images courante. Cette image spéciale est particulièrement importante pour Laisser des trous dans un montage, et comme séparateur de liste pour la composition de couches multi-images. Elle est étroitement liée à un autre format d'image spécial connu sous le nom d'« image manquée », qui peut être généré pour des opérations comme « [-crop](https://imagemagick.org/command-line-options/#crop) ». Ce format d'image est produit lorsqu'une opération produit un résultat vide ou non sensé. Les deux images sont un seul pixel transparent, et ainsi les images « null: » seront aussi traitées comme s'il s'agissait d'une « image manquée ». Pour l'instant, il n'y a aucune méthode pour supprimer une image « null: » ou même une « image manquée », de la séquence d'images courante. Cependant, une telle méthode a été proposée. Écrivez-moi si vous trouvez que vous avez besoin d'une telle méthode.
-
txt: -
C'est un simple fichier texte ASCII, qui liste essentiellement chaque pixel de l'image, un par ligne. Ce n'est pas un convertisseur texte vers image général, pour cela voir Exemples de fichiers texte multi-lignes. Si l'« énumération de pixels » n'est pas reconnue, l'image sera passée au codeur de format «
[text:](text.html#text)», pour un rendu sous forme de fichier texte brut. Par exemple, voici une image «netscape:» mise à l'échelle vers une image de 2x2 pixels, puis listée en utilisant un format d'image «txt:».magick netscape: -scale 2x2! txt_netscape.txt
La première ligne (en-tête) de l'image est remplie des informations de base sur l'image. Les informations consistent en... File Magic : l'en-tête de l'image définit ce fichier comme le format d'image texte IM spécial (par exemple un fichier « ImageMagick pixel enumeration »), ceci est connu dans les milieux informatiques comme le 'magic' du fichier ou la chaîne de code qui identifie ce fichier comme étant ce format de fichier spécifique. Image Size : les deux nombres suivants définissent la taille de l'image contenue dans ce fichier. Multiplier ces nombres ensemble vous indiquera aussi combien de lignes devraient suivre l'en-tête pour définir entièrement l'image. IM produira toujours ce nombre de lignes, bien que, comme vous le verrez plus tard lors de la lecture, vous n'ayez PAS besoin de définir TOUS les pixels. MaxValue : le dernier nombre dans l'en-tête définit la 'valeur maximale' des données d'image qui est possible. Dans les exemples ci-dessus, c'était '255' qui résulte de l'utilisation d'une profondeur de 8 bits. La raison pour laquelle il a produit l'image « netscape: » intégrée à cette profondeur est qu'elle a été définie en interne en utilisant des valeurs sur 8 bits, et ainsi IM a préservé ce niveau de profondeur pour l'image. Voir la section sur le réglage de profondeur pour plus d'informations. Mais vous pouvez outrepasser le réglage de profondeur (jusqu'à la limite du réglage Q ou qualité à la compilation de votre IM, en changeant la « [-depth](https://imagemagick.org/command-line-options/#depth) » de l'image. Par exemple, ici je produis les valeurs de couleur comme des valeurs sur 16 bits (de 0 à 65535)...
magick netscape: -scale 2x2\! -depth 16 txt_netscape_16.txt
| Pour l'instant, vous ne pouvez pas définir une 'valeur maximale' spécifique à utiliser dans le format de fichier de sortie. Vous ne pouvez définir une valeur différente qu'en termes du réglage « [-depth](https://imagemagick.org/command-line-options/#depth) » courant, rendant la valeur maximale égale à 2^depth-1.
---|---
Colorspace : le dernier élément dans l'en-tête définit l'espace colorimétrique des données qui suivent. Si l'image contenait de la transparence, une lettre finale 'a' (pour alpha) est aussi ajoutée au nom de l'espace colorimétrique, et une colonne supplémentaire de nombres ajoutée entre parenthèses. Les images en niveaux de gris produiront une image comme 'grey', mais définiront au moins trois nombres, qui seront la même valeur pour chaque pixel. Par exemple, voici la même image utilisant un espace colorimétrique 'LAB' avec un canal alpha ajouté !
magick netscape: -scale 2x2\! -colorspace LAB -alpha set txt_cspace_lab.txt
Après l'en-tête initial viennent les lignes de données de pixels, une par pixel dans l'image. Coordinates : les deux premiers nombres jusqu'au deux-points ':' sont la position du pixel, en partant de 0. Color Values : après cela, les valeurs de couleur du pixel (de 0 à la MaxValue donnée dans l'en-tête) sont données entre parenthèses, avec de 3 à 5 nombres selon l'espace colorimétrique courant de l'image. Les espaces sont optionnels, donc la prudence est conseillée lors de l'analyse des nombres entre parenthèses. |
Les valeurs sont normalement des entiers. Cependant, à partir d'IM v6.9.2-1, si le define spécial « [-define](https://imagemagick.org/command-line-options/#define) txt:compliance=css » est donné avec « [-depth](https://imagemagick.org/command-line-options/#depth) 16 », les valeurs seront représentées comme des valeurs en pourcentage avec des signes '%'. Cela fait partie de la conformité SVG, CSS. |
|---|---|
Color Comments : tout ce qui suit les nombres entre parenthèses est considéré comme un commentaire. IM remplira des informations supplémentaires sur la couleur du pixel en utilisant des formats qu'il peut analyser comme argument de couleur (voir l'entrée de manuel « [-fill](https://imagemagick.org/command-line-options/#fill) » pour les détails de ces spécifications de couleur). Les commentaires de couleur sont cependant variables, bien que typiquement ils commenceront par une valeur de couleur hexadécimale avec dièse ('#'), après quoi ils pourront produire des valeurs RGB() ou des noms de couleur selon les données de pixel données. Ces noms de couleur devraient être compris par ImageMagick, mais sont destinés à servir de référence seulement, car c'est purement un commentaire. Exactement quelles couleurs sont fournies dépend fortement de la version d'IM que vous utilisez, surtout dans les premières versions IM v6 et antérieures. Il n'y a aucune garantie que cette zone de commentaire ne changera pas de nouveau à l'avenir, il est donc préférable de ne pas s'y fier. IM ne le fait pas lors de la lecture d'une image d'énumération de pixels. Voici un exemple de lecture correcte d'une énumération de pixels dans un script shell. Le format exact de l'image TXT est défini par la commande convert, puis 'tail' est utilisé pour jeter l'en-tête, 'tr' pour remplacer chaque caractère non numérique par un seul espace, afin que le 'while' suivant puisse lire facilement les nombres, en jetant tout nombre de commentaire ultérieur qui aurait pu rester. |
magick rose: -resize 3x2\! -depth 8 -colorspace RGB -alpha off txt:- |
tail -n +2 | tr -cs '0-9.\n' ' ' |
while read x y r g b junk; do
echo "$x,$y = rgb($r,$g,$b)"
done
La lecture d'images TXT est aussi valide. Vous n'avez pas besoin de définir TOUS les pixels de l'image. En fait, vous n'avez même pas besoin d'avoir les pixels dans le bon ordre ! ImageMagick lira simplement chaque ligne définissant un pixel à tour de rôle, et la 'dessinera' sur un canevas d'image vierge. Seuls les nombres entre parenthèses sur chaque ligne sont utilisés pour cela, pas les noms de couleur. Le canevas vierge initial est effacé et défini à la couleur d'arrière-plan courante. Ainsi, tout pixel non fourni par une image « txt: » sera laissé à cette couleur. Pour une utilisation intéressante des images « txt: », regardez Mappage de pixels vers l'avant où je produis une image de pixels énumérés, puis change chacune des positions de pixel afin de pivoter (déformer) l'image, avant de relire l'image de pixels énumérés, de nouveau dans IM. Dans l'image résultante, certaines positions de pixel n'ont pas été définies, tandis que d'autres positions avaient plusieurs pixels ajoutés. IM a géré cela sans problèmes.
Le format « txt: » est particulièrement utile avec l'opérateur « [-unique-colors](https://imagemagick.org/command-line-options/#unique-colors) », qui remplace chaque image de la séquence d'images courante par une nouvelle image contenant un pixel pour chaque couleur unique trouvée. Lorsque cela est produit vers un fichier de format « txt: », vous obtenez un résumé de base des couleurs contenues dans une image (mais pas leur nombre, ou histogramme). Par exemple, voici les couleurs utilisées par l'image tree. Comme le GIF ne peut utiliser que des nombres sur 8 bits, les couleurs sont aussi produites à la même profondeur. | |
magick tree.gif -unique-colors txt:-
Il existe une autre alternative à l'utilisation du format « txt: » d'IM en utilisant les divers formats de fichier image NetPBM. IM produit ce format en binaire par défaut, mais vous pouvez désactiver « [-compress](https://imagemagick.org/command-line-options/#compress) » pour produire une version texte ASCII du format NetPBM. Par exemple.
magick tree.gif -unique-colors -compress None -depth 8 tree_netpbm.ppm
Vous remarquerez peut-être que les nombres ci-dessus correspondent aux nombres du format de pixels énumérés (« txt: ») d'IM. Voir Dégradé redimensionné pour quelques exemples de génération d'une image au format NetPBM pour qu'IM la lise. Si vous voulez juste la couleur d'un pixel spécifique, vous pouvez rogner l'image jusqu'à un pixel, et la produire comme une image « txt: ».
magick rose: -crop 1x1+12+26 txt:
Ou vous pouvez utiliser un format de séquence d'échappement FX spécial pour produire la couleur sous une forme directement utilisable par IM.
magick rose: -format '%[pixel:u.p{12,26}]' info:
Voir aussi Extraction des couleurs d'image.
-
sparse-color: -
C'est un format d'image de sortie spécial qui renverra une simple liste séparée par des virgules de coordonnées et de couleurs pour chaque pixel non transparent. La chaîne de sortie convient pour une entrée directe dans l'opérateur Sparse Color. Par exemple, ceci trouve les quelques pixels les 'plus proches' d'une couleur rouge pure dans l'image «
rose:».magick rose: -alpha set -fuzz 13% +transparent red sparse-color:
À bien des égards, c'est plus utile que le format « [txt:](#txt) » montré ci-dessus, mais seulement si quelques pixels sont impliqués. Soyez cependant averti qu'au moment de la rédaction, la sortie est toute sur une seule ligne. Les scripts shell voudront peut-être magick les espaces de la sortie en sauts de ligne.
-
histogram: -
C'est en fait le format d'image «
[miff:](#miff)», mais avec un très grand commentaire d'image qui contient un décompte complet de toutes les couleurs dans l'image. C'est-à-dire, dans l'attribut 'Comment={...}' de l'en-tête texte «[miff:](#miff)». Par exemple, ici nous listons de nouveau les couleurs présentes dans l'image « tree », mais cette fois en incluant le décompte de pixels pour chaque couleur. Le commentaire d'histogramme texte est extrait de l'image «histogram:» en utilisant un magick identify formaté en «[info:](#info)» secondaire. | |magick tree.gif -define histogram:unique-colors=true \ -format %c histogram:info:-
| Le format de sortie « info: » a été ajouté à IM v6.2.4. Pour les versions d'IM antérieures, utilisez.. |
magick tree.gif histogram:- | identify -format %c -
| Vous noterez que le format est presque exactement le même que celui du format TXT précédent, ou format d'image d'énumération de pixels IM, y compris les commentaires sur les valeurs de couleur. La seule différence est que la position X,Y a été remplacée par un décompte du nombre de pixels. | Ce commentaire peut prendre très longtemps à créer. À partir d'IM v6.6.1-5, vous pouvez ajouter le réglage spécial « [-define](https://imagemagick.org/command-line-options/#define) histogram:unique-colors=false » qui désactivera cette génération de commentaire si vous n'en avez pas besoin. |
|---|---|
L'image elle-même est un graphe d'histogramme, de 256x200 pixels. L'axe des x est la valeur de couleur (0-255) et l'axe des y est le décompte de pixels (normalisé au nombre de pixels). L'histogramme pour chaque canal est affiché dans la couleur qu'il représente, et additionné. Ainsi, le rouge et le bleu se chevauchent pour faire du magenta. En d'autres termes, chaque canal de couleur a son propre histogramme séparé. Si vous voulez l'image convertie vers un autre format, enregistrez-la simplement dans ce format. « histogram: » est un format de traitement d'image spécial. Il va magick l'image, puis la produire dans le format spécifié par le suffixe du nom de fichier ou d'autres codes « _format_ : ». |
magick rose: \
-define histogram:unique-colors=false \
histogram:histogram.gif
![[Sortie IM]](../static/img/files/histogram.gif)
Une image très sombre sera fortement pondérée vers la gauche, tandis qu'une image claire sera fortement pondérée vers la droite. Les tons moyens, de même, sont représentés au milieu. Pour mieux voir cela, ici je sépare les histogrammes pour chacun des canaux de couleur. Je supprime aussi le commentaire texte de l'histogramme (s'il est encore présent), et redimensionne l'image pour l'affichage.
magick histogram.gif -strip -resize 50% -separate histogram-%d.gif
---
Pour l'image « rose: » ci-dessus, vous verrez que le rouge est plus étalé, montrant son importance vitale dans l'image. D'autre part, le vert et le bleu présentent des pics à gauche, montrant qu'ils n'ont que très peu d'influence sur l'image. Si vous êtes plus intéressé par la luminosité d'une image que par ses couleurs, magick l'image en niveaux de gris avant de générer une image « histogram: ». |
magick rose: -colorspace Gray \
-define histogram:unique-colors=false \
histogram:histogram_gray.gif
![[Sortie IM]](../static/img/files/histogram_gray.gif)
Comme vous pouvez le voir, l'histogramme d'une image en niveaux de gris est un peu différent. Comme la couleur rouge prédominante devient plutôt une couleur grise de ton moyen, produisant un pic au centre de l'histogramme. De plus, la petite zone de blanc cassé dans l'image produit maintenant un pic distinct à l'extrême droite du graphe. L'espace complètement vide à l'extrême gauche montre aussi qu'il n'y a aucune zone sombre dans l'image du tout. D'autre part, un meilleur histogramme 'global' peut être généré simplement en séparant tous les canaux de couleur de l'image originale et en les concaténant. L'histogramme résultant est une représentation de toutes les valeurs de couleur indépendamment du canal d'où provient cette valeur. |
magick rose: -separate -append \
-define histogram:unique-colors=false \
histogram:histogram_values.gif
![[Sortie IM]](../static/img/files/histogram_values.gif)
Malheureusement, comme « histogram: » est un format de sortie, vous devrez soit « canaliser » l'image vers une autre commande, soit l'enregistrer sur le disque, soit utiliser l'enregistrement/lecture spécial « [mpr:](#mpr) », si vous voulez traiter l'image davantage. Voir l'exemple dans « [mpr:](#mpr) » ci-dessous. Il serait bien qu'une méthode de génération d'histogrammes (et d'autres graphes) devienne disponible en tant qu'opérateurs plutôt qu'en tant que format de sortie spécial.
-
mpr:_{label}_ -
(Memory Program Register) enregistrera toute la séquence d'images dans un registre mémoire nommé, à partir duquel vous pourrez plus tard lire les données d'image. Ainsi, si vous voulez enregistrer une image pour l'utiliser plus tard, dans une opération d'image complexe, vous pouvez le faire. Écrire dans un «
mpr:» à la fin du traitement est inutile, car la mémoire du programme est rendue au système lorsque le programme se termine. Ainsi, vous voudrez utiliser une opération Write pour enregistrer les images dans un fichier au milieu de vos étapes de traitement, si vous en avez besoin dans un processus différent. Le 'label ' donné à «mpr:» peut être tout ce que vous voulez, c'est seulement une étiquette indiquant où l'image a été enregistrée en mémoire. Cela peut même être juste un simple nombre pour les personnes qui font des scripts et ne veulent pas gérer de noms, bien que les noms puissent rendre votre script plus facile à suivre. Après avoir enregistré une image (voir ci-dessous), vous pouvez alors relire l'image, depuis le même emplacement mémoire 'étiqueté', autant de fois que vous le souhaitez. Par exemple... |magick tree.gif -write mpr:tree +delete \ \ mpr:tree mpr:tree mpr:tree +append mpr.gif
![[Sortie IM]](../static/img/files/mpr.gif)
Notez l'utilisation de « [+delete](https://imagemagick.org/command-line-options/#delete) » dans le traitement d'image ci-dessus. Ci-dessus, ce n'est pas nécessaire (relisez simplement le « mpr:tree » deux fois au lieu de trois), mais il est très courant de supprimer toutes les images de la séquence d'images courante après avoir enregistré les images dans un registre « mpr: ». Fondamentalement, les deux lignes ci-dessus peuvent être considérées comme deux commandes « magick » complètement séparées, mais utilisant un registre mémoire nommé pour l'image intermédiaire plutôt que de l'espace disque. À bien des égards, utiliser « mpr: » revient à utiliser Clone ou Duplicate (que nous aurions pu utiliser dans l'exemple ci-dessus), mais utiliser « mpr: » nous permet de supprimer complètement toutes les images, pour vider la liste d'images courante pour d'autres travaux. La meilleure caractéristique de cette méthode est qu'elle vous permet aussi d'utiliser des réglages et des opérations qui ne fonctionnent que sur l'entrée d'image. Par exemple, l'utiliser avec l'opérateur d'image d'entrée « [tile:](canvas.html#tile) » pour mettre une image en tuiles sur une zone plus grande. |
magick tree.gif -flip -write mpr:tree +delete \
-size 64x64 tile:mpr:tree mpr_tile.gif
![[Sortie IM]](../static/img/files/mpr_tile.gif)
Vous pouvez aussi utiliser « mpr: » pour récupérer la sortie de certains des filtres de format d'image de sortie spéciaux pour un traitement ultérieur. Par exemple, ici nous enregistrons l'image de sortie de « [histogram:](#histogram) » puis la relisons pour continuer à la traiter dans la même commande, |
magick rose: -define histogram:unique-colors=false \
-write histogram:mpr:hgram +delete \
mpr:hgram -strip -resize 50% histogram_resized.gif
![[Sortie IM]](../static/img/files/histogram_resized.gif)
L'enregistrement en mémoire « mpr: » est en fait le seul moyen de réutiliser des images déjà en mémoire à travers des filtres d'E/S spéciaux comme un format de fichier de sortie tel que « [histogram:](#histogram) » ou un format de fichier d'entrée comme « [tile:](canvas.html#tile_memory) ». La même chose est vraie pour les options spéciales qui prennent une image d'entrée réelle, comme « [-tile](https://imagemagick.org/command-line-options/#tile) » ou pour le mappage de couleur d'images utilisant une autre image comme source. Voir Cartes de couleur multi-images. NOTEZ que de telles options sont remplacées dans IMv7 par des versions qui n'ont pas besoin que l'image soit lue depuis un fichier. C'est aussi le seul moyen d'utiliser la méthode -draw 'image' pour superposer des images en utilisant une image générée en mémoire, bien qu'il existe beaucoup d'autres techniques pour faire cela. L'image « mpr: » enregistre en fait la séquence d'images entière et pas juste une image. C'est un peu comme prendre un instantané de la séquence d'images courante pour pouvoir la recharger plus tard pour un traitement ultérieur. Cela vous permet par exemple de prendre des copies de toute une séquence d'animation, pour la dupliquer ou la cloner, sans avoir besoin de savoir combien d'images sont réellement impliquées. Voir Composition de couches pour un exemple de cela. Lorsque vous avez plusieurs images dans « mpr: », vous pouvez en fait encore extraire des images individuelles de cette séquence ! Utiliser « mpr:image'[2]' » tirera la troisième image d'une séquence multi-images enregistrée en utilisant « -write mpr:image ». Par exemple, ici j'extrais l'image 'storm' d'un ensemble de quatre images. |
magick eye.gif news.gif storm.gif tree.gif \
-write mpr:images -delete 0--1 \
\
mpr:images'[2]' mpr_extract.gif
![[Sortie IM]](../static/img/files/mpr_extract.gif)
L'opérateur de clonage d'image ne peut généralement pas gérer un nombre variable inconnu d'images, et en fait, avant que l'opérateur Clone ne soit ajouté, « mpr: » était la seule méthode disponible pour dupliquer des images en mémoire, sans utiliser de fichiers disque intermédiaires. | À partir d'IM v6.8.2, vous pouvez aussi stocker des images dans un processus démon de cache IM distant. Cela permet aux images (et à leurs méta-données) d'être transmises entre des commandes IM s'exécutant séparément, sans avoir besoin d'espace disque. VoirDémon de cache de pixels distribué
---|---
-
mpc: - Est un format d'enregistrement disque spécifique à IM qui a été conçu à l'origine en pensant aux très grandes images. Fondamentalement, c'est un fichier disque mappé en mémoire de la mémoire du programme, enregistré sur le disque sous forme de deux fichiers binaires, un «
.mpc» contenant les méta-données de l'image, et un «.cache» contenant le cache de pixels de l'image.
Le format « MPC: » crée deux fichiers pour enregistrer une image
De tels fichiers ne fonctionneront pas après qu'IM soit recompilé ou mis à niveau, et seulement pour l'IM compilé pour une machine spécifique. Ainsi, c'est seulement bon pour des fichiers temporaires de 'lecture rapide', comme pour contenir des images temporaires utilisées par un traitement d'image scripté, et non pour le stockage à long terme. Par exemple...
magick very_big_image.tif very_big_image.mpc
créera deux fichiers sur le disque. Un petit fichier « very_big_image.mpc » et un fichier de vidage mémoire spécial appelé « very_big_image.cache ». La taille du second fichier sera probablement bien plus grande que tout autre format de fichier image car c'est juste un vidage mémoire brut, non compressé. Cependant, le fichier n'a pas besoin d'être « lu » ou « décodé » mais peut être directement « paginé » en mémoire informatique, et utilisé exactement tel quel, sans aucune surcharge de traitement. Seulement beaucoup d'espace disque et d'E/S disque. En d'autres termes, il a seulement besoin du temps d'accès disque pour être lu, sans aucun traitement de format de fichier. C'est-à-dire, aucun décodage des données n'est nécessaire. Parce que l'image est 'prête en mémoire', elle est particulièrement utile pour les images temporaires de toutes tailles car elle sera utilisable immédiatement par la prochaine commande IM que vous émettez. Mais rappelez-vous, deux fichiers sont générés et ils seront plus grands qu'une taille de fichier image normale, alors faites attention à votre utilisation du disque, et au nettoyage du script. Mes propres scripts IM font bon usage de cette fonctionnalité. Par exemple, voir les scripts « de-pixelate » et « divide_vert », qui utilisent un assez grand nombre de fichiers image temporaires pour les opérations de traitement d'image. Cela peut être extrêmement utile pour les scripts ou la composition alpha Mogrify qui ont besoin de pouvoir lire la même image, encore et encore et encore, car IM n'a pas à décoder l'image, ni à utiliser beaucoup de mémoire juste pour la stocker. C'est aussi très utile pour traiter une très grande image, où vous devez extraire ou rogner une plus petite section de l'image pour le traitement réel. Cependant, comme la plupart des opérations d'image font en fait des copies clones des images pendant le traitement, une nouvelle copie en mémoire pourrait quand même être faite. Ainsi, un certain soin est encore nécessaire. Un rognage ou un redimensionnement vers des tailles d'image beaucoup plus petites sont les opérations les plus sûres pour la gestion de grandes images MPC. Pour plus d'informations, voir Gestion d'images vraiment massives ci-dessous.
fd:{file_descriptor}- Ce nom de fichier spécial qui vous permet de spécifier un 'descripteur de fichier ' spécifique depuis lequel l'image doit être lue ou vers lequel elle doit être écrite. Le nom '
fd:0' est l''entrée standard ' et 'fd:1' est la 'sortie standard ' du programme. Ceux-ci sont équivalents à l'utilisation d'un '-' comme nom de fichier. Cependant, vous pouvez spécifier n'importe quel 'descripteur de fichier ' avec lequel lire/écrire l'image. Y compris 'fd:2' pour l''erreur standard ', ou tout autre descripteur de fichier préalablement ouvert que le programme parent pourrait avoir arrangé. L'utilisation la plus courante de cela est dans les scripts shell très avancés, où vous pouvez avoir plusieurs flux de fichiers d'images. Ou pour les démons réseau qui peuvent avoir plusieurs flux de fichiers ouverts simultanément.
inline:{base64_file|data:base64_data}- Les images inline vous permettent de lire une image définie dans un encodage base64 spécial. Par exemple, pour lire une image encodée en base64, utilisez...
inline:base64_image.txt
Cet encodage pourrait provenir d'un fichier, mais il est plus typiquement donné directement comme argument de lecture au lieu d'un nom de fichier provenant d'une source d'image externe. Cela est plus typiquement utilisé comme alternative aux 'blobs' sur la ligne de commande, ou dans le traitement d'image par API. Ou mettez les données d'image directement sur la ligne de commande...
inline:data:mime-type;base64,/9j/4AAQSk...knrn//2Q==
Par exemple, encodons en base64 une très petite image (il existe de nombreux programmes qui vous permettront de faire cette conversion)...
openssl enc -base64 -in noseguy.gif
Notez que les données base64 peuvent contenir n'importe quelle quantité d'espaces blancs tels que des retours chariot et des sauts de ligne. Ils sont simplement ignorés par le format. Cela n'utilise aussi que des caractères ASCII normaux, c'est pourquoi c'est utilisé pour encoder des données binaires pour l'email et les pages web. Cela permet aussi de stocker des données binaires dans des programmes et des scripts sans problèmes. Par exemple, je pourrais avoir la commande suivante dans un script shell afin que le script lui-même ait l'image intégrée, et n'ait donc pas besoin d'une source d'image externe séparée. |
magick 'inline:data:image/gif;base64,
R0lGODlhIAAgAPIEAAAAAB6Q/76+vvXes////wAAAAAAAAAAACH5BAEAAAUALAAA
AAAgACAAAAOBWLrc/jDKCYG1NBcwegeaxHkeGD4j+Z1OWl4Yu6mAYAu1ebpwL/OE
YCDA0YWAQuJqRwsSeEyaRTUwTlxUqjUymmZpmeI3u62Mv+XWmUzBrpeit7YtB1/r
pTAefv942UcXVX9+MjNVfheGCl18i4ddjwwpPjEslFKDUWeRGj2fnw0JADs=
' b64_noseguy.gif
![[Sortie IM]](../static/img/files/b64_noseguy.gif)
Rappelez-vous qu'avec cela, l'image pourrait être utilisée dans votre script (shell ou API). Vous n'avez pas besoin d'avoir un fichier image externe séparé, rendant l'installation d'un script par ailleurs simple plus compliquée. Alors pourquoi « [inline:](#inline) » a-t-il cette forme plutôt compliquée ? Fondamentalement parce que c'est le format utilisé pour les images inline dans les pages web HTML. Par exemple, dans ce qui suit, l'image à droite a été incluse directement inline sur la page web, et non comme un fichier externe séparé, en utilisant une balise HTML de la forme... |
<IMG SRC="data:image/gif;base64,
R0lGODlhIAAgAPIEAAAAAB6Q/76+vvXes////wAAAAAAAAAAACH5BAEAAAUALAAA
AAAgACAAAAOBWLrc/jDKCYG1NBcwegeaxHkeGD4j+Z1OWl4Yu6mAYAu1ebpwL/OE
YCDA0YWAQuJqRwsSeEyaRTUwTlxUqjUymmZpmeI3u62Mv+XWmUzBrpeit7YtB1/r
pTAefv942UcXVX9+MjNVfheGCl18i4ddjwwpPjEslFKDUWeRGj2fnw0JADs="
ALT="Nose Guy" WIDTH=32 HEIGHT=32 VSPACE=5 HSPACE=5 BORDER=0 >
Cela ne fonctionnera pas avec tous les navigateurs web, par exemple cela ne fonctionnera pas avec IE7 et antérieurs, mais fonctionnera avec IE8. Fondamentalement, les navigateurs web les plus modernes le comprennent.
Le même type de format de données inline est aussi utilisé pour les images de 'visage' dans les en-têtes d'email, et probablement beaucoup d'autres types de fichier. APARTÉ : grâce à la partie 'magic' d'ImageMagick, la plupart des formats de fichier image n'ont pas besoin d'inclure le type mime (la partie 'image/gif' de la longue chaîne). Et en fait, il est complètement ignoré par IM dans tous les cas. Cependant, la virgule ',' est encore requise pour marquer la fin de cette partie de la chaîne de données d'image inline. |
magick 'inline:data:,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//U
b//ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ek
yky67QZ1hLnjM5UUde0ECwLJoExKcppV0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguW
w6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7
' b64_folder.gif
![[Sortie IM]](../static/img/files/b64_folder.gif)
AVERTISSEMENT : l'entrée d'option de ligne de commande est limitée à 5000 caractères. De plus, beaucoup de shells (et en particulier l'entrée PC-DOS) ont des limites de longueur totale de ligne de commande. Ainsi, cela ne convient pas pour de très grandes images base64.
-
clipboard: - Lire ou écrire l'image vers ou depuis le presse-papiers Windows. (Windows uniquement).
-
ephemeral:{image_file} -
Lire puis supprimer ce fichier image. C'est un format de fichier de lecture d'image spécial qui amènera IM à supprimer le fichier image donné après que ce fichier a été lu en mémoire. Notez que l'image en mémoire n'aura pas été traitée ni même enregistrée lorsque le fichier lu aura été supprimé. C'est très dangereux et devrait être utilisé avec une extrême prudence. C'est surtout utilisé dans le lancement de délégués. Ici, le délégué en arrière-plan lira l'image d'entrée, puis la supprime lorsqu'il en a les données. Cela notifie à son tour le processus 'parent' au premier plan, que l'enfant est prêt à continuer par lui-même, car il a fini de lire l'image fournie. Le programme principal peut alors nettoyer et continuer son traitement d'image séparément, ou simplement quitter, selon le cas. Le délégué de sortie d'image «
show:» utilise cela avec la commande «magick display», pour mettre automatiquement en arrière-plan un magick display d'image avant que la commande principale ne continue ou ne quitte. (voir ci-dessous) Par exemple, j'ai utilisé cela dans un script shell qui appelle «[flicker_cmp](../static/img/scripts/flicker_cmp)» pour afficher des résultats intermédiaires, mais continue ensuite automatiquement (ou quitte) lorsque IM a signalé que le programme a fini de lire son image d'entrée en supprimant la deuxième image donnée. Si vous avez besoin de ce retour d'information mais que vous devez aussi préserver l'image en cours de lecture, alors faites une copie, un lien physique, ou un lien symbolique vers l'image originale, et passez ce fichier comme «ephemeral:». de cette façon, lorsqu'il est supprimé, l'image originale est préservée. NOTE : il n'y a actuellement aucun moyen d'amener « animate » ou « display » à signaler quand il a fini une animation, ou a réellement mis l'image en magick display. :-( Cependant, vous pouvez faire en sorte que « magick » lise une image « ephemeral: » séparée, pour notifier à un script de contrôle qu'il a atteint un point spécifique dans son traitement d'image.# Flouter une image, et montrer une comparaison à l'écran avant # de supprimer automatiquement et de quitter. magick rose: input_image.png magick input_image.png -blur 0x5 blurred.png flicker_cmp input_image.png ephemeral:blurred.png &
# attendre que la deuxième image ait été lue et supprimée ! while [ -f blurred.png ]; do usleep 100; done
# À ce stade, nous pouvons continuer (ou quitter) sans problèmes. # pendant que l'affichage à l'écran continue en arrière-plan. rm -f input_image.png
J'ai aussi utilisé cela dans d'autres programmes d'arrière-plan, comme signal que ce programme d'arrière-plan est prêt à continuer.
-
show:,win:etx:-- Afficher les images directement à l'écran -
Ce sont des formats de sortie spéciaux qui afficheront directement le résultat de l'image sur votre écran. Au lieu d'enregistrer l'image dans un fichier, il affiche simplement le résultat. C'est très utile pour tester rapidement des commandes IM afin de voir quels seront les résultats, et est fortement recommandé à cette fin. Cependant, ce ne sont que des versions très simples des commandes «
[display](basics.html#display)» et «[animate](basics.html#animate)». Par exemple, obtenez un résumé rapide des images dans un répertoire...magick montage *.jpg show:
Voyez les zones qui sont différentes entre deux images...
magick compare image1.png image2.png show:
Tous les formats listés ici font en fait appel au programme « [display](basics.html#display) » pour accomplir leur tâche. Cependant, ils gèrent chacun la tâche de manières différentes. Par exemple, 'show:' utilisera un délégué de lancement pour exécuter un programme « [display](basics.html#display) » séparé. Cela signifie qu'une fois que l'image a été affichée, la commande originale continuera son traitement (typiquement en quittant, sauf si vous utilisez « -write show: »). D'autre part, utiliser 'x:' ou 'win:' attendra que vous quittiez la fenêtre d'affichage avant de permettre à la commande originale de continuer (et de quitter). Malheureusement, aucune de ces méthodes n'affichera très bien les animations. Pour cela, il vaut mieux canaliser l'animation (au format MIFF) vers la commande « [animate](basics.html#animate) ».
-
x:(en entrée) - Lire un affichage X Window -
Vous pouvez aussi lire l'affichage X window courant en utilisant l'opérateur «
x:», à peu près de la même manière que vous le pouvez avec la commande « import ». En fait, sans options, il agit exactement comme la commande « import ». Utilisez le bouton gauche pour sélectionner la fenêtre dont vous voulez saisir une copie, ou délimitez une zone en utilisant le bouton du milieu. Par exemple, pour sélectionner une fenêtre en utilisant votre souris, puis afficher la fenêtre qui vient d'être saisie dans une autre fenêtre (quitte lorsque la fenêtre saisie est affichée)...magick x: show:
AVERTISSEMENT. si vous saisissez une fenêtre qui n'est pas mappée (iconifiée), ou qui a une autre fenêtre par-dessus, le contenu de l'image contiendra soit une zone vide, soit le contenu de la fenêtre qui se chevauche !!! Alors assurez-vous, lors de la saisie d'une fenêtre, que cette fenêtre soit entièrement visible à l'écran. Pour saisir tout l'affichage, utilisez 'root' comme nom de fenêtre.
magick x:'root' full_screen_dump.jpg
Ou utilisez les modificateurs de lecture pour saisir une zone spécifique de l'affichage.
magick x:'root[300x400+879+122]' part_screen_dump.jpg
En fournissant un nom de fenêtre, vous pouvez saisir une fenêtre spécifique. Par exemple, ceci saisira la fenêtre intitulée 'MailEd'...
magick x:'MailEd' window.jpg
Cependant, cela ne fonctionne vraiment pas bien, car souvent vous avez plusieurs fenêtres avec le même nom, ou le nom de la fenêtre ne peut tout simplement pas être déterminé. La meilleure façon est d'indiquer à IM la fenêtre exacte voulue en utilisant un « X Window ID » qui est le numéro que l'affichage X utilise pour identifier de manière unique une fenêtre spécifique (ou fenêtre enfant). Le X Window ID est typiquement recherché en utilisant la commande « xwininfo », mais d'autres programmes comme « xdotool » et « xwit » ainsi que d'autres outils comme « xprop » peuvent être utilisés pour trouver des informations sur les fenêtres. Par exemple des choses comme la classe de fenêtre, le nom, le titre, sa taille et son placement, les fenêtres enfants, et la décoration du gestionnaire de fenêtres. Par exemple, trouvez toutes les fenêtres avec « Mozilla Firefox » dans le titre ou le nom...
xwininfo -root -all | grep "Mozilla Firefox"
Je peux ensuite extraire le X Window ID de la fenêtre que je veux à partir de la sortie de ce qui précède. Voici un script bash un peu plus complexe que j'ai dans mon gestionnaire de fenêtres. Lorsque j'appuie sur un bouton, il recherche l'ID de la fenêtre ayant le 'focus' courant, la capture, puis nomme le fichier en PNG dans mon répertoire courant en utilisant le numéro de capture suivant, selon toute capture précédente effectuée.
bash -c "
id=$(xprop -root _NET_ACTIVE_WINDOW | sed 's/.* //')
magick x:$id capture-tmp-$$.png
num=$( ls capture-[0-9]*.png 2>/dev/null | sed -n '$ s/[^0-9]//gp' )
num=$( printf %03d $(expr $num + 1) )
mv capture-tmp-$$.png capture-$num.png
"
La plupart des programmes de terminal vous indiqueront le X Window ID qu'ils utilisent pour magick afficher du texte dans la variable d'environnement « WINDOWID ». Ainsi, si vous exécutez ceci depuis une ligne de commande d'un XTerm, ou d'un Gnome Terminal, vous saisirez une copie de la fenêtre de terminal courante.
magick x:$WINDOWID this_terminal.png
Maintenant, pour un peu de fun... Ici, je saisis le contenu de mon terminal courant, dessine des trucs dedans, puis utilise le « [display](basics.html#display) » pour le redessiner dans la même fenêtre de terminal !
window=`xwininfo -children -id $WINDOWID |\
sed -n 's/^ *\(0x[^ ]*\).*/\1/p'`; \
window="${window:-$WINDOWID}"; \
magick x:$window -background black \
-draw 'fill black rectangle 40,40 160,160' \
-draw 'stroke red line 50,50 50,150 line 50,150 150,150' \
-draw 'fill lime circle 110,100 80,100' \
-draw 'stroke dodgerblue line 50,150 150,50' \
rose: -geometry +180+60 -composite \
png:- |\
magick display -window $window -
La première commande ci-dessus est conçue pour une fenêtre « XTerm », qui exige que la fenêtre dans laquelle vous « magick display », soit la fenêtre enfant du « WINDOWID » fourni. La deuxième ligne revient à la valeur originale de « WINDOWID » si aucune fenêtre 'enfant' n'est trouvée, comme c'est le cas pour une fenêtre « Gnome-Terminal ». Une fois que la fenêtre à utiliser est déterminée, elle est saisie, dessinée dessus, et restaurée dans la fenêtre de terminal ! Et hop, vous avez une sortie graphique instantanée directement dans la fenêtre de terminal courante. Voici un exemple plus simple, ceci assombrit le contenu de la fenêtre chaque fois que vous l'exécutez. Essayez d'exécuter ceci quelques fois dans une vraie fenêtre « xterm », et vous constaterez que plus la commande est ancienne dans la fenêtre de terminal, plus elle s'assombrit !
window=`xwininfo -children -id $WINDOWID |\
sed -n 's/^ *\(0x[^ ]*\).*/\1/p'`; \
window="${window:-$WINDOWID}"; \
magick x:$window -background black -colorize 20% png:- |\
magick display -window $window -
Et voici une 'capture d'écran' montrant ce qui s'est passé lorsque j'ai répété ce qui précède dans ma propre fenêtre « xterm »...
Soyez averti que bien que le contenu du terminal soit modifié, c'est seulement temporaire. Si vous iconifiez, masquez, ou changez d'écrans de bureau, puis revenez au terminal, les modifications seront perdues car le programme de terminal redessine la fenêtre, et efface votre propre 'dessin'. Ce qui précède ne fonctionne pas aussi bien pour un « Gnome-Terminal » que pour les « XTerm » parce que le premier aime 're-dessiner' sa fenêtre à chaque fois qu'il défile, là où un « XTerm » ne le fait pas. Imaginez des scripts IM qui affichent les résultats de graphes et d'autres choses directement dans diverses fenêtres dans le cadre d'un programme client plus large. C'est en fait ainsi que de nombreux visionneuses postscript, et même de nombreux navigateurs web affichent la sortie de sous-programmes spéciaux. C'est-à-dire qu'ils font en sorte que ce sous-programme prenne le relais et dessine directement dans une sous-fenêtre fournie. Expérimentez, et faites-moi (ainsi qu'aux autres) savoir ce que vous trouvez, soit par email soit sur le forum des utilisateurs IM.
Codeurs et délégués pour les formats d'image
Les codeurs (coders) sont des modules de bibliothèque dynamique (généralement écrits dans le langage de programmation C) qui gèrent l'aspect « format: » de l'entrée et de la sortie d'image. Ils peuvent aussi être utilisés par les utilisateurs pour créer des filtres à but spécial. Ils peuvent nécessiter l'installation de bibliothèques externes supplémentaires, qui sont souvent appelées 'bibliothèques déléguées'. Ils sont chargés comme modules dynamiques seulement lorsque c'est nécessaire, ce qui signifie que les bibliothèques associées utilisées par un codeur n'ont pas besoin d'être installées, sauf si vous voulez réellement utiliser ce codeur. Ces exemples n'entreront pas dans la programmation C requise pour écrire des codeurs, mais il y a un exemple de codeur dans le code source qui peut être utilisé pour créer vos propres modules de codeur.
Un délégué (delegate) est simplement une commande qu'IM connaît et qui lui permet de magick entre différents formats. Cela permet à IM d'utiliser cette commande 'plus simple' et pré-écrite, plutôt que d'exiger un codeur binaire plus complexe pour gérer un certain format de fichier image. Pour obtenir une liste des délégués disponibles, utilisez la commande spéciale...
magick -list delegate
Le programme 'délégué' le plus connu qu'IM utilise est « ghostscript » qui permettra à IM de lire, et de magick les images vectorielles Postscript et PDF très complexes vers un autre format de fichier image raster qu'IM peut lire. Cependant, les 'commandes déléguées ' sont très utiles pour les utilisateurs aussi, car elles vous permettent d'étendre IM afin qu'il puisse gérer des types d'images spéciaux, ou fournir des méthodes alternatives pour lire et écrire ces images. Les 'commandes' elles-mêmes sont listées dans un fichier nommé « delegates.xml », et qui est situé dans le répertoire de configuration système d'IM. Mais il lira aussi un « delegates.xml » situé dans le sous-répertoire personnel « .magick » du répertoire personnel Linux/UNIX de l'utilisateur. Et c'est dans ce second fichier que les utilisateurs devraient placer leurs 'délégués de commande'.
Exemple de commande de délégué d'entrée
Par exemple, je peux créer un fichier « delegates.xml » personnel dans le sous-répertoire « .magick » de mon répertoire personnel Linux/UNIX, de la forme...
<?xml version="1.0" encoding="UTF-8"?>
<delegatemap>
<delegate decode="flip" command="magick '%i' -flip 'miff:%o'"/>
</delegatemap>
C'est un fichier de configuration de 'délégué' complet, mais seule la ligne du milieu est un délégué réel. Un très simple qui indique à IM que s'il voit une image avec soit un suffixe '.flip' soit un préfixe de format 'flip:', il devrait appeler la commande ci-dessus, pour lire l'image au format 'flip'. Par exemple.. |
magick flip:tree.gif delegate_tree_flip.gif
![[Sortie IM]](../static/img/files/delegate_tree_flip.gif)
Dans ce cas, tout ce que fait la commande déléguée est d'utiliser une commande IM « magick » séparée pour 'retourner' l'image à l'envers, avant même que la commande IM originale ne lise et traite l'image ! Le délégué suppose que la commande comprendra le format de fichier image donné et qu'elle renverra N'IMPORTE QUEL format de fichier image qu'IM lui-même peut comprendre et traiter (un format de fichier image MIFF dans ce cas). Les parties '%i' et '%o' du délégué représentent des noms de fichier temporaires, les noms de fichier d'entrée et de sortie fournis que le délégué devrait utiliser. Ces noms de fichier sont générés par IM, et seront situés dans un répertoire temporaire. Ces noms de fichier temporaires n'ont PAS non plus de suffixe d'image, il est donc important que vous préfixiez le type de format d'image souhaité, si nécessaire. C'est fait de cette façon pour des raisons de sécurité, et parce qu'IM lui-même peut seulement lire un flux de données, et non un fichier réel. Cela signifie aussi que la commande déléguée n'a pas à gérer des choses comme le nettoyage de ces fichiers une fois terminé. Il y a d'autres substitutions '%' pour des choses comme un second nom de fichier temporaire pour les fichiers temporaires intermédiaires, la densité de l'image, la taille, et ainsi de suite. Plus de détails sur ces séquences d'échappement et autres options de délégué sont fournis dans les commentaires en haut du fichier 'système' « delegate.xml » installé d'IM. Maintenant, cela peut sembler un exemple plutôt idiot et trivial, mais cela signifie essentiellement que vous pouvez maintenant utiliser une commande secondaire pour magick N'IMPORTE QUEL fichier de données vers N'IMPORTE QUELLE image qu'IM comprend. IM saura alors comment gérer ce type de données automatiquement étant donné le suffixe d'image, ou un préfixe de format, sans que vous ayez besoin de vous souvenir de tous les détails. Beaucoup de délégués de ce type ont déjà été ajoutés au fichier système, alors ça vaut le coup d'y jeter un œil. | _Pour des raisons de sécurité, les délégués dans un fichier « delegates.xml » personnel n'outrepasseront pas les délégués définis dans le fichier « delegates.xml » installé par le système. Vous ne pouvez ajouter que de nouveaux formats de délégué uniques dans ".magick/delegates.xml" dans votre répertoire personnel, les délégués en double ultérieurs seront ignorés.
Bien sûr, si le format d'entrée est déjà connu en interne, alors bien sûr les délégués système ne sont pas consultés.
De plus, comme toujours, assainissez toute entrée utilisateur (surtout utilisateur web), car vous ne voulez pas que l'utilisateur utilise un délégué sans que vous le sachiez.
_
---|---
Par exemple, à partir d'IM v6.4.2-6, un délégué « autotrace: » a été ajouté au fichier des délégués système, qui exécutera la commande « [AutoTrace](http://autotrace.sourceforge.net/) » lors de la lecture de N'IMPORTE QUELLE image d'entrée. IM convertit l'image d'entrée vers le format d'image PNG requis par le programme délégué, la filtre à travers le délégué, puis lit le SVG résultant (typiquement via une bibliothèque RSVG externe), pour générer une version aux contours lissés de l'image bitmap d'entrée originale. Voir Exemple de convertisseur raster vers vecteur. Si un convertisseur génère plusieurs fichiers image (tels que PNG), vous devrez fusionner toutes ces images séparées en un seul format multi-images tel que MIFF, afin qu'IM puisse lire les multiples images depuis le seul fichier de sortie. Parfois, IM enchaînera plusieurs programmes délégués pour lire une image. Par exemple, pour lire une page 'HTML' comme une image, il appelle d'abord le délégué « html2ps » pour la magick en postscript. Puis il convertit le fichier postscript généré en un ensemble d'images multiples en utilisant le programme délégué spécial « ghostscript ». Bien sûr, utiliser deux délégués ou plus de cette façon peut produire d'autres problèmes en raison des interactions complexes, des mauvaises installations, et des bugs qui peuvent être présents dans les programmes délégués. Mais en général ça fonctionne, et c'est un aspect clé de ce qui rend ImageMagick magique.
Exemple de délégué de sortie
Des choses similaires sont faites lors de l'enregistrement vers des formats de fichier image spécifiques qu'IM ne comprend pas directement. Par exemple, en ajoutant ce délégué à votre fichier « .magick/delegates.xml » personnel, vous pouvez indiquer à IM comment créer un fichier image '.xyzzy'.
<delegate decode="gif" encode="xyzzy" command='mv "%i" "%o"'/>
![[Texte IM]](../static/img/files/write_stdout.txt.gif)
![[Texte IM]](../static/img/files/write_identify.txt.gif)
![[Sortie IM]](../static/img/files/eye_magnify.gif)
![[Sortie IM]](../static/img/files/news_magnify.gif)
![[Sortie IM]](../static/img/files/storm_magnify.gif)
![[Sortie IM]](../static/img/files/image-0.gif)
![[Sortie IM]](../static/img/files/image-1.gif)
![[Sortie IM]](../static/img/files/image-2.gif)
![[Sortie IM]](../static/img/files/image_0.gif)
![[Sortie IM]](../static/img/files/image_1.gif)
![[Sortie IM]](../static/img/files/image_2.gif)
![[Sortie IM]](../static/img/files/image_000.gif)
![[Sortie IM]](../static/img/files/image_001.gif)
![[Sortie IM]](../static/img/files/image_002.gif)
![[Sortie IM]](../static/img/files/image_1_of_3.gif)
![[Sortie IM]](../static/img/files/image_2_of_3.gif)
![[Sortie IM]](../static/img/files/image_3_of_3.gif)
![[Sortie IM]](../static/img/files/image_101.gif)
![[Sortie IM]](../static/img/files/image_102.gif)
![[Sortie IM]](../static/img/files/image_103.gif)
![[Sortie IM]](../static/img/files/parrots_lrg.jpg)
![[Sortie IM]](../static/img/files/parrots_big.jpg)
![[Sortie IM]](../static/img/files/parrots_med.jpg)
![[Sortie IM]](../static/img/files/parrots_sml.jpg)
![[Sortie IM]](../static/img/files/scroll_lrg.jpg)
![[Sortie IM]](../static/img/files/scroll_big.jpg)
![[Sortie IM]](../static/img/files/scroll_med.jpg)
![[Sortie IM]](../static/img/files/scroll_sml.jpg)
![[Texte IM]](../static/img/files/write_miff_info.txt.gif)
![[Texte IM]](../static/img/files/color_table.png)
![[Texte IM]](../static/img/files/info_image.txt.gif)
![[Sortie IM]](../static/img/files/paged.gif)
![[Texte IM]](../static/img/files/info_paged.txt.gif)
![[Texte IM]](../static/img/files/info_verbose.txt.gif)
![[Texte IM]](../static/img/files/txt_netscape.txt.gif)
![[Texte IM]](../static/img/files/txt_netscape_16.txt.gif)
![[Texte IM]](../static/img/files/txt_cspace_lab.txt.gif)
![[Texte IM]](../static/img/files/txt_shell_read.txt.gif)
![[Sortie IM]](../static/img/images/tree.gif)
![[Texte IM]](../static/img/files/tree_colors.txt.gif)
![[Texte IM]](../static/img/files/tree_netpbm.ppm.gif)
![[Texte IM]](../static/img/files/rose_one.txt.gif)
![[Texte IM]](../static/img/files/rose_sparse.txt.gif)
![[Texte IM]](../static/img/files/tree_histogram.txt.gif)
![[Sortie IM]](../static/img/files/histogram-0.gif)
![[Sortie IM]](../static/img/files/histogram-1.gif)
![[Sortie IM]](../static/img/files/histogram-2.gif)
![[Texte IM]](../static/img/files/b64_image.txt.gif)
![[instantané]](../static/img/img_diagrams/xterm_darken.png)