Exemples ImageMagick -- Formats d'image courants
- Préface et index des exemples ImageMagick
- Bref aperçu des formats de fichiers image courants
- Format de fichier image GIF
- Table de couleurs limitée du GIF
- Couleur de transparence du GIF
- Transparence booléenne du GIF
- GIF sur un fond de couleur unie
- GIF sur un fond à motif
- GIF pour des fonds non spécifiques (tramage de la transparence)
- Traitement GIF hors ImageMagick
- Gestion des décalages du GIF
- Transparence JPEG - INEXISTANTE
- Distorsion des couleurs JPEG
- Lecture des images JPEG
- Écriture des images JPEG
- Formats de sortie apparentés au JPEG (bref aperçu)
- Traitement JPEG hors ImageMagick (bref aperçu)
- Meilleure compression PNG
- PNG, navigateurs web et transparence
- PNG et le canevas virtuel
- Résolution, densité et unités du PNG
- Sous-formats du PNG
- Contrôles d'écriture des images PNG
-
Changer l'espace colorimétrique d'une image -- conversion RVB <=> CMJN
-
Un mot sur les formats d'image vectoriels Autres formats de fichiers image
Postscript (PS), PS encapsulé (EPS), PDF,
PbmPlus/NetPBM (PBM, PGM, PPM, PNM, PAM),
TIFF, BMP, ICO, Image numérique brute (CRW,CR2,etc),
MPEG, M2V et AVI, MNG, Digital Picture Exchange (DPX),
PSD, WMF, MacroMedia Flash (SWF),
Conversion de pages web HTML, Format d'impression PCL,
Format Kodak PhotoCD (PCD), Données RVB brutes, Bon nombre de formats de fichiers image ont des particularités qu'il faut garder à l'esprit lorsqu'on les utilise. Cette page traite de ces besoins spécifiques et des moyens d'améliorer les résultats dans ces formats.
Bref aperçu des formats de fichiers image courants
Pour une introduction à la lecture et à l'écriture des formats d'image, voir Formats de fichiers image. La liste de tous les formats de fichiers pris en charge par ImageMagick est quant à elle donnée sur la page des formats d'image d'IM. Voici un aperçu très rapide des formats de fichiers image « normaux » les plus courants, ainsi que de leurs avantages et inconvénients généraux…
- GIF
- Ce format est extrêmement répandu et existe depuis si longtemps que tous les logiciels de traitement d'image le comprennent. Mais il n'utilise qu'un nombre limité de couleurs (une table de 256 couleurs) et n'enregistre qu'en qualité 8 bits. Son codage par plages (run-length encoding) intégré lui permet toutefois d'enregistrer très efficacement des images ne comportant que quelques couleurs. Bien que le format gère la transparence, il ne comprend que la transparence booléenne (activée/désactivée) et souffre donc d'« aliasing » ou d'« escaliers ». Le texte simple aux traits fins est particulièrement dégradé lorsqu'il est enregistré en GIF transparent. La seule solution à ce problème consiste à lier l'image GIF à un fond précis de la page web dans laquelle elle est utilisée. Le format GIF peut enregistrer plusieurs images pour former une séquence d'animation ; à cette fin, il enregistre également la taille du canevas de l'image et les informations de décalage (page). Notez toutefois que les décalages négatifs ne sont pas pris en charge, et toute tentative en ce sens réinitialise ce décalage à zéro. Il convient surtout aux petites images de dessins animés, de dessins au trait et de petites icônes, qui ont toutes des couleurs limitées et se compressent donc bien. Son usage doit cependant être évité lorsqu'un format plus récent comme le PNG est disponible.
- JPEG
- Ne gère pas du tout la transparence. L'image équivaut à l'application de l'opération «
[-alpha off](https://imagemagick.org/command-line-options/#alpha)» pour retirer le canal alpha, si bien que toute transparence de fond devient généralement noire selon le traitement d'image utilisé pour générer l'image. Ce format est aussi « avec perte », produisant des effets de bord sur les lignes et bordures nettes ; il ne devrait donc pas être utilisé pour un quelconque traitement d'image intermédiaire, ni pour le stockage d'originaux (à moins qu'ils ne soient déjà dans ce format). Il est bien adapté au stockage à long terme de photographies réelles, mais évitez-le si vous prévoyez de retraiter l'image, ou si l'image contient de grandes zones de couleurs unies. - PNG
- Ce format est destiné à terme à remplacer les formats plus anciens comme le GIF et le TIFF. C'est un format moderne capable de gérer la qualité 16 bits avec quatre canaux de couleur, permettant l'usage complet des couleurs semi-transparentes. Il inclut aussi un très grand nombre d'options de compression d'image sans perte. Son plus gros inconvénient est qu'il est encore relativement récent, si bien que le navigateur web Microsoft IE (v6) ne le gère pas correctement de façon automatique. Un correctif est cependant disponible pour ce problème. Le format n'enregistre pas les informations de taille du canevas (contrairement au GIF), mais il enregistre les décalages du canevas et même les décalages négatifs (ce que le GIF ne fait pas) ; toutefois, certains navigateurs web rencontrent des problèmes lorsqu'un décalage négatif est utilisé, ce qui déconseille son emploi pour une image finale destinée à être affichée dans un navigateur. Pour enregistrer des images intermédiaires « en couches », la possibilité d'enregistrer des décalages négatifs peut être très importante et l'est souvent bien plus que l'absence d'enregistrement de la taille du canevas.
- MNG
- C'est le format multi-image du PNG, permettant des animations de qualité et de rapidité proches du cinéma. Un exemple simple d'utilisation du MNG est recherché ; si vous en avez un, envoyez-le-moi par courriel. Le format d'animation MNG semble devenir obsolète et a été abandonné par certains navigateurs web comme FireFox.
- TIFF
- C'est le format d'échange d'images qui a été développé pour transférer des images de haute qualité entre programmes avant l'apparition de tout format d'image sérieux. Malheureusement, du fait de cette origine, le format a été modifié par un assortiment hétéroclite de fonctionnalités et de styles de compression, et aucun programme ne les comprend tous. Le format n'est aujourd'hui pratiquement plus utilisé que par «
[Photoshop](http://www.adobe.com/products/photoshop/)» sur les plateformes Windows, et c'est la seule source qui fournisse une quelconque référence standard pour le format d'image TIFF. Les fichiers TIFF peuvent gérer plusieurs images, même si peu d'applications autres qu'IM gèrent les TIFF multi-images. En règle générale, à moins que le format interne de l'image TIFF ne reste relativement basique, rien ne garantit qu'un fichier TIFF généré par un programme sera utilisable par un autre programme, y compris IM ou même «[Photoshop](http://www.adobe.com/products/photoshop/)» lui-même. C'est pourquoi je ne recommande ce format en aucun cas ! Je vous suggère d'utiliser un autre format que le TIFF (ou le JPEG), surtout pour le stockage à long terme des images. Les quelques notes dont je dispose sur ce format et ses problèmes sont fournies plus bas dans la section Formats divers, TIFF. Ces notes d'utilisation proviennent des listes de diffusion et forums d'IM, car moi-même je n'utilise pas et n'ai pas besoin d'utiliser le TIFF. - Formats vidéo
- Autres formats d'animation de qualité cinéma, généralement fondés sur une compression avec perte pour réduire la taille (et la qualité) du film. Ces deux formats sont en constante évolution, entre améliorations et fonctionnalités restreignant la sécurité, ce qui rend toute forme de traitement difficile. Au dernier décompte, il existait plus de 200 « codecs » de format vidéo d'usage courant pour l'un ou l'autre objectif. De ce fait, IM ne gère pas directement ce format ; il s'appuie plutôt sur d'autres logiciels pour traiter les images individuelles en entrée et en sortie des animations. Ces programmes « délégués » incluent «
mpeg2decode», «mpeg2encode» et «mplayer». Voir MPEG, M2V et AVI plus bas).
| Certains systèmes (comme Ubuntu) désactivent l'utilisation de formats de fichiers image spécifiques au moyen d'une politique de sécurité. Tapezmagick -list policy pour voir quelles politiques sont présentes sur votre système et d'où elles proviennent.
---|---
Format de fichier image GIF
Le format GIF est un format de fichier image très largement connu, car il existe depuis très très très longtemps (depuis la fin des années 1980). Il est souvent choisi pour des images destinées à être affichées sur des pages web impliquant de la transparence ou de l'animation. C'est aussi à peu près le seul format universellement compris par tous les navigateurs web. Malheureusement, ce n'est pas un très bon format pour autre chose que les dessins au trait, les figures, les diagrammes et les dessins animés. En effet, comme il est limité à un maximum de 256 couleurs, dont l'une est généralement désignée comme transparente. Désigner une couleur précise de l'image comme transparente présente quelques inconvénients. Si la couleur choisie comme transparente l'est mal, cela peut rendre transparentes d'autres parties de l'image alors que ce n'était pas voulu. Il faut veiller à ce que cela n'arrive pas. De plus, la capacité de transparence est « booléenne », ce qui signifie essentiellement qu'elle est soit entièrement activée, soit entièrement désactivée. Les couleurs semi-transparentes sont tout simplement impossibles et, si elles sont présentes, doivent être rendues soit transparentes, soit opaques. Cela signifie que le format ne peut fournir aucune forme d'anticrénelage des bords d'une image, ce qui aboutit généralement à un vilain cas d'« escaliers ». (Voir Anticrénelage) Comme les limitations de couleurs du format d'image « GIF » causent tant de problèmes, en particulier avec un logiciel de traitement d'image de haute qualité comme ImageMagick, je tiens à le dire d'emblée…
Évitez le format GIF autant que possible.
Si vous devez l'utiliser, ne le faites qu'à l'étape finale.
Enfin, pendant longtemps, l'algorithme de compression utilisé par le GIF a été breveté. Il n'était donc pas disponible pour de nombreux programmes de traitement d'image, tels qu'ImageMagick. Ainsi, les très anciennes versions d'IM produisaient des images GIF non compressées, occupant donc plus d'espace disque que nécessaire. Vous pouvez corriger cela à l'aide d'un programme de compression GIF par lots tel que « **[Gifsicle](http://www.lcdf.org/gifsicle/)** » ou « **[InterGIF](http://utter.chaos.org.uk/~pdh/software/intergif.htm)** ». Cependant, comme le brevet a complètement expiré à la mi-2004, la version actuelle d'IM a réactivé la compression d'image GIF. La compression d'image est par ailleurs assez simple et fonctionne le mieux sur les images comportant de grandes zones de couleurs unies et invariables. Ou sur de simples motifs répétés du même ensemble de couleurs, comme ceux qu'on obtient avec le tramage ordonné (qui n'est pas le tramage par défaut dans IM). Enfin, les images GIF peuvent enregistrer plusieurs images dans un seul fichier. C'est ce qui sert à générer des animations GIF telles que les comprennent à peu près tous les navigateurs web, depuis que la technique a été introduite pour la première fois par le très ancien navigateur « Netscape ». En résumé Le format de fichier image GIF, avec sa table de couleurs limitée, sa transparence booléenne et sa compression simpliste (si elle est activée), le rend idéal pour les petites images, telles que les vignettes, et surtout les icônes, logos et symboles « façon dessin animé » comportant de grandes zones de couleurs unies. Ses capacités d'animation en font aussi une méthode idéale pour générer les logos et publicités clinquants et accrocheurs que l'on voit partout sur le World Wide Web. Pour tout le reste, ses limitations en font un piètre format de fichier image, et vous auriez sans doute intérêt à passer au JPEG, au PNG ou à un format d'image vidéo selon vos besoins.
Table de couleurs limitée du GIF
À VENIR : exemples de réduction de couleurs -- référence au tramage de couleurs de base
S'assurer qu'une couleur précise est présente dans l'image GIF finale
Appliquer des tables de couleurs pour réduire les couleurs.
Voir [Quantification des couleurs](quantize.html#colors).
Voir Script avancé de puces 3D pour un exemple de génération de plusieurs images sur une plage de couleurs. Cette technique peut aussi servir à décliner « auto-magiquement » votre image en plusieurs images pour de nombreux fonds de couleurs et motifs différents.
Couleur de transparence du GIF
Par exemple, ici nous utilisons identify pour extraire la couleur transparente et la table de couleurs qu'un fichier image GIF donné a utilisée pour représenter la transparence. Le script perl extrait uniquement les champs précis qui nous intéressent (qui peuvent tenir sur plusieurs lignes). | |
magick identify -verbose hand_point.gif |\
perl -0777 -ne 's/^ //gm; \
print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
Comme vous pouvez le voir, une couleur grise transparente (« #CCCCCC00 ») a été utilisée pour cette image et cette couleur a sa propre entrée distincte dans la table de couleurs. Vous pouvez aussi constater que, bien que cette image n'utilise que 5 couleurs (dont une transparente), la table de couleurs employée en compte 8. C'est parce que le format de fichier GIF ne peut utiliser qu'une table de couleurs dont la taille est une puissance de 2. Autrement dit, la table de couleurs compte toujours 2, 4, 8, 16, 32, 64, 128 ou 256 entrées. Ainsi, les 3 dernières entrées de la table ne sont pas utilisées. En réalité, elles ne sont simplement pas référencées. Dans certains cas, ces entrées inutilisées peuvent ne pas être les trois dernières de la table et pourraient en fait contenir n'importe quelle valeur de couleur. Vous pouvez aussi avoir des valeurs de couleur en double, même si IM supprime généralement ces entrées de couleur en double lorsqu'il traite l'image d'une manière ou d'une autre. Depuis la version 6.2.9-2 d'IM (et dans certaines versions plus anciennes), IM préserve la table de couleurs, et plus précisément la valeur de la couleur transparente, chaque fois qu'il lit, traite et écrit une image GIF. | |
magick hand_point.gif -fill white -opaque wheat hand_white.gif
magick identify -verbose hand_white.gif |\
perl -0777 -ne 's/^ //gm; \
print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
Comme vous pouvez le voir, bien que l'image ait été modifiée (tous les pixels de couleur « wheat » ont été remplacés par une couleur « white »), la couleur transparente utilisée a été préservée. Toutefois, si l'image finale ne comporte aucune transparence, l'entrée de couleur de transparence (« Alpha: ») dans la table de couleurs est entièrement supprimée. | |
magick hand_point.gif -background white -flatten hand_flatten.gif
magick identify -verbose hand_flatten.gif |\
perl -0777 -ne 's/^ //gm; \
print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
Si vous souhaitez changer la couleur transparente utilisée par le format de fichier GIF, vous pouvez employer le réglage de sortie « [-transparent-color](https://imagemagick.org/command-line-options/#transparent-color) » (ajouté dans IM v6.2.9-2). Par exemple… | |
magick hand_point.gif -transparent-color wheat hand_wheat.gif
magick identify -verbose hand_wheat.gif |\
perl -0777 -ne 's/^ //gm; \
print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
Comme vous pouvez le voir, bien que le résultat ne soit pas visiblement différent de l'original, la couleur transparente a été changée en une version entièrement transparente de la couleur « wheat ». En regardant de près, vous constaterez aussi que l'image comporte désormais deux couleurs « wheat », ou « #F5DEB3 », dans sa table de couleurs. C'est-à-dire un wheat transparent et un wheat opaque. Depuis la version 6.2.9-2 d'IM, cela ne pose aucun problème. Bien qu'une seule couleur transparente puisse être définie par le format de fichier image GIF. Pourquoi feriez-vous cela ? Parce que certains très anciens navigateurs web et logiciels graphiques ne comprennent pas la transparence GIF. Cette option vous permet donc de définir la couleur que les zones transparentes devraient avoir dans ce cas. Les choix habituels pour la couleur transparente sont « white » pour les navigateurs modernes, OU plus couramment « grey75 » (« #BFBFBF »), qui était la couleur de fond de page d'origine du navigateur web « mosaic ». D'autres choix populaires de couleur transparente sont « grey » (« #BEBEBE ») et « silver » (« #C0C0C0 »), qui est ce que l'image de « main » ci-dessus a utilisé. Cela montre à quel point cette zone précise de la gamme des gris est populaire comme couleur transparente. À VENIR : ajouter un lien vers la sélection de couleur. |
Avant IM v6.2.9-2 et la création du réglage de sortie « [-transparent-color](https://imagemagick.org/command-line-options/#transparent-color) », IM enregistrait généralement la transparence d'une image sous la couleur spéciale « none » (noir entièrement transparent), ce qui n'est pas particulièrement joli lorsque la transparence échoue. |
|---|---|
Notez que définir « [-transparent-color](https://imagemagick.org/command-line-options/#transparent-color) » n'ajoute AUCUNE transparence à une image GIF et ne rend pas non plus transparente la couleur spécifiée. Tout ce que fait cette option, c'est spécifier quelle couleur placer dans la table de couleurs pour l'index de couleur qui sert à représenter les couleurs transparentes dans une image GIF. Si vous voulez rendre transparente une couleur précise (exacte), utilisez alors l'opérateur de remplacement de couleur « [-transparent](https://imagemagick.org/command-line-options/#transparent) ». |
Transparence booléenne du GIF
Comme le format GIF ne comprend PAS les couleurs semi-transparentes, et comme ImageMagick génère par défaut des couleurs semi-transparentes dans le cadre de ses méthodes d'anticrénelage normales, lorsque vous enregistrez une image dans ce format, elle a souvent un aspect horrible. Par exemple, ici je dessine un simple cercle noir sur un fond transparent. Je vais aussi générer une vue agrandie du bord des images, afin de rendre clair ce qui se passe. D'abord, je produis la sortie au format PNG… |
magick -size 60x60 xc:none -fill white -stroke black \
-draw 'circle 30,30 5,20' circle.png
magick circle.png -crop 10x10+40+3 +repage -scale 600% circle_mag.png
![[IM Output]](../static/img/formats/circle_mag.png)
Comme vous pouvez le voir, le bord du cercle de gauche, dessiné (au format PNG), présente un bord très net (bien que légèrement flou). On distingue les pixels semi-transparents dans son agrandissement. Produisons maintenant la même image au format d'image « GIF »… |
magick -size 60x60 xc:none -fill white -stroke black \
-draw 'circle 30,30 5,20' circle.gif
magick circle.gif -crop 10x10+40+3 +repage -scale 600% circle_mag.gif
![[IM Output]](../static/img/formats/circle_mag.gif)
Résultat : le cercle présente de très marqués effets d'escalier le long de son bord extérieur, tandis que l'intérieur reste correctement anticrénelé. En somme, alors que le format PNG peut enregistrer l'information des pixels semi-transparents, le GIF ne le peut pas. Le format d'image GIF ne peut enregistrer qu'une seule couleur purement transparente. En d'autres termes…
Le format GIF possède une transparence activée/désactivée, ou booléenne
Si vous regardez de plus près le GIF obtenu, vous constaterez que les pixels semi-transparents ont pu devenir soit entièrement transparents, soit entièrement opaques. | _Ce qu'ImageMagick fait réellement des pixels semi-transparents dépend de la version d'IM que vous utilisez. Cela est resté longtemps mal défini, et le comportement d'une version dépendait souvent de la dernière « correction de bogue » appliquée à la suite de signalements d'utilisateurs.
Depuis la v6.2.9-6, ImageMagick devrait par défaut appliquer un seuil de 50 % à l'image pour les formats d'image GIF et XPM. C'est devenu la norme admise par les gestionnaires d'images, tout en vous laissant définir vos propres méthodes pour traiter les problèmes de transparence du format de fichier GIF.
---|---
| _En raison des limitations du GIF, IM effectue l'ensemble d'opérations suivant avant d'enregistrer au format de fichier GIF…
_-channel A -threshold 50%
s'il y a des pixels (entièrement) transparents, il exécute ensuite…
-quantize transparent -colors 255
sinon, s'il n'y a aucun pixel transparent…
-colors 256_
_Le processus de quantification -colors ne fait automatiquement rien si l'image contient moins de couleurs que ce nombre. Il ne fait rien non plus si l'image possède une table de couleurs valide (telle qu'attribuée par « +/-map »).
Il n'essaie pas non plus d'utiliser une table de couleurs commune pour les fichiers GIF multi-images. Ainsi, si les couleurs diffèrent fortement d'une trame à l'autre, une table de couleurs locale peut être ajoutée à chaque image enregistrée dans le format de fichier GIF.
Par ailleurs, les réglages employés ci-dessus ne sont pas permanents, mais seulement temporaires pour l'image en cours d'enregistrement. Autrement dit, si vous utilisez « -write image.gif », les réglages appliqués pendant le processus n'affectent pas les opérations ultérieures._
---|---
Vous préférerez peut-être effectuer le seuillage vous-même, ce qui est recommandé si vous n'êtes pas certain de la version d'IM (surtout les versions plus anciennes) que vous utilisez. |
magick -size 60x60 xc:none -fill white -stroke black \
-draw 'circle 30,30 5,20' \
-channel A -threshold 50% circle_threshold.gif
magick circle_threshold.gif -crop 10x10+40+3 +repage \
-scale 600% circle_threshold_mag.gif
![[IM Output]](../static/img/formats/circle_threshold_mag.gif)
L'exemple ci-dessus applique le même « [-threshold](https://imagemagick.org/command-line-options/#threshold) 50% » sur le canal alpha que ce qu'IM fait désormais automatiquement, c'est-à-dire que si un pixel est transparent à plus de 50 %, il sera rendu entièrement transparent (avec la couleur donnée par le réglage « [-transparent-color](https://imagemagick.org/command-line-options/#transparent-color) » si celui-ci est défini). Vous avez toutefois désormais le contrôle du niveau de seuil à votre convenance. Le seuillage du canal alpha à 50 % fonctionne bien pour la plupart des types d'images. Surtout celles au bord simple, mais la technique se dégrade assez mal lorsqu'il faut gérer de grandes zones de pixels semi-transparents. C'est ce qu'examineront la plupart des exemples de gestion GIF qui suivent. Par exemple, supposons que nous voulions enregistrer une image avec une grande ombre floue semi-transparente comme cette image (au format PNG)… |
magick -size 70x60 xc:none -font Candice -pointsize 50 \
-fill black -annotate +10+45 'A' -channel RGBA -blur 0x5 \
-fill white -stroke black -draw "text 5,40 'A'" a.png
![[IM Output]](../static/img/formats/a.png)
Si vous convertissez simplement cette lettre directement au format GIF, ou même si vous utilisez une opération « [-threshold](https://imagemagick.org/command-line-options/#threshold) » pour contrôler la transparence booléenne, vous serez cruellement déçu. |
magick a.png a.gif
magick a.png -channel A -threshold 75% a_threshold.gif
![[IM Output]](../static/img/formats/a_threshold.gif)
La première image est un enregistrement normal au format GIF qui, comme vous pouvez le voir, a seuillé les pixels semi-transparents à « 50% » ; la seconde image a été seuillée à « 75% », permettant à davantage de pixels semi-transparents de devenir entièrement opaques (ou visibles). Si vous voulez simplement supprimer tous les pixels semi-transparents (par ex. l'ombre), vous pouvez essayer quelque chose comme « -threshold 15% » pour éliminer la quasi-totalité des pixels semi-transparents. |
magick a.png -channel A -threshold 15% a_no_shadow.gif
![[IM Output]](../static/img/formats/a_no_shadow.gif)
La plupart des autres solutions au problème de la transparence booléenne du GIF consistent à lier inextricablement l'image à la couleur de fond de la page web sur laquelle elle se trouve. Les méthodes pour y parvenir sont complexes et délicates, et c'est ce que nous allons examiner à présent. GIF sur un fond de couleur unie Ce que nous aimerions vraiment, c'est préserver d'une manière ou d'une autre l'ombrage des pixels semi-transparents et anticrénelés, tout en l'affichant proprement sur le WWW. Pour cela, il faut ruser un peu. La solution habituelle consiste à faire correspondre l'image au fond sur lequel vous allez l'afficher. C'est simple à faire : il suffit de superposer l'image sur un fond de la couleur appropriée avant de l'enregistrer au format GIF. Cela supprime le besoin de toute forme de transparence et la question ne se pose plus. Bien sûr, le nombre limité de couleurs reste un problème, mais souvent pas un gros problème. |
magick a.png -background LightSteelBlue -flatten a_overlay.gif
![[IM Output]](../static/img/formats/a_overlay.gif)
Vous voyez, presque parfait ! Bien sûr, pour que cette méthode fonctionne correctement, vous devez connaître exactement la couleur de fond sur laquelle l'image sera utilisée. De plus, une fois l'opération terminée, l'image ne servira plus à grand-chose sur un autre fond. Un gros sacrifice à consentir. GIF sur un fond à motif Mais que faire si vous utilisez un motif comme fond, au lieu d'une simple couleur unie ? Vous pourriez essayer de positionner la superposition sur une copie du motif de fond de sorte que le motif de l'image obtenue corresponde à celui de la page web. Cela demanderait toutefois beaucoup d'essais et d'erreurs pour faire coïncider le fond de l'image avec la page web. De plus, vous ne pourriez garantir son bon fonctionnement que pour un navigateur particulier, et seulement pour cette version précise du navigateur. Ce n'est pas une bonne idée pour une page web, alors n'essayez même pas. Moi je ne le ferai certainement pas. Au lieu d'essayer une correspondance parfaite avec le motif de fond, superposons simplement l'image sur une couleur qui correspond au moins au fond que nous comptons utiliser. Par exemple, superposons notre image sur un fond « typique » à motif de bulles. Mais il nous faut d'abord connaître la couleur moyenne de ce fond. Un moyen simple de trouver cette couleur consiste à réduire l'image à un seul pixel, puis à lire la couleur obtenue.
magick bg.gif -scale 1x1\! -depth 8 txt:-
[![\[IM Text\]](../static/img/formats/bg_color_avg.txt.gif)](../static/img/formats/bg_color_avg.txt)
Voir Format texte d'énumération des pixels d'IM pour plus d'informations sur le format de sortie spécial « txt: » utilisé. Définissons maintenant la transparence de fond de l'image à l'aide de « [-flatten](https://imagemagick.org/command-line-options/#flatten) ». |
magick a.png -background '#BABBD7' -flatten a_bg.gif
| | ![[IM Output]](../static/img/formats/a_bg.gif)
J'ai configuré la page web pour superposer notre image sur ce fond, même si ce fond ne fait PAS partie de l'image elle-même. Bien que la couleur de fond utilisée corresponde à la couleur générale du motif de fond, il subsiste néanmoins un rectangle de couleur unie très visible, dépourvu du motif de fond, tout autour. Une solution pratique consiste à déclarer la couleur que nous superposons comme couleur « [-transparent](https://imagemagick.org/command-line-options/#transparent) » dans la sortie GIF. Ce faisant, nous supprimons l'aspect « carré » de l'image. De plus, ajouter un petit facteur de flou (fuzz) améliore le résultat et ajuste la quantité d'espace occupée par la couleur transparente, de la même manière que le seuillage plus haut. |
magick a.png -background '#B9BBD6' -flatten \
-fuzz 5% -transparent '#B9BBD6' a_bg_trans.gif
| | ![[IM Output]](../static/img/formats/a_bg_trans.gif)
C'est généralement suffisant pour gérer la transparence dans la plupart des images GIF, même si cela lie l'image à une couleur de fond précise. En substance, nous utilisons la transparence pour donner à l'image un contour de forme sommaire, plutôt qu'une véritable transparence. En employant une couleur pour la superposition et la transparence GIF de sorte qu'elle corresponde au motif de fond, on ne distingue plus exactement où l'image s'arrête et où le motif de fond commence.
Soyez toutefois prudent avec le réglage « [-fuzz](https://imagemagick.org/command-line-options/#fuzz) » : s'il est trop élevé, vous pouvez vous retrouver avec bien plus que le seul extérieur de votre image devenu transparent ! |
magick a.png -background '#B9BBD6' -flatten \
-fuzz 25% -transparent '#B9BBD6' a_bg_overfuzz.gif
| | ![[IM Output]](../static/img/formats/a_bg_overfuzz.gif)
Cela échouera aussi si vous avez utilisé une couleur proche de la couleur de fond à l'intérieur même de l'image. C'est pourquoi cette technique n'est pas recommandée pour les images générales, mais uniquement dans des cas précis. Pour résoudre ce problème, nous utilisons un « [-alpha floodfill](draw.html#alpha) » pour définir les zones que nous voulons transparentes. |
magick a.png -background '#B9BBD6' -flatten \
-fuzz 25% -draw 'fill none alpha 0,0 floodfill' a_bg_none.gif
| | ![[IM Output]](../static/img/formats/a_bg_none.gif)
Désormais, tant que les bords de notre image ne « fuient » pas, nous pouvons utiliser à l'intérieur de l'image des couleurs semblables à notre fond sans qu'elles ne deviennent transparentes à cause d'un « excès de fuzz ». Bien sûr, si notre image comporte des « trous », il faudra aussi s'occuper de ces trous. Dans ce cas, la « transparence par fuzz » précédente peut mieux fonctionner. Je vous avais bien dit que gérer une couleur de transparence GIF est facile ! ABSOLUMENT PAS !
Une technique alternative, surtout pour les images au bord anticrénelé net, consiste simplement à ajouter un contour minimal de la couleur de fond. Voir Transparence par contour ou halo.
Supprimer la couleur de fond… Essayer de retirer une couleur de fond précise d'une image GIF existante n'est pas facile. C'est particulièrement difficile si l'image superposée contient elle aussi la couleur de fond, car vous ne savez alors plus vraiment ce qui est le fond et ce qui ne l'est pas. La meilleure solution consiste à obtenir une copie de la même superposition GIF sur deux couleurs de fond différentes et bien connues. Avec deux telles images, vous pouvez récupérer parfaitement la superposition d'origine et tous ses pixels semi-transparents. Voir Suppression de fond à l'aide de deux fonds. Si vous ne disposez pas de deux telles images, vous ne pourrez pas récupérer parfaitement la semi-transparence de l'image, mais il existe des techniques capables de faire un travail correct, quoique imparfait. Pour cela, voir les autres sections de Suppression de fond.
GIF pour des fonds non spécifiques (ou tramage de la transparence)
À VENIR : ceci sera déplacé vers une section plus générale (non spécifique au GIF)
sur le tramage alpha.
Le plus gros problème de ce qui précède est que cela ne fonctionnerait que si vous connaissiez par hasard exactement la couleur du fond, ou le motif de fond, sur lequel votre image sera utilisée. Si vous l'ignorez, tout n'est pas perdu. Comme vous l'avez vu plus haut, le seuillage ne fonctionne pas bien pour une image comportant une très grande zone de transparence, telle qu'une ombre floue. Mais une autre technique, connue sous le nom de tramage, y parvient et ne requiert PAS de connaître le fond sur lequel l'image sera utilisée. Fondamentalement, le tramage limite la transparence à des valeurs activée/désactivée, créant un effet de semi-transparence sur une zone plus large au moyen d'un motif de pixels. En d'autres termes, il simule la semi-transparence. Cette méthode a été illustrée dans ce qu'on appelle désormais les « exemples Opossum ». Malheureusement, ces exemples ne donnaient pas réellement les commandes qui ont servi à les générer. Par souci d'exhaustivité, je vais tenter de les présenter à nouveau ici. L'opérateur « [-monochrome](https://imagemagick.org/command-line-options/#monochrome) » convertit toutes les couleurs d'une image en un pur « tramage à correction d'erreur de Floyd-Steinberg » noir et blanc. Cependant, comme il convertit une image en niveaux de gris en couleurs purement noires et blanches, nous devrons extraire de l'image un masque de canal alpha, le tramer, puis le réintégrer dans l'image. |
magick a.png \( +clone -fx a -alpha off -monochrome \) \
-compose CopyOpacity -composite a_dither.gif
![[IM Output]](../static/img/formats/a_dither.gif)
De manière similaire, il existe deux ou trois autres opérateurs de tramage qui peuvent être restreints au seul canal alpha à l'aide du réglage « [-channel](https://imagemagick.org/command-line-options/#channel) » (contrairement à « [-monochrome](https://imagemagick.org/command-line-options/#monochrome) »).
magick a.png -channel A -ordered-dither o2x2 a_ordered_2x2.gif
magick a.png -channel A -ordered-dither o3x3 a_ordered_3x3.gif
magick a.png -channel A -ordered-dither o4x4 a_ordered_4x4.gif
magick a.png -channel A -ordered-dither checks a_halftone_2.gif
magick a.png -channel A -ordered-dither h4x4a a_halftone_4.gif
magick a.png -channel A -ordered-dither h6x6a a_halftone_6.gif
magick a.png -channel A -ordered-dither h8x8a a_halftone_8.gif
magick a.png -channel A -random-threshold 5x95% a_random_5x95.gif
magick a.png -channel A -random-threshold 5x70% a_random_5x60.gif
magick a.png -channel A -random-threshold 50x95% a_random_50x95.gif
magick a.png -channel A -random-threshold 45x55% a_random_45x55.gif
magick a.png -channel A -random-threshold 50x50% a_random_50x50.gif
Comme on peut le voir, «[-ordered-dither](https://imagemagick.org/command-line-options/#ordered-dither)» produit un motif de couleurs transparentes et opaques pour représenter la transparence globale. Cela génère toutefois un motif régulier très visible. Cependant, en utilisant une couleur d'ombre proche de l'arrière-plan normal mais plus sombre que celui-ci, on peut rendre ce motif presque totalement invisible. Le motif «checks» (première image de la deuxième ligne) est particulièrement intéressant, car c'est un motif à 3 niveaux très simple, très propre et soigné. | _«[-ordered-dither](https://imagemagick.org/command-line-options/#ordered-dither)» a été étendu dans IM v6.2.8-6 avec des motifs de tramage « demi-teinte » (half-tone). L'opérateur a ensuite été entièrement révisé pour IM v6.3.0 avec des motifs de tramage nommés (utilisez «[-list](https://imagemagick.org/command-line-options/#list) threshold» pour voir la liste complète). Vous pouvez même générer votre propre motif de tramage pour créer d'autres effets spéciaux. Voir les Exemples de tramage ordonné et les notes de mise à jour du tramage ordonné pour plus de détails.
Avant cette refonte, les arguments ne pouvaient être que les chaînes de géométrie «2x2», «3x3» et «4x4» (qui fonctionnent toujours). Toutefois, toute autre valeur était alors traitée comme un argument «[-random-threshold](https://imagemagick.org/command-line-options/#random-threshold)», généralement avec des résultats désastreux. La prudence est de mise lors de l'utilisation de cette option sur de très anciennes versions d'IM.
---|---
«[-random-threshold](https://imagemagick.org/command-line-options/#random-threshold)», en revanche, produit un tramage aléatoire hautement variable, différent à chaque exécution. La nature purement aléatoire de cet algorithme de tramage tend cependant à produire de gros « amas » de pixels, plutôt que le tramage plus lisse et algorithmiquement positionné généré par l'opérateur « Floyd-Steinberg » «[-monochrome](https://imagemagick.org/command-line-options/#monochrome)». Le grand avantage de «[-random-threshold](https://imagemagick.org/command-line-options/#random-threshold)» réside toutefois dans les contrôles de limites qu'il offre. En rendant les paramètres très restrictifs (par exemple «50x50%»), vous transformez [-random-threshold](https://imagemagick.org/command-line-options/#random-threshold)» en un simple opérateur «[-threshold](https://imagemagick.org/command-line-options/#threshold)». En étant seulement un peu moins restrictif, vous pouvez rendre aléatoire uniquement le bord même de la limite de seuil (par exemple avec «45x55%»). | _L'argument de «[-random-threshold](https://imagemagick.org/command-line-options/#random-threshold)» est «PxQ», où P est le seuil minimal et Q le seuil maximal (le symbole «%» est obligatoire). Ainsi, «5x95%» signifie que tout ce qui est inférieur à 5% de MaxRGB est mis à 0, tout ce qui est supérieur à 95% est mis à MaxRGB, sinon on choisit une valeur aléatoire entre 5% et 95% de MaxRGB comme niveau de seuil à utiliser pour ce pixel. Une valeur d'argument de «5x95%» est probablement la meilleure valeur à utiliser dans la plupart des situations.
---|---
Vous pouvez améliorer l'aspect final en utilisant une couleur de demi-teinte plus sombre (comme un gris foncé) plutôt que le noir pour la couleur d'ombre. Ainsi, la couleur aura tendance à mieux se fondre dans l'arrière-plan, rendant le tramage moins prononcé que ce qui est montré ci-dessus. Si vous connaissez approximativement la couleur de l'arrière-plan, vous pouvez même utiliser une teinte plus sombre de cette couleur pour que l'ombre s'y intègre mieux, sans vous limiter à la nuance exacte de l'arrière-plan. En quelque sorte, mêlez un peu les deux méthodes pour améliorer le résultat global. Fondamentalement, plus vous vous investissez dans ce que vous voulez faire, meilleur sera le résultat.
FUTURE: dither example with a dither color matching the light blue background
of this web page.
| Traitement GIF hors ImageMagick giftrans | Liste tous les attributs et la table des couleurs d'une image GIF. Il peut aussi définir un index de couleur précis comme couleur transparente sans modifier l'ordre de la table des couleurs de l'image, ni fusionner les index contenant la même couleur (situation non recommandée). J'ai constaté que la commande IM «magick identify» fait un meilleur travail pour lister les attributs d'image, y compris la « limite de répétition de boucle » dans la « Mosaic Application Extension » utilisée dans les animations. Voir aussi le script «gif2anim» (ci-dessous), qui utilisait auparavant ce programme pour extraire les métadonnées de l'image GIF nécessaires à sa recréation à partir des « images » individuelles extraites. Il n'utilise désormais que «magick identify» pour extraire ces métadonnées. |
|---|---|
| GIFsicle | Il s'agit d'un programme d'optimisation d'image polyvalent, dont le but initial était de réintégrer la compression aux images GIF à une époque où cet algorithme était encore protégé par le droit d'auteur. Le programme peut aussi servir à ajouter des commentaires, à créer des animations GIF et à optimiser ces animations de la même façon que l'opérateur IM «[-deconstruct](https://imagemagick.org/command-line-options/#deconstruct)», mais avec des optimisations de transparence supplémentaires comme l'optimisation de la compression LZW. |
| InterGIF | Un programme similaire à GIFsicle, conçu pour le traitement des GIF animés. Il ne fournit toutefois que l'optimisation de la compression par transparence. D'autres fonctionnalités peuvent néanmoins s'avérer utiles. Envoyez-moi vos avis. |
| gif2anim | Un script shell qui prend un fichier d'animation GIF et extrait toutes les images de chaque trame, ainsi qu'un fichier «.anim» contenant tous les paramètres IM «magick nécessaires pour reconstruire l'animation à partir des trames extraites. |
| anim2gif | L'inverse du script ci-dessus : il prend un fichier «.anim» contenant tous les paramètres IM «magick et reconstruit une image d'animation GIF. Ce script est très utile pour étudier, éditer, ajuster et fusionner des fichiers d'animation GIF. Pour une utilisation de base, voir Informations sur la liste d'animation. Voir aussi Assemblage d'animations (synchronisées dans le temps) pour un exemple pratique de son utilisation. |
Gestion du décalage des images GIF
Bien que le format GIF enregistre les images avec des décalages dans le cadre de sa gestion des animations, il n'enregistre pas de décalage négatif. Toute tentative d'enregistrement d'un décalage négatif dans une image GIF entraînera la remise à zéro du décalage. Cela peut être une véritable gêne lors de la conception d'animations GIF. Si le navigateur Internet Explorer reçoit une image GIF dont le « décalage de page » place l'image quelque part en dehors de la « taille du canevas de la page », il ignorera la taille de page et le décalage et l'affichera comme si elle n'avait aucun décalage. L'ancien navigateur Mozilla, en revanche, affichera simplement le canevas de l'image et lui appliquera les décalages. Cela peut aboutir à l'affichage d'un canevas vide sans aucune donnée d'image, ce qui, bien que correct, peut surprendre. Tous deux afficheront l'image avec la taille du canevas de page et le décalage de page approprié si l'image est entièrement contenue sur ce canevas.
Formats de sortie GIF apparentés
GIF87 : Produit l'image dans l'ancien format GIF 87a.
Si le navigateur « Mozilla » rencontre cet ancien format, il ignorera totalement la géométrie de page de l'image et n'utilisera ni cadre de « page » plus grand ni décalages d'image. IM version 6.0.4 et antérieures produisaient normalement un format GIF89a. Mais si l'image était une animation GIF découpée en images distinctes avec +adjoin, IM utilisait le format GIF87a, ce qui donnait des résultats incohérents à l'affichage dans les navigateurs web. IM postérieur à la v6.0.4 produira toujours un fichier au format GIF 89a, sauf si l'utilisateur demande explicitement l'ancien format de sortie «`GIF87:`».
Format de fichier image JPEG
Ce format est à peu près aussi répandu que le format GIF ci-dessus. Mais là où le GIF est conçu pour de petites images simples de type « dessin animé », le JPEG est conçu pour de grandes images de la vie réelle comportant de nombreuses couleurs et nuances de couleurs, comme les photographies. Une caractéristique clé du format JPEG est sa compression, qui réduit la taille de l'image tout en la gardant acceptable pour l'œil humain. Il s'agit d'un processus très complexe qui dépasse le cadre de cette présentation. Pour en savoir plus sur ce processus et ses effets, voir Introduction à la compression Jpeg. Et pour une explication très détaillée, voir la vidéo YouTube JPEG DCT, Discrete Cosine Transform (JPEG Pt2)- Computerphile. Malheureusement, pour bien compresser les images, l'algorithme perd intentionnellement de l'information. Ce qui est enregistré n'est PAS la même image que celle en mémoire ; la couleur d'un pixel donné ou d'une zone d'une image ne sera en général PAS exactement la couleur qui a été enregistrée. Cela est particulièrement vrai près des contours des objets présents dans l'image. Alors, en guise d'avertissement rapide...
IM est un processeur d'images matricielles généraliste, destiné à modifier des images.
Il ne réalise pas de modifications JPEG sans perte.
Si vous vous intéressez au traitement sans perte, voir Traitement JPEG hors IM.
Ce comportement avec perte devient encore plus visible si une image JPEG est modifiée de telle sorte que l'ampleur du changement sur le bord supérieur ou gauche n'est pas un multiple de 8. Dans ce cas, les « blocs » ou « cellules » de compression JPEG seront complètement différents, ce qui peut produire une forte augmentation de la taille finale du fichier enregistré. C'est-à-dire les opérations comme chop, trim, shave, border, frame, extent, etc. (voir Opérations de découpe et de bordure) qui peuvent décaler les données de l'image d'un décalage de pixels non multiple de 8. Voir la discussion du forum IM Cropping an image result in an unexpected increased file pour plus de détails.
Normalement, cette nature avec perte des données JPEG n'est pas très perceptible. Elle peut cependant le devenir lorsque vous chargez et enregistrez une image JPEG plusieurs fois, ou lorsque vous utilisez une très basse qualité avec un diagramme présentant des changements de couleur nets. Toutefois, tant que vous ne chargez ni ne réutilisez les images JPEG à répétition (conservez et appliquez les opérations à partir de la source originale), cela reste un bon format de fichier, même pour les types d'images qu'il ne gère pas particulièrement bien. Comme exemple de cette nature avec perte du JPEG, je génère ici une image simple de deux dégradés assemblés. Alors que les dégradés offrent un changement de couleur progressif que le JPEG gère très bien, le changement de couleur net entre les deux dégradés n'est pas bien géré.
magick -size 5x10 gradient: gradient:blue-navy +append jpg_lossy.gif
magick jpg_lossy.gif jpg_lossy.jpg
La première image est une vue agrandie de la version au format GIF non déformée de l'image (cliquez sur l'image pour voir ou télécharger la vue non agrandie). Elle ne contient que 20 couleurs, donc dans ce cas le format GIF peut gérer l'image parfaitement et génère en fait une très petite taille de fichier (voir le tableau ci-dessous). En revanche, la version JPEG de l'image présente des distorsions de couleur nettes que la compression JPEG a ajoutées à l'image enregistrée pour mieux la compresser. Les distorsions sont les plus marquées dans le canal de couleur bleu, ce qui n'est pas surprenant, car le bleu est mal résolu par l'œil humain. Autrement dit, l'œil humain tend à « étaler » naturellement les couleurs bleues, et l'algorithme JPEG tire parti de cela (en utilisant en interne un espace colorimétrique YCbCr). En fait, sans l'agrandissement utilisé ci-dessus, vous auriez du mal à percevoir l'effet. Examinons maintenant l'effet de la qualité sur l'image.
magick jpg_lossy.gif -quality 100% jpg_lossy_100.jpg
magick jpg_lossy.gif -quality 80% jpg_lossy_80.jpg
magick jpg_lossy.gif -quality 50% jpg_lossy_50.jpg
magick jpg_lossy.gif -quality 20% jpg_lossy_20.jpg
magick jpg_lossy.gif -quality 5% jpg_lossy_5.jpg
Si vous regardez de près le premier résultat ci-dessus, où nous avons enregistré l'image de test à «100%» ou qualité maximale, il subsiste encore une légère distorsion de couleur. Elle est très difficile à voir, mais elle est présente. En revanche, l'utilisation d'un réglage «[-quality](https://imagemagick.org/command-line-options/#quality)» progressivement plus bas pour l'image JPEG rend cette distorsion de couleur encore plus importante et plus visible. Non seulement cela, mais elle crée une sorte d'« ombrage » des contours, produisant des « vagues » de changements de couleur qui se propagent depuis les contours nets. Un effet communément appelé artefacts de sonnerie (ringing). Cependant, la raison d'utiliser la compression est que la taille de l'image résultante est très nettement plus petite, du moins au départ. Voici une liste des fichiers des résultats et leur taille en octets.
Remarquez que l'image GIF est ici très petite, car de grands « blocs » de couleur se compressent extrêmement bien en GIF. À mesure que la qualité JPEG diminue, la taille de l'image diminue aussi. Le réglage de qualité par défaut, lorsque aucune qualité JPEG n'est définie, ni par l'utilisateur ni par le fichier du format source, est d'environ 92%, ce qui est une très haute qualité. Toutefois, en utilisant un réglage de qualité inférieur à «50%», les tailles d'image ne diminuent plus beaucoup en termes d'économie de taille de fichier ; on obtient seulement une image de plus en plus dégradée. C'est un processus à rendements décroissants. En résumé...
Le JPEG perd de l'information, dégradant les images lors de l'enregistrement.
Utilisez un autre format pour les images intermédiaires pendant le traitement.
N'utilisez le format JPEG que pour l'image finale, pas pour un traitement ultérieur.
Le JPEG n'est pas non plus adapté aux images artificielles présentant des changements de couleur nets, comme les dessins au trait, les diagrammes ou les icônes de type dessin animé, le texte et les symboles. De telles images comportant peu de couleurs sont mieux enregistrées avec un format d'image à palette, comme le GIF ou le PNG8. Un nouveau format d'image JPEG, le Jpeg2000, devient disponible et permet, lui, une compression JPEG sans perte. Cependant, cela nécessite l'installation de la bibliothèque « JasPer ». Pour utiliser ce format spécial, vous devez aussi utiliser une option «-compress jpeg2000» ou enregistrer dans un fichier au format JP2, afin qu'IM appelle la bonne bibliothèque.
Transparence JPEG - INEXISTANTE
Outre la compression, l'autre grand problème auquel les utilisateurs de JPEG sont confrontés est que
Le JPEG n'enregistre pas la transparence
Ainsi, si vous pouvez superposer des images sur une couleur ou un motif d'arrière-plan et les enregistrer en JPEG, vous ne pouvez pas donner à une image JPEG une bordure de forme libre ou des trous transparents. Comme le JPEG a été conçu pour enregistrer des images du monde réel, et non des parties d'images, la transparence n'était pas un enjeu au moment de la création du format. Par conséquent, les concepteurs ne se sont jamais souciés d'inclure un canal alpha ou d'autres informations de transparence dans le format de fichier. Par exemple, prenons le PNG avec transparence utilisé plus haut et convertissons-le directement en JPEG.
magick a.png a.jpg
Comme on peut le voir, toutes les parties transparentes sont simplement devenues noires. Mais selon la source de l'image (en particulier les images GIF), les zones transparentes auraient tout aussi bien pu prendre une autre couleur aléatoire ou inappropriée. Si cela risque de poser problème, la meilleure idée est de faire supprimer la transparence alpha par IM avant d'enregistrer l'image au format de fichier JPEG.
Distorsion de couleur JPEG (tests)
Comme mentionné plus haut, l'algorithme de compression utilisé par le JPEG est avec perte. L'image sera modifiée pour mieux se compresser, réduisant l'espace de fichier, avec un peu de chance. L'ampleur exacte de la distorsion de couleur dépend des réglages de qualité utilisés. Par exemple, regardons combien de couleurs contient l'image intégrée «netscape:» d'IM... | |
magick identify -format "Colors: %k" netscape:
| ![[IM Text]](../static/img/formats/jpg_colors_none.txt.gif)
Comme on peut le voir, cette image comporte par défaut 216 couleurs dans un grand tableau rectangulaire. Ce type d'image n'est PAS très bon à enregistrer au format JPEG, ce qui la rend idéale pour notre propos. Voyons donc le nombre de couleurs qu'un enregistrement JPEG de cette image produit... | |
magick netscape: JPG:- |\
magick identify -format "Colors: %k\nFile Size: %b" -
| ![[IM Text]](../static/img/formats/jpg_colors_def.txt.gif)
C'est-à-dire que, par défaut, le fichier JPEG enregistré comporte presque 9 fois plus de couleurs ! Bien que le résultat ressemble encore à l'image originale, les bords de la zone rectangulaire auront reçu des couleurs ajoutées à proximité. Enregistrer au réglage de qualité le plus élevé n'enregistrera pas l'image sans aucune distorsion de couleur... | |
magick netscape: -quality 100 JPG:- |\
magick identify -format "Colors: %k\nFile Size: %b" -
| ![[IM Text]](../static/img/formats/jpg_colors_100.txt.gif)
Comme on peut le voir, un réglage de très haute qualité n'ajoutera que quelques couleurs supplémentaires, mais l'image présentera toujours une légère (minime) distorsion de couleur. On voit aussi que la taille du fichier est plus grande, car très peu de compression peut être obtenue. Essayons maintenant le mode «Lossless» (sans perte)... | |
magick netscape: -quality 100 -compress Lossless JPG:- |\
magick identify -format "Colors: %k\nFile Size: %b" -
| ![[IM Text]](../static/img/formats/jpg_colors_lless.txt.gif)
Toujours une distorsion de couleur ! De toute évidence, ma bibliothèque JPEG n'est PAS patchée pour l'encodage sans perte. Rappelez-vous cependant que seule une autre bibliothèque patchée peut lire une telle image JPG sans perte. À la place, je recommande de compiler votre IM pour utiliser la bibliothèque JasPer et le plus récent format de fichier image JP2. | |
magick netscape: JP2:- |\
magick identify -format "Colors: %k\nFile Size: %b" -
| ![[IM Text]](../static/img/formats/jp2_colors_lless.txt.gif)
Comme on peut le voir, le format Jpeg2000 est passé à d'autres méthodes de compression sans perte et ne déforme pas les couleurs de l'image par défaut. Il applique aussi à l'image des méthodes de compression très poussées. Cependant, l'utilisation d'une qualité inférieure avec le nouveau format JP2 réintroduira les distorsions de couleur afin de générer une image plus petite, tout comme le format de fichier image JPEG normal... | |
magick netscape: -quality 50% JP2:- |\
magick identify -format "Colors: %k\nFile Size: %b" -
| ![[IM Text]](../static/img/formats/jp2_colors_50.txt.gif)
Pour en savoir plus sur l'utilisation du codeur JPEG2000, voir la documentation des paramètres d'encodage JPEG2000.
Options de contrôle de la lecture JPEG
-define jpeg:size={largeur}x{hauteur} Ce réglage est une indication donnée à la bibliothèque d'images JPEG pour ne lire qu'une partie suffisante du fichier image (JPEG) en entrée afin de créer une image d'au moins la taille indiquée (largeur × hauteur) ou plus grande. Si l'image d'entrée est énorme, cela peut réduire considérablement la quantité de mémoire dont IM a besoin pour la lecture, puisqu'IM manipulera alors une image plus petite. Cela peut, à son tour, augmenter fortement la vitesse de l'opération complète. Rappelez-vous qu'il ne s'agit que d'une indication de la taille souhaitée : vous n'avez pas la garantie d'obtenir cette taille, seulement quelque chose de proche mais de plus grand. En général, vous obtiendrez quelque chose entre cette taille et le double, tout en préservant le rapport d'aspect de l'image. Habituellement, après la lecture d'une image JPEG avec une indication de taille, l'image est immédiatement redimensionnée à sa taille finale « exacte ». On utilise généralement «
[-thumbnail](https://imagemagick.org/command-line-options/#thumbnail)» pour supprimer aussi tout profil d'image. Par exemple...magick -define jpeg:size=64x64 jpeg_large.jpg jpeg_size_hint.jpg magick -define jpeg:size=128x128 jpeg_large.jpg \ -thumbnail 64x64 jpeg_thumbnail.jpg
| _Avant IM v6.5.6-0, ce réglage du codeur était extrait du réglage «
[-size](https://imagemagick.org/command-line-options/#size)». Cela posait problème lorsque les utilisateurs utilisaient «[-size](https://imagemagick.org/command-line-options/#size)» pour la création d'image, mais que la lecture JPEG produisait alors des résultats inattendus. C'est pourquoi cela a été remplacé par un réglage de codeur spécial.Sur les versions plus anciennes, vous devrez peut-être réinitialiser le réglage «
[-size](https://imagemagick.org/command-line-options/#size)» avec «[+size](https://imagemagick.org/command-line-options/#size)avant de lire des images JPEG, sinon IM risque de ne pas lire une image JPEG en entier.
---|---
Notez que ce modificateur amène la bibliothèque JPEG à sauter la lecture de colonnes et de lignes entières de pixels. Il produira donc des effets très semblables à l'opérateur de redimensionnement par échantillonnage, y compris ses forts artefacts de crénelage. C'est pourquoi il est recommandé de spécifier au moins le double du « redimensionnement » final de l'image afin d'éviter ce problème, comme illustré dans l'exemple ci-dessus. | _Notez que l'opérateur de redimensionnement Thumbnail utilise aussi la même technique d'échantillonnage pour les opérations de redimensionnement à très grande échelle, afin de réduire rapidement la taille de l'image avant d'appliquer une opération de redimensionnement normale, mais à 5 fois plutôt qu'au double de la taille finale de l'image. La différence de taille est affaire de qualité finale de l'image.
---|---
+profile '*' -strip Les images JPEG telles qu'enregistrées par les appareils photo numériques, les logiciels de numérisation et d'autres logiciels de traitement d'image comme « photoshop » ajoutent souvent de gros profils de «commentaires de programme » aux images JPEG. L'une ou l'autre de ces options supprimera ces profils d'une image, après la lecture de cette image. L'opérateur «[+profile](https://imagemagick.org/command-line-options/#profile)» supprimera tous les profils de couleur d'une image, tandis que «[-strip](https://imagemagick.org/command-line-options/#strip)» supprimera tous les profils et métadonnées que l'image peut contenir. Notez aussi que «[-thumbnail](https://imagemagick.org/command-line-options/#thumbnail)» est une option «[-resize](https://imagemagick.org/command-line-options/#resize)» qui applique en même temps un «[-strip](https://imagemagick.org/command-line-options/#strip)». Voir aussi Création de vignettes. -type TrueColorMatte Comme le JPEG n'enregistre aucune forme de transparence, à sa lecture il sera toujours entièrement opaque et n'aura pas de canal « alpha » en mémoire. Ce réglage forcera toute image JPEG lue après l'option à recevoir un canal « alpha » entièrement opaque ajouté à l'image en mémoire. La meilleure façon de procéder consiste toutefois à utiliser un «[-alpha set](https://imagemagick.org/command-line-options/#alpha)» ou «[-alpha](https://imagemagick.org/command-line-options/#alpha) set» après la lecture de l'image, car cela aura moins d'impact sur la lecture et l'écriture d'autres formats d'image. Voir Type d'image en lecture et en écriture et Alpha Set pour plus d'informations.
Options de contrôle de l'écriture JPEG
Par défaut, les valeurs «[-quality](https://imagemagick.org/command-line-options/#quality)» et «[-sampling-factor](https://imagemagick.org/command-line-options/#sampling-factor)» détectées lors de la lecture de l'image JPEG sont utilisées lors de la réécriture vers une image JPEG. Cela peut toutefois ne pas produire la même taille de fichier sur le disque, et vous aurez toujours une perte supplémentaire de qualité d'image due à la lecture puis au réenregistrement d'une image JPEG. Les tables de quantification JPEG ne sont toutefois pas préservées.
-quality {pourcentage} Probablement l'option la plus importante lors de l'enregistrement d'images JPEG, car elle contrôle le degré de compression de l'image lors de son enregistrement sur disque. La valeur n'est pas un pourcentage de taille, juste une valeur de qualité. Plus la valeur est basse, plus l'image est petite et plus d'informations d'image sont perdues, produisant davantage d'artefacts et dégradant l'image.
FUTURE: VERY low quality example of a photoREMARQUE : un réglage de qualité de «
100%» ne garantit pas d'enregistrer une image sans aucune perte de qualité, seulement une perte minimale. (Voir l'option suivante) REMARQUE : Vous ne pouvez pas déterminer une qualité pour obtenir une taille de fichier précise, sauf par tâtonnement. Commencez avec un «[-quality](https://imagemagick.org/command-line-options/#quality)» de 75% et vérifiez la taille de fichier obtenue. Si elle est trop grande, réduisez la qualité de 10% ; si elle est trop petite, augmentez-la. Une fois que vous avez une borne inférieure et supérieure de qualité, faites une recherche dichotomique pour trouver une qualité qui correspond au mieux à la taille de fichier souhaitée. Un total de cinq ou six essais devrait suffire. -define jpeg:extent={taille} Depuis IM v6.5.8-2, vous pouvez spécifier une taille de fichier de sortie maximale pour l'image JPEG. La taille est indiquée avec un suffixe. Par exemple «400kb». Cela fonctionne en générant de nombreuses versions de l'image JPEG, par recherche dichotomique du réglage de qualité de sortie «[-quality](https://imagemagick.org/command-line-options/#quality)», jusqu'à s'approcher le plus possible de la taille de fichier indiquée sans la dépasser. Pour cela, l'image est écrite à répétition dans un fichier temporaire, et une fois la taille de qualité appropriée obtenue, l'image finale est écrite une seule fois vers le nom de fichier de sortie indiqué. La sortie fonctionnera donc toujours correctement lors de l'envoi de l'image finale vers un pipeline, directement vers le réseau, et pas seulement vers un vrai fichier. Ne vous attendez cependant pas à ce que ce processus soit très rapide, en raison des besoins d'E/S. Peut-être 4 à 8 fois plus lent. Envoyez-moi vos résultats si vous effectuez réellement une comparaison chronométrée. -compress LossLess Bien qu'un réglage «[-quality](https://imagemagick.org/command-line-options/#quality)» de «100%» puisse encore produire des couleurs légèrement différentes (c'est toujours « avec perte »), l'option «-compress LossLess» demandera à la bibliothèque JPEG d'enregistrer l'image sans aucune perte de données. Ainsi, la relecture de l'image la restaurera exactement telle qu'elle a été enregistrée. AVERTISSEMENT : Cela ne fonctionnera que si votre bibliothèque JPEG a été patchée pour l'encodage « LossLess JPEG », mais l'usage du format de fichier JP2 l'a remplacé, si bien que cette option n'a désormais que rarement un effet réel. De plus, vous DEVEZ aussi régler «-quality 100%» pour que cela fonctionne. Bien que vous puissiez intuitivement penser qu'enregistrer en «LossLess» impliquera automatiquement une qualité de 100%, ce n'est pas le cas. C'est le résultat de l'ajout d'un patch inhabituel à l'écriture d'images JPEG, qui est par définition un format avec perte. Bien sûr, le fichier généré sera probablement beaucoup plus grand qu'une image JPEG normale. De plus, vous vous retrouverez avec un JPEG compressé sans perte que vous ne pourrez lire nulle part, sauf avec une bibliothèque JPEG « patchée » de façon similaire. Le « JPEG sans perte » n'est donc PAS recommandé, et il vaut mieux utiliser un autre format (comme PNG ou JP2). -interlace Line Utilise un style « JPEG progressif » qui vous permet de voir de grandes images jpeg pendant qu'elles se chargent encore. Voir aussi la solution hors IM pour réencoder un JPEG existant sans perte supplémentaire, ci-dessous. -sampling-factor {horizontal}x{vertical} Ajuste le facteur d'échantillonnage utilisé par la bibliothèque JPEG pour le sous-échantillonnage de la chrominance. On peut le régler à «2x1» pour créer des fichiers d'animation MPEG-2. « 2x2, 1x1, 1x1 » est la méthode de sous-échantillonnage standard d'IM et correspond au 4:2:0, voir Wikipedia, Chroma Sub-Sampling. Cependant, quand la « qualité » est de 90 ou plus, les canaux ne sont pas sous-échantillonnés. Fondamentalement, cela définit si la taille du « bloc » ou de la « cellule » de traitement est de 8 pixels ou de 16 pixels. -density {Xdpi}x{Ydpi} Bien que la densité n'ait aucun effet sur la taille en pixels de l'image résultante en sortie. Le réglage ci-dessus est toutefois stocké dans l'en-tête JFIF du format de fichier image JPEG. Malheureusement, certains programmes comme Photoshop ignoreront ce réglage si une densité est aussi présente dans un profil spécifique à Photoshop («8BIM») stocké dans l'image. La densité n'est vraiment importante que lorsqu'un périphérique de sortie est utilisé, comme des imprimantes ou des moniteurs, permettant à ces appareils d'afficher l'image à l'échelle de tailles réelles. Par exemple, pour garantir que la photo ou la page que vous avez numérisée soit imprimée à la bonne taille. Pour en savoir plus sur la densité, voir Métadonnées de densité d'image et Redimensionnement par rééchantillonnage. -type TrueColor IM utilisera automatiquement un format interne en niveaux de gris pour les images qui ne contiennent que des valeurs de gris. Ce réglage remplacera ce comportement et forcera IM à toujours produire une image JPEG en couleur plutôt qu'en niveaux de gris. Voir Type d'image en lecture et en écriture pour plus d'informations. -define jpeg:optimize-coding=false Désactive le calcul des tables de codage de Huffman optimales pour cette image. C'est activé par défaut. Cela nécessite une passe supplémentaire sur l'image pour effectuer les calculs requis, mais elle est minime. -define jpeg:q-table={chemin} Définit un fichier contenant des tables de quantification JPEG personnalisées, en XML. Un exemple de table est généralement installé dans «/etc/ImageMagick/quantization-table.xml», mais il est intégré à ImageMagick et donc normalement inutilisé. Un certain nombre de discussions sur la génération de tables se trouvent dans le Digital Image Processing Forum, avec des discussions précises (au moment de la rédaction) sur JPEG Quantization Tables, Better JPEG quantization tables?, Stupid PET Trick qtable of one, JPEG luma quantization table. Cette option a été ajoutée dans IM v6.5.7-8.
Qualité JPEG et taille de fichier
La taille finale d'un fichier JPEG pour une qualité donnée est indéterminée. Tout le processus de compression est si complexe que de petits changements produisent des variations extrêmement différentes de la compression. C'est un « effet papillon ». Même avec la même image source à la même qualité, mais avec des versions différentes d'IM, de la bibliothèque JPEG ou d'autres programmes de traitement d'image, vous obtiendrez de très grandes différences de taille de fichier et de qualité observée. Vous pouvez tout aussi bien considérer le réglage de qualité comme une simple « estimation » du degré de compression ou de qualité visuelle à appliquer à une image donnée. En substance, il est pratiquement impossible de prédéterminer la taille finale du fichier pour une image et un réglage de qualité donnés... Sauf en le faisant réellement. IM peut cependant effectuer des « essais » pour découvrir la meilleure qualité à utiliser pour une taille de fichier précise, à l'aide du define spécial «jpeg:extent». Voir Contrôles d'écriture JPEG ci-dessus. C'est extrêmement lent, mais plus rapide qu'une solution maison équivalente. Cette approche n'est pas recommandée, et pas seulement parce qu'elle est lente. Avec votre méthode à taille de fichier fixe, une image simple pourrait ressortir à une qualité de 90% mais contenir 50 ko de données inutiles, tandis qu'une image compliquée devrait descendre à une qualité de 30% et présenter des artefacts JPEG (ou pour le dire moins techniquement, elle serait moche) faute de données suffisantes pour le détail présent. La meilleure idée est de trouver un unique réglage de qualité qui produit une taille de fichier moyenne de 100 Ko pour une sélection raisonnable de vos images. Même ainsi, les images peu détaillées peuvent ne ressortir qu'à 50 ko. Tandis que les images très finement détaillées peuvent ressortir à 150 ko, les deux auront un aspect acceptable. Pour un guide pratique sur la compression et la qualité JPEG, voir Optimization of JPEG compression settings. Voir aussi JPEG Compression, Quality and File Size pour un aperçu des détails internes du JPEG. Astuce Photoshop : Photoshop ajoute environ 4 kilo-octets d'informations supplémentaires aux images JPEG pour conserver des aperçus et des informations de gestion des couleurs (profil «8BIM»). Si vous ne voulez pas de ces informations, utilisez la fonction « Enregistrer pour le Web ». Cette astuce provient d'un article sur la compression JPEG de Gernot Hoffmann.
Formats de sortie JPEG apparentés
- PJEG : Écrit une image JPEG à chargement progressif.
- Ce n'est plus souvent utilisé à l'ère des téléchargements réseau rapides, mais c'était très courant à l'époque des modems à accès commuté. Fondamentalement, on écrit d'abord toutes les N lignes, puis une ligne entre elles, et ainsi de suite, de sorte que vous pouvez voir une image même après n'avoir téléchargé qu'un faible pourcentage de l'image complète.
- JPEG2000 : Le dernier format JPEG avec de nouveaux ajouts.
- Ce format nécessite l'installation de la bibliothèque « JasPer jp2 », sinon vous obtenez une erreur..
«no encode delegate for this image format»
Ce format utilise la compression par ondelettes pour compresser les images au lieu de la méthode DCT standard du JPEG. Cela vous donne de bien meilleurs taux de compression pour une même qualité d'image, réduisant encore davantage l'espace disque. Malheureusement, il n'a pas encore été largement adopté, si bien que vous ne pouvez pas l'utiliser à des fins externes, du moins tant que les navigateurs web et les autres visionneuses et éditeurs d'images ne se mettent pas eux aussi à exploiter ce format. Toute image enregistrée dans ce format n'est lisible que par les utilisateurs disposant de cette bibliothèque, et il faudra probablement longtemps avant qu'une bonne proportion d'utilisateurs l'emploie. En particulier les utilisateurs de Windows, car Microsoft ne l'inclura probablement pas à moins qu'un nombre suffisant de personnes ne le réclame. Astuce Quicktime : Quicktime utilise le format jp2, mais celui-ci doit être produit avec «[-depth](https://imagemagick.org/command-line-options/#depth) 8».
Traitement JPEG hors ImageMagick (bref résumé)
| jpegtran | Outil standard installé avec la bibliothèque JPEG. Il vous permet d'appliquer diverses transformations aux images au format JPEG sans décoder ni réencoder les données de l'image, évitant ainsi que les données JPEG ne se dégradent. (voir ci-dessous) |
|---|---|
| jpegtrans | Une version plus récente du programme «jpegtran» précédent, bien que nombre des fonctionnalités ajoutées (comme le rognage sans perte) aient désormais été intégrées à la version distribuée de la bibliothèque (ci-dessus). |
| jhead | Un gestionnaire JPEG sans perte plus convivial, notamment pour le profil EXIF des appareils photo numériques. Il gère les commentaires, l'ajustement des dates, l'extraction, la suppression ou le remplacement des vignettes, la suppression des profils, etc. Il s'efforce aussi de veiller à ce que les autres profils ne soient pas détruits, ce que «jpegtran» a tendance à faire. Il existe aussi d'autres programmes similaires comme «[ExifTool](http://www.sno.phy.queensu.ca/~phil/exiftool/)» et «[Exifer](http://www.exifer.friedemann.info/)». De nombreux programmes de création d'albums photo web à partir de JPEG le font aussi. |
| _La rotation JPEG sans perte (que tous les programmes ci-dessus fournissent) ne fonctionnera correctement que pour les images dont la taille est divisible par 8 ou 16. C'est le cas de la plupart (mais pas de la totalité) des photos d'appareils photo numériques. Si vous l'essayez avec une image de taille impaire, les blocs du bord droit ou inférieur (contenant la taille partielle) ne seront pas positionnés correctement dans l'image finale, car ces blocs ne peuvent exister que sur le bord droit ou inférieur. |
Pour un exemple de ceci, voir cette discussion précise_
---|---
Comme on peut le voir, la plupart de ces programmes sont conçus pour traiter les métadonnées des images JPEG sans retraiter l'image JPEG compressée. (voir la suite)
Traitement JPEG sans perte
Comme le décodage et le réencodage d'une image JPEG entraînent une dégradation de la qualité (sauf si l'on utilise une compression sans perte), la bibliothèque d'images JPEG fournit un certain nombre de programmes spéciaux capables de manipuler l'image sans perte de qualité. Ces commandes seront aussi généralement bien plus rapides que les équivalents IM, car elles n'ont pas à traiter l'image autant. Pour modifier les commentaires des images JPEG, vous pouvez utiliser les programmes de bas niveau de la bibliothèque JPEG «rdjpgcom», «wrjpgcom» et «jpegtran». Je recommande toutefois d'utiliser le programme «[jhead](http://www.sentex.net/~mwandel/jhead/)», car il préserve tout profil ou autre information présent dans l'image. «jpegtran» vous permet d'aller plus loin et de manipuler réellement les données d'image sans perte, y compris la rotation à 90 degrés, le rognage et l'insertion. Il permet même la création d'images JPEG à qualité mixte. Pour une démonstration, voir la page JPEGhack de Nemo Thorx. (Voir les notes ci-dessous) Cependant, ces commandes ne sont PAS recommandées pour un usage général, car elles sont limitées aux frontières de blocs (8 ou 16 bits) de l'image JPEG. C'est-à-dire que vous ne pouvez rogner, pivoter ou insérer qu'au niveau d'une cellule de compression JPEG, et non au niveau réel du pixel.Commentaires... Si vous créez des pages d'index web de vignettes Montage de vos photos JPEG et aimez utiliser les commentaires que vous ajoutez aux fichiers JPEG à l'aide des programmes ci-dessus, utilisez un «-label '%c'» pour indiquer à montage d'utiliser le champ « commentaire », avant de lire le nom de fichier sur la ligne de commande «magick montage». Vous pouvez aussi utiliser ce commentaire dans une transformation Polaroid complexe, un montage Polaroid ou un type d'annotation d'image. Le programme «[jhead](http://www.sentex.net/~mwandel/jhead/)» peut être utilisé pour ajouter ou modifier les commentaires dans les fichiers image JPEG. J'ai toutefois constaté que l'utilisation de l'option « edit comments » («-ce») n'est pas un bon moyen de le faire, car elle ajoute un saut de ligne supplémentaire à la fin du commentaire. Ce saut de ligne supplémentaire perturbe l'utilisation des commandes (échappement de formatage de label «%c») dans IM. La meilleure façon est d'utiliser l'entrée de commentaire (« comment input », «-ci») pour fournir un commentaire (sans saut de ligne à la fin), ou l'option « comment literal » («-cl»), bien meilleure...
jhead -cl 'Photo of some stuff, by Joe Citizen' image_of_stuff.jpg
Vignettes... Brian Jackson brian@brianjacksonphoto.com rapporte aussi que la plupart des appareils photo numériques (comme le sien, un Canon 1D) intègrent une vignette d'une taille comprise entre 12 ko et 25 ko (160x120 pixels) dans l'image JPEG qu'ils produisent. IM peut extraire ces vignettes avec...
magick image.jpg thumbnail:thumb.jpg
Cependant, le programme «[jhead](http://www.sentex.net/~mwandel/jhead/)» peut aussi extraire ces vignettes...
mkdir thumbs
jhead -st "thumbs/&i" *jpg
C'est ultra-rapide comparé à IM, car il ne modifie pas l'image, il transfère seulement les données existantes. La qualité de la vignette est toutefois loin d'être aussi bonne que celle des vignettes qu'IM peut générer à partir de l'image réelle ; elles peuvent aussi ne pas être correctement pivotées, et elles n'auront certainement pas la taille voulue. Utilisation d'ExifTool... De la part de Rob : si vous voulez une édition plus détaillée des profils stockés dans les fichiers image JPEG que ce que fournit «[jhead](http://www.sentex.net/~mwandel/jhead/)», jetez un œil aux applications plus centrées sur l'EXIF fondées sur perl, «[ExifTool](http://www.sno.phy.queensu.ca/~phil/exiftool/)», une autre version compilée «[ExifTool](http://www.dalibor.cz/minolta/exiftool.htm)», et une interface graphique Windows «[Exifer](http://www.exifer.friedemann.info/)», pour n'en citer que quelques-unes. Avec le module Perl Image::ExifTool installé, ceci supprimera sans perte toutes les métadonnées JPEG. J'ai trouvé que ce qui suit équivaut à la méthode en ligne de commande pour supprimer les données EXIF. Au cas où quelqu'un serait intéressé à l'avenir :
use Image::ExifTool;
$exifTool = new Image::ExifTool;
$exifTool->SetNewValue('*'); # delete all...
$exifTool->WriteInfo('original_image.jpg','modified_image.jpg');
$errorMessage = $exifTool->GetValue('Error');
print $errorMessage; # (if has value an error occurred)
Cela a demandé un peu de réflexion, car il s'avère qu'il fallait d'abord assigner le réglage avec SetNewValue, puis charger et enregistrer simultanément avec WriteInfo. Images JPEG à qualité mixte, avec JpegTrans... Wolfgang Hugemann {Auto@Hugemann.de} voulait que les bords d'une image JPEG ne soient pas compressés du tout, car cela perturbe la manipulation des photos. Voir ce site. La solution fournie par Yuval Levy jpegtran» pour insérer un JPG de basse qualité dans un JPEG de haute qualité...
La solution : * produire deux versions de la même image avec ImageMagick, l'une en haute qualité 100 et l'autre en basse qualité 60 (pour réduire la taille). * utiliser jpegtran pour rogner la q60, en retirant 8 pixels de chaque côté * utiliser jpegtran pour fusionner la q60 par-dessus la q100 * utiliser jpegtran pour fusionner en une bande
Nemo Thorx jpeghack@nemo.house.cx a lu ce qui précède et a tenté d'implémenter la qualité JPEG mixte. Il a réussi et présente les résultats sur ses pages Wiki à JPEGhack. Fondamentalement, il est tout à fait possible de faire du traitement JPEG sans perte, comme « rogner » et « insérer » de nouvelles sections de blocs JPEG dans une image existante.
Format de fichier image PNG
C'est l'un des formats d'image les plus récents et les plus modernes : il prend en charge les couleurs 32 bits, y compris la transparence par canal alpha, mais peut aussi être optimisé vers un schéma de couleurs indexées 8 bits de type GIF (limite de 256 couleurs). Il constitue ainsi un excellent format intermédiaire pour le traitement d'image sans perte d'information.
Compression PNG
Lorsqu'elle est utilisée avec une sortie PNG, la qualité est considérée comme deux chiffres décimaux. Le premier chiffre (les dizaines) est le niveau de compression zlib, 1-9. Cependant, si vous utilisez le réglage «0», vous obtiendrez une compression Huffman plutôt que zlib, ce qui est souvent meilleur ! Étrange mais vrai ! Le second chiffre est le type de filtrage d'encodage des données PNG (avant qu'elles ne soient compressées) : 0 = aucun, 1 = « sub », 2 = « up », 3 = « average », 4 = « Paeth » et 5 = « adaptive ». Ainsi, pour les images comportant des séquences de couleur uniformes, un filtre « none » (-quality 00) est en général meilleur. Pour les images de paysages naturels, un filtrage « adaptive » (-quality 05) est généralement meilleur. | _Le codeur PNG a fait l'objet de nombreux travaux, et de meilleures méthodes de contrôle des réglages exacts d'encodage et de compression sont généralement définies à l'aide de l'opérateur Define.
Voir Contrôles d'écriture d'image PNG ci-dessous pour plus de détails sur les defines, ou consultez les commentaires du fichier du codeur PNG, le code source «coder/png.c».
_
---|---
Si vous avez une image ImageMagick à transparence binaire (activée/désactivée), le codeur PNG l'écrira de façon efficace, en utilisant le chunk tRNS plutôt qu'un canal alpha complet. Mais si une valeur d'opacité autre que 0 ou MaxRGB est présente, il écrira un PNG avec un canal alpha. Vous pouvez forcer ce comportement en utilisant le réglage de lecture d'image «-type TruecolorMatte», ou vous pouvez enregistrer l'image au format de fichier «PNG32:». Un programme externe «[pngcrush](http://pmt.sourceforge.net/pngcrush/)» ou la version plus récente «[OptiPNG](http://optipng.sourceforge.net/)» tentera de recompresser un PNG donné pour la meilleure compression possible, et il est recommandé pour les images que vous prévoyez de placer sur un site web. Un autre programme, «[pngnq](http://www.cybertherial.com/pngnq/pngnq.html)», le quantifiera en un PNG 8 bits de 256 couleurs, bien que l'on ne sache pas s'il prend en charge les couleurs semi-transparentes dans ce format.
Meilleure compression PNG
Un point à noter au sujet des images PNG est que le PNG préserve la couleur des pixels entièrement transparents. C'est-à-dire que, même si vous ne pouvez pas la voir, la transparence a une couleur, et le PNG conserve cette donnée. Cela signifie que, dans bien des cas, on peut faire en sorte que le PNG se compresse mieux en remplaçant cette « couleur invisible » par une couleur unie statique, plutôt qu'une couleur parasite laissée par un traitement d'image antérieur. Il y a deux grandes méthodes pour cela : utiliser l'opérateur Alpha Background pour ne traiter que les pixels entièrement transparents, ou utiliser une opération de type facteur de flou avec transparence pour mapper aussi les couleurs quasi semi-transparentes vers un noir entièrement transparent. Par exemple, je reprends ici l'image «a.png» à ombre floue générée plus haut et je remplace tous les pixels situés à moins de 20% de la transparence totale.
magick a.png -fuzz 10% -transparent none a_compress.png
Comme on peut le constater, on obtient une amélioration substantielle de la taille de l'image (environ 50 %). Mais avec une coupure nette de l'ombre de l'image. Une autre solution consiste simplement à réduire l'effet d'ombre, en ajustant les niveaux du canal de transparence.
magick a.png -channel A -level 20,100%,0.85 +channel \
-background black -alpha background a_compress2.png
Il est également possible d'améliorer les résultats de l'algorithme de compression, et donc la taille finale de votre image PNG, en utilisant un plus petit nombre de couleurs.
magick image.jpg -thumbnail 200x90 -colors 256 \
-quality 90 -depth 8 thumbnail.png
Cela n'est toutefois recommandé que pour les petites vignettes ne comportant pas de transparence, et uniquement comme étape finale, car il s'agit d'une technique très « avec perte ».
PNG, navigateurs web et transparence
Microsoft Internet Explorer (IE version 6 et antérieures) n'affiche pas correctement le PNG dès qu'une quelconque forme de transparence est en jeu. Or, bien qu'il s'agisse du navigateur le plus connu à ne pas prendre pleinement en charge le PNG, ce n'est pas le seul. Les pages test de transparence PNG et un autre test PNG vous permettront de tester votre navigateur. Elles répertorient également les navigateurs et versions produisant les résultats affichés. Cependant, comme IE est (du moins au moment de la rédaction) sans doute le navigateur le plus répandu, vous pouvez ajouter à votre page web un certain nombre de solutions de contournement du problème. Pour plus d'informations à ce sujet, consultez ma page WWW Laboratory PNG avec transparence et IE, où je teste et présente la solution « PNG dans IE » que j'utilise. D'autres solutions consistent à convertir le PNG au format JPEG (avec le fond de la bonne couleur), ou GIF. Ces méthodes sont abordées en détail pour les images GIF sur des arrière-plans. Une autre solution consiste à définir la couleur de toutes les couleurs entièrement transparentes d'une image avant de l'enregistrer en PNG. Le PNG enregistrera cette couleur entièrement transparente, mais attention : à peu près n'importe quelle autre opération IM réinitialisera l'entièrement transparent en noir entièrement transparent (car la couleur transparente n'est pas censée compter, et c'est ainsi que fonctionnent les mathématiques d'image). Par exemple, l'image de test standard des exemples IM utilise du noir entièrement transparent pour tout pixel qui est entièrement transparent. On peut le vérifier soit en désactivant le canal alpha, soit en enregistrant en JPEG... |
magick test.png test.jpg
![[IM Text]](../static/img/formats/test.jpg)
Enregistrons maintenant l'image de sorte que toutes les couleurs entièrement transparentes soient remplacées par la couleur entièrement transparente « silver » (voir l'opérateur Alpha Background)... |
magick test.png -background silver -alpha Background test_silver.png
![[IM Text]](../static/img/formats/test_silver.png)
Notez que l'image devrait toujours s'afficher correctement si la transparence (ou le script JAVA spécial de la page) fonctionne dans votre navigateur. Mais si l'on désactive le canal alpha (en enregistrant en JPEG, qui n'autorise pas l'alpha), on constate que l'image PNG utilise bien une couleur « silver » pour les pixels entièrement transparents. |
magick test_silver.png test_silver.jpg
![[IM Text]](../static/img/formats/test_silver.jpg)
Notez toutefois que cela NE modifie PAS les pixels semi-transparents, qui conserveront leurs couleurs normales (non transparentes) sans mélanger cette couleur avec le fond de page ni avec la couleur utilisée pour l'entièrement transparent. La semi-transparence n'étant plus en jeu, les bords peuvent paraître crénelés (aliasés), avec aussi des effets de « halo » le long des contours de couleur plus claire. Par exemple, observez les bords des cercles noirs et blancs, qui présentent les effets de crénelage (« jaggies »). Cependant, utiliser une couleur de remplacement grise devrait rendre le résultat moins mauvais que la couleur « noire » d'origine utilisée pour l'entièrement transparent. L'autre avantage de définir la couleur des pixels entièrement transparents est une amélioration de la compression des données. Parfois, les couleurs sous-jacentes des zones transparentes utilisées pendant le traitement étaient conservées. Or celles-ci ne se compressent pas aussi bien qu'une couleur unie. Ainsi, définir la couleur entièrement transparente comme ci-dessus peut permettre un bon gain sur la taille finale du fichier. Cela devrait toutefois être fait en étape finale, car de nombreuses opérations de traitement d'image IM remplaceront toute couleur entièrement transparente présente dans une image par du noir entièrement transparent. Consultez l'opérateur Alpha Background pour une liste des opérateurs connus pour faire cela. Ma préférence, concernant les problèmes d'affichage du PNG, va à ce que Microsoft corrige IE, et il semble qu'IE version 7 disposera enfin d'une gestion pleinement fonctionnelle de la transparence PNG, dans toutes les situations.
PNG et le canevas virtuel
Bien que le PNG n'enregistre normalement PAS l'information de taille du canevas virtuel, il enregistre bien l'information de décalage du canevas virtuel, et si celle-ci est présente, IM tentera de générer une « taille de canevas » appropriée à ce décalage et à la taille de l'image. Cela peut être important à retenir pour certains opérateurs d'image tels que « [-crop](https://imagemagick.org/command-line-options/#crop) », « [-trim](https://imagemagick.org/command-line-options/#trim) » et « [-flatten](https://imagemagick.org/command-line-options/#flatten) », etc., qui utilisent le canevas ou la taille de page de l'image dans le cadre de leur fonctionnement ou de leurs résultats. Vous pouvez bien sûr utiliser le réglage « [-page](https://imagemagick.org/command-line-options/#page) » et l'opérateur « [-repage](https://imagemagick.org/command-line-options/#repage) » pour définir ou supprimer la taille et le décalage du canevas virtuel. (Voir Attribut d'image Page). Par exemple, le second « magick » d'IM voit le décalage présent dans cette image PNG, et définit un canevas suffisamment grand pour garantir que l'image soit visible dans les limites du canevas virtuel (ajouté à IM v6.1.7)... |
magick rose: -repage 0x0+40+30 png:- |\
magick - -background LightBlue -flatten png_offset_flattened.jpg
![[IM Output]](../static/img/formats/png_offset_flattened.jpg)
Cependant, même si le format PNG n'enregistre normalement pas l'information de taille de canevas, IM ajoute bien certaines métadonnées de taille de canevas virtuel aux images PNG. Ces données ne seront toutefois exploitables que par les commandes IM, et sont généralement ignorées par les autres lecteurs du format PNG. Par exemple, la seconde commande « magick » voit bien une certaine information de taille de canevas virtuel... |
magick rose: -repage 100x100+10+10 png:- |\
magick - -background LightBlue -flatten png_size_flattened.jpg
![[IM Output]](../static/img/formats/png_size_flattened.jpg)
Si le PNG est traité par un programme autre qu'IM, ces métadonnées de taille de canevas seront probablement perdues. N'oubliez pas que l'information de taille de canevas ne fait normalement pas partie du format de fichier image PNG. L'autre point à noter est que l'information de « décalage » peut comporter un décalage négatif (contrairement au format GIF), et IM les gérera de façon appropriée, ce qui rend le format bien adapté au stockage d'images de couche intermédiaires. | Certains navigateurs web ne gèrent pas très bien les décalages négatifs, produisant des résultats étranges (une version de firefox avait ce problème). Mieux vaut éviter un décalage négatif dans les images susceptibles d'être utilisées par d'autres programmes comme les navigateurs web.
---|---
PNG : résolution, densité et unités
Après quelques tests, il semble que le format de fichier image PNG ne prenne pas en charge le réglage « [-units](https://imagemagick.org/command-line-options/#units) » à « PixelsPerInch », mais seulement « undefined » et « PixelsPerCentimeter ». C'est pourquoi IM convertit un réglage de densité/unité donné vers les valeurs appropriées pour « PixelsPerCentimeter ». À suivre sur ce sujet.
Sous-formats PNG
| PNG: | Par défaut. Enregistre l'image dans un format économique. |
|---|---|
| PNG8: | L'équivalent PNG du GIF, avec transparence booléenne et une table de 256 couleurs. |
| PNG24: | Canaux RGB 8 bits sans canal alpha. Un cas particulier peut inclure la transparence booléenne (voir ci-dessous) |
| PNG32: | Force un format d'image RGBA complet avec semi-transparence complète. |
| PNG48: | Canaux RGB 16 bits sans canal alpha |
| PNG64: | Image RGBA 16 bits (avec semi-transparence) |
| PNG00: | Hérite de la couleur et de la profondeur de bits PNG de l'image d'entrée. |
| Pour plus d'informations, voir Réglage d'E/S Type d'image. | Le PNG8 a été défini par PhotoShop, et non par le groupe PNG. Et bien qu'il puisse gérer plusieurs couleurs semi-transparentes, ainsi qu'une couleur entièrement transparente, IM suppose que ce n'est pas le cas. Cela fournit un moyen de forcer les images à fonctionner correctement par défaut et à être lisibles par Internet Explorer v6. Le programme « Photoshop CS » peut le lire. |
| --- | --- |
| Les styles PNG48, PNG64 et PNG00 ont été ajoutés à partir d'IM v6.8.2-0 | |
| --- | --- |
Vous pouvez forcer IM à créer une table d'index de couleurs (ou palette) : IM enregistrera alors cette image au format « PNG8: »... |
magick {input_image} -type Palette indexed.png
Pour forcer l'utilisation d'un unique canal en niveaux de gris 8 bits, mais pas d'une image à palette indexée, utilisez...
magick {input_image} -type GrayScale -depth 8 gray.png
Vous pouvez également (ajouté dans IM v6.3.5-9) produire des niveaux de gris avec un canal de transparence.
magick {input_image} -type GrayscaleMatte gray_with_transparency.png
Et pour une simple image en deux couleurs...
magick {input_image} -type BiLevel bitmap.png
Un cas particulier existe pour les images PNG24. Si l'image ne contient qu'une transparence booléenne, que toutes les couleurs transparentes sont identiques et que cette couleur n'est utilisée que pour la transparence, alors le codeur PNG désignera cette couleur précise comme étant transparente. Par exemple... |
magick a.png -channel A -threshold 75% +channel \
-background hotpink -alpha background png24:a_png24_alpha.png
![[IM Output]](../static/img/formats/a_png24_alpha.png)
Cette image n'a pas de palette, mais possède une transparence tout ou rien. Le -threshold du canal alpha garantit que seule une transparence booléenne (tout ou rien) est présente, tandis que l'option Alpha Background garantit que tous les pixels entièrement transparents ont une couleur précise. Ce qui précède ne garantit PAS l'absence de pixel opaque de cette couleur, si bien que cela peut tout de même échouer.
Contrôles d'écriture des images PNG
Pour mieux contrôler l'écriture des images PNG, Glenn Randers-Pehrson a révisé un certain nombre de contrôles « [Define Global Setting](basics.html#define) » du codeur, pour IM v6.5.2. Ceux-ci incluent...
- -quality '{level}{filter}'
- Le niveau de compression de base et le filtre lors de l'enregistrement d'une image PNG.
-define png:compression-strategy=zs
-define png:compression-level=zl
-define png:compression-filter=fm
Définit complètement le système de compression à utiliser pour l'image PNG en cours d'écriture. Le réglage [-quality](https://imagemagick.org/command-line-options/#quality) fixera normalement les valeurs _zl_ et _fm_, mais pas le réglage _zs_.
- -depth
- La profondeur générale de l'image à générer, généralement fixée à 8 ou 16 bits.
- -define png:bit-depth={depth}
- Spécifie précisément la profondeur du fichier image PNG résultant. Cela supplante le contrôle IM habituel «
[-depth](https://imagemagick.org/command-line-options/#depth)», mais uniquement pour l'écriture d'images PNG, et seulement lorsque le changement peut être effectué sans perte. Dans le cas d'images à couleurs indexées, il s'agit de la profondeur des index de la palette, et non de celle des échantillons de couleur. - -define png:color-type={type}
- Spécifie précisément le type du fichier PNG en cours d'écriture. Les valeurs peuvent être soit «
0» | pour les niveaux de gris, ce qui autorise des «bit-depths» de 2, 3, 4, 8 ou 16.
---|---
« 2 » | pour le RGB, ce qui autorise des « bit-depths » de 8 ou 16.
« 3 » | pour l'indexé, ce qui autorise des « bit-depths » de 1, 2, 4 ou 8.
« 4 » | pour Gray-Matte
« 6 » | pour RGB-Matte
Notez que « -define png:color-type='2' » est particulièrement utile pour forcer les données d'image à être stockées en valeurs RGB plutôt qu'en valeurs sRGB. On peut toutefois obtenir un effet similaire avec « -set colorspace sRGB » sur une image RGB linéaire. Ne vous attendez cependant pas à ce que les programmes respectent cet espace colorimétrique linéaire à la lecture. Cela inclut ImageMagick.
- -profile PNG-chunk-{x}:{file}
-
Ajoute un profil PNG brut à l'emplacement {x} depuis {file}. Les 4 premiers octets de {file} contiennent le nom du chunk, suivi d'un caractère deux-points « : », puis des données du chunk. Le {x} peut valoir « b » pour placer le profil avant le PLTE, « m » entre le PLTE et l'IDAT, ou « e » pour après l'IDAT. Si vous souhaitez écrire plusieurs chunks du même type, ajoutez alors une courte chaîne unique après le {x} pour empêcher les profils suivants d'écraser les précédents. Par exemple..
-profile PNG-chunk-b01:file01 -profile PNG-chunk-b02:file02
+set date:create
+set date:modify
Ce sont des « propriétés » d'image créées par ImageMagick chaque fois qu'il lit un fichier. Elles contiennent (respectivement) l'heure de création du fichier image (en réalité l'heure de changement de permission/propriétaire/déplacement) et l'heure de dernière modification du fichier. Malheureusement, les formats de fichier image PNG aiment écrire ces données d'image avec le format de fichier image PNG, et si ces données diffèrent, alors le fichier généré sera lui aussi différent, même si rien d'autre n'a changé.
magick logo: logo.jpg magick logo.jpg
logo1.png
sleep 2; touch logo.jpg # change the JPG file timestamp
magick logo.jpg logo2.png
diff -s logo1.png logo2.png
magick compare -metric RMSE logo1.png logo2.png null:
Le « diff » ci-dessus renverra le message
« Binary files logo1.png and logo2.png differ »
alors même que le « magick compare » a renvoyé « 0 (0) », ce qui indique que les images ont exactement les mêmes données d'image. Notez que, comme IM écrase ces propriétés avec les heures du fichier PNG qu'il vient de lire, vous ne pouvez pas voir les valeurs réelles de ces propriétés enregistrées dans le PNG à l'aide de « magick identify ». La solution consiste à enregistrer les images PNG sans aucun « horodatage ».
magick logo: logo.jpg
magick logo.jpg +set date:create +set date:modify logo1.png
sleep 2; touch logo.jpg
magick logo.jpg +set date:create +set date:modify logo2.png
diff -s logo1.png logo2.png
Cette fois, « diff » a signalé...
« Files logo1.png and logo2.png are identical »
REMARQUE : vous pouvez également utiliser d'autres programmes UNIX tels que « cmp », « md5sum » ou « sha1sum » pour comparer des fichiers image binaires. Les deux derniers programmes ne sont pas garantis, mais ils sont pratiquement impossibles à tromper, et sont plus rapides pour comparer plus de deux fichiers (à l'aide de la somme de contrôle). Grâce à quelques ajouts de GlennRP, le développeur du PNG, vous pouvez désormais aussi utiliser « -define png:exclude-chunk=date » pour dire au codeur PNG de ne pas écrire les chunks de texte liés à la date.
Traitement PNG hors ImageMagick
| Il existe un assez grand nombre d'applications auxiliaires pour le PNG, qui peuvent être de précieux compléments pour générer un fichier image PNG final. pngtrans | Informations PNG stockées avec une image |
|---|---|
| pngcrush | Tente de trouver la meilleure compression d'un PNG en essayant de compresser l'image avec toutes les compressions PNG logiques disponibles, avant de faire un choix final, pour chaque image individuelle. Cela peut bien sûr prendre un certain temps pour chaque image. |
| OptiPNG | Un optimiseur de compression PNG plus récent. |
| pngquant | Optimiseur PNG avec perte, réduisant une image PNG à une palette de couleurs 8 bits avec tramage. Il construit des PNG à couleurs indexées, avec les couleurs de transparence alpha véhiculées dans le chunk tRNS. |
| pngnq | Un quantificateur PNG avec perte plus récent, pour générer des images PNG à table de 8 bits de couleurs. Force également l'utilisation d'une palette de couleurs. |
| pngout | Un optimiseur PNG pour plateforme Windows (avec interface graphique optionnelle) qui utilise un compresseur ZIP optimisé pour l'espace plutôt que pour la vitesse (également sur la page liée ci-dessus). |
| La plupart de ces outils servent à améliorer la taille finale du fichier image, en utilisant soit des techniques avec perte, soit des techniques sans perte. |
Profils d'image
La gestion des profils pour les images de qualité photo est importante. Cependant, d'après ce que je peux en dire, il s'agit d'un art très ésotérique, et rien de simple. Tous les formats n'utilisent pas de profils, mais la plupart des formats modernes le font. Cela inclut JPEG, PNG, TIFF, et (à partir d'IM v6.3.4-1) GIF. En fait, le problème est aggravé par le fait que de nombreux programmes ne comprennent même pas les profils de couleur des images et ne les recherchent pas. Alan Gibson, alias Snibgo a rassemblé un résumé de la façon dont différents navigateurs web gèrent différents profils de couleur, sur sa propre page Snibgo, ImageMagick Profiles. Cela vaut le coup d'œil. Pour lister les profils présents dans une image, utilisez...
magick identify -verbose image.tif | grep 'Profile-.*bytes'
Les profils courants (avec un lien vers les informations dont je dispose à leur sujet) incluent...
EXIF | [Métadonnées d'appareil photo numérique](photos.html#exif)
---|---
ICC | Profil d'espace colorimétrique d'image
ICM | Gestion des couleurs Microsoft (comme l'ICC)
IPTC | Informations sur l'image et l'auteur
8BIM | Profil de métadonnées Photoshop. Comprenant des données sur : les chemins de détourage... Quoi d'autre ?
XMP | Extensible Metadata Platform (XMP) d'Adobe (voir la page Adobe)
Vous pouvez extraire ces profils courants à l'aide de formats de sortie spéciaux qu'IM fournit à cet effet. Par exemple...
magick -define jpeg:size=64x64 image.jpg iptc:profile.iptc
magick -define jpeg:size=64x64 image.jpg xmp:profile.xmp
L'option « [-define](https://imagemagick.org/command-line-options/#define) » ci-dessus sert d'« indice » à la bibliothèque JPEG pour réduire la quantité de données d'image réellement lues en mémoire, et ainsi éviter beaucoup de traitement sur des données que vous n'avez en fait pas l'intention d'utiliser. Vous pouvez aussi insérer ou réinsérer un profil arbitraire sous forme de « blob » ou de chaîne binaire contenant l'information de votre choix.
-profile '_profile_name_ :_data_file_ '
Autrement dit, le fichier « data_file » est ajouté « tel quel » à l'image en tant que profil profile_name. IM ou toute autre application ignorera de tels profils, à moins de les connaître spécifiquement.
Notions de base sur les profils de couleur
D'abord un mot rapide...
Color Management is for Wimps -- N'y touchez pas
Bricoler les profils empire généralement les choses
Donc si les couleurs sont belles... laissez tout tel quel. Un utilisateur nommé fhoech sur les forums IM (qui a depuis disparu) a publié à de nombreuses reprises l'introduction de base suivante à l'utilisation des profils de couleur pour changer l'espace colorimétrique employé par les images... Le RGB, le sRGB et le CMYK ne sont pas des espaces colorimétriques, ce sont des systèmes de couleur (qu'IM contrôle à l'aide de l'opérateur « [-colorspace](https://imagemagick.org/command-line-options/#colorspace) »). Il n'existe pas un unique espace colorimétrique RGB ou CMYK, mais une infinité, au sens littéral, d'espaces colorimétriques différents possibles dans chaque système de couleur. Vous avez besoin de profils ICC (ou ICM) qui caractérisent avec précision les couleurs de vos images. Normalement, le profil ICC décrivant une image devrait être intégré à l'image elle-même ; sinon, vous devez recourir à une tentative de « meilleure estimation » qui n'est qu'un pis-aller : ouvrez l'image dans un éditeur d'image compatible ICC et assignez différents profils ICC (ne convertissez pas !) jusqu'à en trouver un qui rende bien avec votre image (votre moniteur doit être calibré pour obtenir réellement un bon aperçu des couleurs). Puis enregistrez l'image avec le profil intégré. Quant à savoir pourquoi vous avez besoin de deux profils : le profil source décrit les couleurs de votre image telles qu'elles sont actuellement. Le profil de destination décrit les couleurs de l'image de sortie après conversion. Par ailleurs, vous devez faire très attention lors de la conversion vers un profil de destination donné : si, par exemple, vous utilisez un profil qui décrit l'impression offset sur papier non couché mais que vous comptez utiliser les images pour une impression sur papier couché, vous n'obtiendrez évidemment pas de bons résultats. Le profil de sortie doit être une représentation fidèle de vos conditions de sortie prévues. Lors d'une conversion d'un espace colorimétrique soustractif vers un espace additif (ou inversement) sans utiliser le profil correct (pour les deux étapes de la conversion), vous n'obtiendrez pas dans la plupart des cas des couleurs ou une luminosité « correctes », même si vous pouvez avoir de la chance et tomber juste « par accident ». Vous pouvez télécharger des profils de couleur depuis l'International Color Consortium.
Changement d'espace colorimétrique via les profils
Bien que vous puissiez simplement convertir directement les espaces colorimétriques ainsi...
magick _cmyk_image.jpg_ -colorspace rgb _rgb_image.jpg_
la meilleure solution pour convertir du CMYK vers du RGB JPEG est d'utiliser des profils de couleur avec l'opérateur « [-profile](https://imagemagick.org/command-line-options/#profile) ». Raf Lenaerts a signalé les règles suivantes pour l'utilisation de l'opérateur « [-profile](https://imagemagick.org/command-line-options/#profile) » dans ImageMagick...
S'il n'y a pas de profil intégré, alors le premier « `[-profile](https://imagemagick.org/command-line-options/#profile)` » est le profil d'entrée. Un second « `[-profile](https://imagemagick.org/command-line-options/#profile)` » définit alors le profil de sortie.
S'il y a un profil intégré, alors un unique opérateur « `[-profile](https://imagemagick.org/command-line-options/#profile)` » définira immédiatement le profil de sortie.
En résumé...
- Le «
[-profile](https://imagemagick.org/command-line-options/#profile)» doit être placé entre le fichier d'entrée et le fichier de sortie.
Il s'agit en fait d'une pratique standard de traitement en ligne de commande IM. - Utilisez «
[+profile](https://imagemagick.org/command-line-options/#profile)» avec «icm» pour supprimer tout profil icc présent. - Le premier «
[-profile](https://imagemagick.org/command-line-options/#profile)» alors indiqué est le profil d'entrée. - Le second «
[-profile](https://imagemagick.org/command-line-options/#profile)» indiqué est le profil de sortie.
Ainsi, pour utiliser des profils sur TOUTES les images, vous aurez besoin de trois opérations « [-profile](https://imagemagick.org/command-line-options/#profile) » : options de suppression, de profil d'entrée et de profil de sortie. Par exemple, si l'image d'entrée possède déjà un profil de couleur, alors une seule suffit.
magick _rgb_image.jpg_ -profile USCoat.icm _cmyk_image.jpg_
Mais si l'image n'en a pas (ou si vous savez qu'il s'agit d'une image RGB, sans profil existant), vous pouvez utiliser...
magick _rgb_image.jpg_ +profile icm \
-profile sRGB.icc -profile USCoat.icm _cmyk_image.jpg_
Cela règle l'image résultante sur un profil CMYK USCoat.icm. Un autre profil CMYK est le profil SWOP.icm. Pour l'inverse (l'image possède déjà un profil), utilisez...
magick _cmyk_image.jpg_ -profile sRGB.icc _rgb_image.jpg_
AVERTISSEMENT : si l'image d'origine contient déjà un profil, par exemple un profil CMYK, alors effectuer deux conversions de profil est une mauvaise idée. Par exemple
magick _cmyk_image.jpg_ -profile "CMYK.icc" -profile "RGB.icc" \
_output_image.jpg_
donnera une conversion CMYK -> CMYK -> RGB. Mais comme le CMYK n'est pas symétrique, l'étape de conversion supplémentaire peut aboutir à une conversion de couleurs désastreuse. (Voir la discussion du forum IM Question on ICC profile conversion behaviour)
Modification de profil de couleur
Les images que vous souhaitez convertir devraient toutes avoir des profils ICC intégrés. Ainsi, pour convertir vos images avec un même profil ICC CMYK...
magick _rgb_image.jpg_ -profile CMYK_PROFILE _cmyk_image.jpg_
Cette opération sera effectuée avec l'intention perceptive, la valeur par défaut (voir Color Space Conversion pour une explication détaillée des intentions de rendu). Comme les résultats obtenus avec l'intention perceptive peuvent fortement varier selon le logiciel utilisé pour créer les profils ICC, vous pouvez utiliser « [-black-point-compensation](https://imagemagick.org/command-line-options/#black-point-compensation) » avec « [-intent](https://imagemagick.org/command-line-options/#intent) relative » pour obtenir un résultat un peu plus proche de ce à quoi on peut s'attendre.
magick _rgb_image.jpg_ -intent relative -black-point-compensation \
-profile CMYK_PROFILE _cmyk_image.jpg_
| Les paramètres « [-black-point-compensation](https://imagemagick.org/command-line-options/#black-point-compensation) » et « [-intent](https://imagemagick.org/command-line-options/#intent) » doivent tous deux être spécifiés avant l'opération « [-profile](https://imagemagick.org/command-line-options/#profile) » pour être pris en compte.
---|---
| L'option « [-black-point-compensation](https://imagemagick.org/command-line-options/#black-point-compensation) » a été ajoutée dans IM v6.2.7-0.
---|---
Vous pouvez télécharger des profils colorimétriques auprès de l'International Color Consortium.
EXIF InterColorProfile
En plus de la gestion des profils colorimétriques décrite ci-dessus, de nombreux appareils photo numériques enregistrent l'information de profil colorimétrique dans l'attribut de profil EXIF « InterColorProfile ». Cet attribut est censé être « pris pour hypothèse en l'absence de profil colorimétrique embarqué », selon le document « Colour Management and Adobe PhotoShop 7 ».
Profils IPTC
Le profil IPTC est utilisé dans les images pour stocker des attributs d'identification de l'image, tels que la légende, le crédit, l'auteur, les mots-clés, etc. Si vous voulez ajouter un profil IPTC à une image, il vous faut un unique -profile :
magick _image.jpg_ -profile iptc _iptc_image.jpg_
Si une image contient un profil, vous pouvez l'enregistrer ainsi, de façon à pouvoir ajouter ce profil à d'autres images similaires :
magick _iptc_image.jpg_ iptcData.iptc
Ou vous pouvez extraire une version texte du profil, que vous pourrez modifier
magick _iptc_image.jpg_ IPTCTEXT:iptcData.pro
Voici par exemple un profil apporté par fcaserio sur les forums IM.
Vous pouvez ajouter ce profil à une image avec
magick _image.jpg_ +profile 8BIM -profile 8BIMTEXT:iptcData.pro \
iptc_image.jpg
Cette image peut être convertie en EPS (Encapsulated Postscript) avec un aperçu TIFF (EPT), qui contient lui aussi le profil IPTC. (Merci à Tee Tanne).
magick _itpc_image.jpg_ EPT:image.eps
Profils XMP
Extraire un profil XMP d'une image TIF...
magick picture.tif metadata.xmp
Un mot sur les formats d'image vectoriels
| Il existe plus d'un style de stockage d'image dans le monde... Matriciel | Images qui sont stockées et traitées à l'aide de tableaux de pixels colorés. Les formats d'image matriciels incluent GIF, PNG, JPEG, TIFF, et ainsi de suite. Les images peuvent être constituées de plusieurs tableaux (canaux) représentant différentes couleurs, et peuvent contenir plusieurs images, calques ou trames (selon l'usage) dans un même fichier au format d'image. |
|---|---|
| Vectoriel | Les images sont définies en termes de lignes, d'épaisseurs, de motifs, de dégradés et d'objets composés plus vastes. Les formats incluent SVG, Postscript, PDF, FIG, DXF, WMF, et même les polices TTF. Cela permet de redimensionner les images, et même de les agrandir considérablement sans perte de qualité. De plus, lors de l'édition de tels formats, vous pouvez généralement déplacer des objets entiers sans détruire ce qui se trouve dessous (superposition d'objets). |
| Fractal | Les images sont un cas particulier et rare, utilisé pour obtenir une compression extrême d'images complexes, telles que d'anciennes peintures. Le seul usage que je connaisse se trouve toutefois dans un produit commercial très coûteux. En dehors de cet usage, il sert aussi pour des objets mathématiques complexes tels que les ensembles de Mandelbrot et de Julia, et pour générer des éclaboussures de couleur aléatoires dans les économiseurs d'écran (IFS). On le rencontre très rarement. |
| Pourquoi est-ce important ? Parce qu'IM est un « processeur d'images matricielles », et bien qu'il puisse lire ou écrire des images stockées dans l'un des formats vectoriels, il le fait en convertissant l'image vers et depuis une image matricielle interne. Par conséquent, si vous essayez de convertir une image d'un format vectoriel vers un autre format vectoriel, IM va essentiellement rasteriser cette image à la résolution ou densité actuellement définie, laquelle sera, on l'espère (mais c'est peu probable), adaptée au périphérique de sortie sur lequel vous comptez l'utiliser. Autrement dit, toute sortie produite par IM ne sera jamais un véritable format vectoriel. Bien qu'IM puisse convertir son format matriciel interne en un fichier de format vectoriel, le résultat n'est qu'une enveloppe vectorielle superficielle autour d'une image au format matriciel. Et à moins que l'image matricielle ne soit correctement définie (à la bonne résolution) pour le périphérique de sortie, le résultat ne sera pas particulièrement bon. Malheureusement, les nouveaux utilisateurs d'IM n'en savent rien. Ils voient IM comme un convertisseur capable de transformer par exemple du PDF en Postscript, produisant des images avec des effets d'aliasing « en escalier », des couleurs « délavées », ou des images floues qui n'ont tout simplement pas bonne allure sur le périphérique de sortie visé. Ce qui nous amène à ce que j'essaie de dire... |
Évitez d'utiliser ImageMagick pour les conversions « image vectorielle » vers « image vectorielle »
Par exemple : convertir entre des formats comme : PDF, PS, SVG
Autrement dit, utilisez le bon outil pour la bonne tâche. Et pour cette situation, ImageMagick n'est pas le bon outil.
Cela ne veut pas dire qu'IM ne peut pas être utilisé pour effectuer une telle conversion. Après tout, la plupart des imprimantes et des moniteurs rasterisent en réalité eux-mêmes l'image pour l'impression effective sur une feuille de papier. La différence, c'est que l'imprimante sait quelle résolution il lui faut pour le matériel qu'elle utilise. ImageMagick, lui, ne le sait pas. Pour des exemples de conversion d'images vectorielles en images matricielles (et d'amélioration de ces conversions), voir l'exemple Postscript/PDF pre-formatted Text and Graphics Input, et pour le SVG et les images vectorielles générées par l'utilisateur, voir SVG Image Handling. Vous trouverez peut-être aussi utiles les informations sur Font Size, Resolution and Pointsize, notamment concernant l'effet de « [-density](https://imagemagick.org/command-line-options/#density) » sur les polices de texte dessinées.
Alternatives hors IM
Si vous avez réellement besoin de faire de la conversion générale entre formats vectoriels, le programme UniConvertor, Sk1 Project (généralement disponible sous forme de paquet linux standard) et le VectorSection peuvent être utilisés pour effectuer une conversion vecteur-vers-vecteur sans réellement rasteriser les images. Pour la conversion générale de Postscript vers d'autres formats vectoriels, regardez « [pstoedit](http://www.pstoedit.net/pstoedit) », qui est généralement disponible dans les dépôts de paquets supplémentaires de votre système. Regardez aussi « [epstopdf](http://www.ctan.org/tex-archive/support/epstopdf/) » qui fait partie du Comprehensive TeX Network (CTAN). TeX et LaTeX sont un système UNIX de traitement de texte pour la documentation (livres et articles scientifiques). Il comporte de nombreux outils liés aux formats Postscript et PDF. Pour la conversion de SVG en PDF, Wolfgang Hugemann Auto@hugemann.de suggère que la conversion vecteur-vers-vecteur la plus simple consiste à afficher le SVG dans un navigateur (Firefox) puis à l'imprimer à l'aide d'un pilote d'impression PDF. Bien que « Uniconvertor » puisse aussi convenir.
Autres formats de fichier d'image
Il existe bien sûr un très grand nombre d'autres formats de fichier d'image qu'IM peut utiliser et comprendre, mais beaucoup de ces formats moins « courants » sont spécialisés dans un but précis, et nécessitent souvent quelques réglages ou d'autres options pour qu'ils se comportent comme vous le souhaitez. Je ne recommande pas ces formats de fichier, et en général je ne les utilise pas moi-même. Cependant, j'essaie de consigner diverses notes, techniques et options qui ont été rapportées sur la liste de diffusion IM, ou sur le forum IM, afin que d'autres puissent eux aussi profiter des informations glanées. Beaucoup de ces notes sont sous une forme brute, non retravaillée, et je suis disposé à accepter d'autres contributions, ou des réécritures des notes ci-dessous.
Postscript (PS, EPS) et Adobe PDF
Pour la gestion de base, voir Postscript Text Handling et l'avertissement sur les formats d'image vectoriels. Le principal problème avec Postscript et ses formats apparentés (comme PDF), c'est qu'il s'agit d'un langage complexe de mise en page. Autrement dit, le format est un programme et non pas véritablement un format d'image ! Cela signifie qu'IM est contraint de s'appuyer sur un autre programme externe (ou délégué) pour « exécuter » le programme et renvoyer l'image générée.
Encapsulated Postscript (EPS)
L'Encapsulated Postscript est en réalité exactement identique au Postscript normal (un format d'image vectoriel), à ceci près qu'il s'agit d'une image d'une seule page, et qu'une entrée « Bounding Box » est présente pour définir la zone exacte que couvre l'image. Ce format a été conçu pour permettre à d'autres programmes de déplacer et de mettre à l'échelle l'image lors de l'insertion du Postscript qu'il définit dans d'autres documents Postscript. IM le gère fondamentalement de la même manière que le Postscript. (Voir ci-dessus).
magick image.jpg -compress none eps2:image.eps
Utilisez « EPS2: » ou « EPS3: » pour créer des fichiers EPS compressés en JPEG : Note : l'ajout de profils aux images EPS figure sur la liste des « choses à faire » mais n'est actuellement pas pris en charge.
Entrée Postscript/PDF
Comme ce format est un format d'image vectoriel, il est influencé par des réglages tels que « [-page](https://imagemagick.org/command-line-options/#page) » et « [-density](https://imagemagick.org/command-line-options/#density) ». Des exemples de lecture de Postscript (ce qui vaut de même pour les formats EPS et PDF) sont fournis dans Postscript Formatted Text, et vous devriez le lire en premier. Cependant, la lecture de ces formats est très compliquée, car ce sont de véritables langages informatiques conçus spécifiquement pour générer une page imprimée sur des imprimantes laser de haute qualité. C'est bien au-delà du champ d'application d'ImageMagick, et il s'appuie donc sur un programme délégué spécialisé, connu sous le nom de « ghostscript », pour lire et convertir les pages Postscript et PDF en image matricielle. Un point important. Comme IM utilise Ghostscript pour rasteriser un fichier postscript à une résolution donnée, toute image matricielle contenue dans le fichier postscript sera souvent floue ou déformée, à moins que la densité exacte de cette image matricielle ne soit connue. Cela suppose également que le programme postscript lui-même ne fait pas pivoter ni ne manipule d'une autre façon l'image matricielle. En fait, plusieurs délégués sont présents et sélectionnés par IM selon la situation. Par exemple, « ps:color » (utilisant le périphérique ghostscript « bmpsep8 ») par rapport à « ps:alpha » (utilisant « pngalpha ») est sélectionné selon que « -channel RGBA » a été défini ou non. Le délégué « ps:color » est utilisé plutôt que « ps:alpha » par défaut car le périphérique ghostscript « pngalpha » ne prend en charge qu'une seule page/une seule image, alors que les PDF comportent généralement plusieurs pages. Utilisez « -channel RGBA » avant de lire l'image pour sélectionner la méthode déléguée « pngalpha ». Si tout ce que vous voulez, c'est le nombre de pages, l'utilisation de ghostscript peut être bien plus rapide.
gs -q -sPDFname=document.pdf pdfpagecount.ps
%%Pages: 96
Windows et Ghostscript, c'est un peu plus complexe, car cela nécessite l'utilisation du registre Windows.
Options spéciales de lecture de PDF d'ImageMagick
Options spéciales pour la gestion des PDF...
-units PixelsPerInch- Devrait être défini lors de la manipulation de documents PDF (lecture ou création). Je ne suis pas certain de ce que cela fait, mais les retours indiquent que cela devrait être défini pour un fonctionnement correct.
-define pdf:use-cropbox=true- Utiliser une « cropbox » plutôt que la « mediabox » par défaut, comme dans les fichiers PDF générés par Adobe. (Ajoute en gros un «
-dUseCropBox» à la conversion ghostscript à partir d'images PDF. NOTE : cela fonctionne si votre PDF ne comporte qu'une seule page, mais s'il s'agit d'un PDF de plusieurs pages, le rognage ne sera pas correct. -define pdf:use-trimbox=true- Utiliser une « trimbox » plutôt que la « mediabox » par défaut, comme dans les fichiers PDF générés par Adobe.
Modifier le délégué d'entrée
Modifier le délégué système est dangereux, et une erreur pourrait rendre IM incapable de lire les fichiers postscript/PDF. Vous pourriez également avoir besoin de privilèges d'administration, car vous ne pouvez pas remplacer un délégué défini par le système par un délégué personnel, en raison de mesures de sécurité (contre les « pirates »). Voir Delegates and Coders for Image Formats pour plus d'informations sur la syntaxe et la signification du XML des délégués, ainsi que sur la création de délégués d'entrée/sortie personnels. Sur le sujet du forum Convert EPS to JPG Unreliable, il a été suggéré de modifier votre fichier système « delegates.xml » et de remplacer « -sDEVICE=bmpsep8 » par « -sDEVICE=bmp16 ». D'autres utilisateurs ont constaté que le remplacer par « -sDEVICE=pnmraw » fonctionne aussi mieux. Je ne l'ai pas essayé moi-même, je ne peux donc offrir aucune garantie à ce sujet, ni sur les versions de Ghostscript auxquelles cela s'applique. Si vous avez d'autres informations, merci de me les communiquer. Si vous avez un fichier postscript ou PDF en CMYK, la page Blog of John détaille comment modifier l'entrée du délégué (ajouter une option ghostscript « -dUseCIEColor ») pour que ghostscript gère ce type de postscript à la conversion. Une autre possibilité est de créer un délégué personnel qui invoquerait pdftoppm. Disons que la balise s'appelle « pdfalt » et qu'elle invoque le programme « pdftoppm » ou même « pdfimage » du paquet « xpdf ». Votre flux ressemblerait alors à quelque chose comme ceci :
magick pdfalt:image.pdf image.png
Quelqu'un voudrait-il se lancer dans la création du délégué ? Faites-le-nous savoir ! Vous aimeriez peut-être aussi essayer d'utiliser « pstoedit », qui peut convertir un fichier postscript vers d'autres formats vectoriels, ou passer le postscript à l'API d'ImageMagick pour le convertir en bitmap. Je n'ai pas expérimenté ni testé cela, et j'aimerais avoir des retours.
Extraction d'images matricielles depuis un PDF
Le rendu de n'importe quelle page PDF à une taille ou une « densité » précise est au cœur du graphisme vectoriel utilisé par PDF. Cela fonctionne très bien pour le texte ou les dessins au trait. Mais cela signifie aussi que toute image matricielle (tableau de pixels) contenue dans le PDF doit être redimensionnée. Or le redimensionnement est une opération « avec perte », qui entraîne une certaine dégradation de l'image, à moins d'utiliser la densité d'origine de cette image matricielle, laquelle peut varier d'une image à l'autre au sein du PDF ! Il est donc avantageux de pouvoir extraire les images matricielles d'un PDF sans aucune référence de « densité ». Vous pouvez extraire les images matricielles directement à l'aide du programme « pdfimages », qui fait partie soit du paquet logiciel poppler-utils, soit de « xpdf-utils ». Ces paquets logiciels contiennent aussi de nombreux autres outils qui peuvent vous être utiles pour le traitement de PDF. Voir Poppler for Windows et Xpdf Reader. Vous aimeriez peut-être aussi regarder « mutool » du paquet « MuPDF », réalisé par les mêmes personnes qui s'occupent de GhostScript. Un outil en ligne pour extraire texte et images est Sumnotes (commercial, avec un essai gratuit limité). À un niveau plus bas, Wolfgang Hugemann indique que vous pouvez extraire n'importe quelle image contenue dans un PDF (surtout à partir de PDF générés par des scanners). En gros, en extrayant toute séquence d'octets comprise entre « stream » et « endstream », et en l'enregistrant dans un fichier séparé.
Extraction de texte depuis un PDF
Vous pouvez utiliser le programme GhostScript « ps2ascii » ou « pstotext ». Ou, comme alternative traitant à la fois le texte et les images, regardez « pdftohtml » qui dispose d'une sortie XML dont Ross Presser rapporte qu'elle est « plutôt bonne pour reconstituer les paragraphes. ». Le programme « pdftk » peut aussi « décompresser » un PDF pour qu'il puisse être édité directement, et « réparer » des PDF corrompus.
Options de sortie Postscript/PDF
Les réglages suivants sont connus pour influencer la sortie des formats d'image Postscript, Encapsulated Postscript et PDF : « [-page](https://imagemagick.org/command-line-options/#page) », « [-gravity](https://imagemagick.org/command-line-options/#gravity) », « [-compress](https://imagemagick.org/command-line-options/#compress) », « [-density](https://imagemagick.org/command-line-options/#density) ». Par défaut, aucune compression n'est utilisée sur la sortie d'image PDF, si bien que les fichiers PDF peuvent souvent être bien plus volumineux que nécessaire. Le tableau suivant met en correspondance les modes de compression d'IM avec le mode de compression Postscript résultant.
| Signification des compressions PS/PDF Compression | réglage « /Filter [ ... ] » de l'image |
|---|---|
« -compress none » |
« /ASCII85Decode » |
« -compress zip » |
« /FlateDecode » |
« -compress jpeg » |
« /DCTDecode » |
« -compress lzw » |
« /LZWDecode » |
« -alpha off -monochrome -compress fax » |
« /CCITTFaxDecode » |
« +compress » |
|
« -compress rle » |
|
| n'importe quoi d'autre | « /RunLengthDecode » |
Les compressions recommandées pour le PDF sont Zip (compression Deflate) ou Group4 (Fax).
magick image.gif -alpha off -monochrome -compress Zip -quality 100 \
-units PixelsPerInch -density 600 image_deflate.pdf
magick image.gif -alpha off -monochrome -compress Group4 -quality 100 \
-units PixelsPerInch -density 600 image_group4.pdf
Ces deux commandes produisent des fichiers PDF bien plus petits qu'une conversion directe, pour une page en noir et blanc. Cependant, savoir lequel est le plus petit dépend de l'image et est impossible à déterminer sans essayer et tester la taille résultante.
Alternatives de sortie Postscript/PDF
Rappelez-vous que le PDF est un format d'image (de document) vectoriel, et qu'IM est un processeur d'images matricielles. Cela signifie que tout document PDF créé par IM sera essentiellement constitué d'une seule image matricielle par page. Les images produites dans le document PDF seront figées à une résolution (ou densité de pixels) donnée, ce qui peut provoquer des problèmes de distorsion de pixels lors de l'affichage ou de l'impression à une autre résolution. De plus, pour les documents texte, l'utilisation d'une image matricielle est un gaspillage, car du texte brut avec ses polices et ses métadonnées de mise en forme sera toujours bien plus léger et rendra mieux qu'une image matricielle scannée du texte. Pour cette raison, d'autres programmes de création de PDF peuvent être mieux adaptés à vos besoins. Cela vous permettra de conserver les images comme des images, et le texte comme du texte, en positionnant texte et images ensemble d'une manière plus agréable et plus logique, ainsi que d'insérer du texte et de superposer des flèches ou des lignes de liaison, de façon plus logique. Par exemple, je vous suggère de regarder les programmes d'accompagnement fournis par le système TeX et LaTeX. Voir Comprehensive TeX Network (CTAN). Un autre ensemble d'outils est Multivalent Document Tools. Bien sûr, de tels programmes sont plus difficiles à automatiser, mais j'ai par le passé utilisé le simple format de fichier graphique vectoriel FIG (voir Xfig) pour générer des documents Postscript et PDF avec du texte et des graphiques placés de manière automatique. Convertisseurs d'image vers PDF... L'outil sam2p, spécialisé dans la conversion d'images en fichiers PDF. Il effectue donc tout le prétraitement avec ImageMagick puis réalise la conversion finale à l'aide de « sam2p ». Il fournit même un petit script pour ajuster le résultat à une feuille A4. Extrait du README de sam2p : Q58) |
sam2p peut-il générer un PDF mis à l'échelle proportionnellement (c'est-à-dire en conservant le rapport d'aspect) selon une taille de page spécifiée, et centré sur la page ? |
|---|---|
| A58) | Non, mais le script Perl sam2p_pdf_scale.pl fourni avec sam2p peut post-traiter le fichier créé par sam2p. Par exemple, pour mettre à l'échelle et centrer un PDF sur une feuille A4, faites : |
sam2p input.img output.pdf
sam2p_pdf_scale.pl 595 842 output.pdf
Malheureusement, cela ne fonctionne pas avec les PDF créés par défaut par IM. -- Sebastian Krause, de la liste de diffusion des utilisateurs d'IM Documents PDF multi-pages... Vous pouvez utiliser perl pour combiner plusieurs fichiers PDF, sans recourir à IM ni à son problème de rasterisation...
#!/usr/bin/perl # Script pdf-combiner.pl use strict; use warnings; use PDF::Reuse; prFile('combo.pdf'); # Output. for (qw/a b c d/) # Inputs. { prImage("result_$_.pdf"); prPage(); } prEnd();
Vous pouvez aussi utiliser une boîte à outils JAVA pour fusionner des images générées par IM dans un PDF, produisant un meilleur PDF qu'un PDF plus simple qu'IM générerait...
#!/bin/bash for x in ./*.jpeg do echo $x to ${x}.pdf magick $x -quality 75 ${x}.pdf done echo Merging... java tool.pdf.Merge *.pdf
Un autre utilisateur sur les forums de discussion IM a aussi suggéré d'utiliser PDFjam pour fusionner plusieurs pages PDF ensemble.
Format de fichier d'image PbmPlus / NetPBM : PBM PGM PPM PNM PAM
Les filtres de manipulation d'images PbmPlus ou « NetPBM » (ligne de commande unix). Ces formats d'image se déclinent en divers styles : « PBM » (bitmap), « PGM » (niveaux de gris), « PPM » (couleur), « PFM » (virgule flottante, pour HDRI), « PAM » (format arbitraire), et « PNM » (n'importe quel format NetPBM). Chacun d'eux (sauf « PAM » et « PFM ») peut aussi être soit sous une forme binaire « brute » (la valeur par défaut lors de l'écriture par IM comme par NetPBM), soit sous forme de texte ASCII simple (défini via « [-compress](https://imagemagick.org/command-line-options/#compress) None »). IM peut bien sûr les lire tous. Le format doit être considéré comme utilisant uniquement l'espace colorimétrique « linear-RGB », et NON le « sRGB » comme la plupart des autres formats de fichier d'image. Toutefois, une profondeur de 16 doit être utilisée avec le « linear-RGB », la prudence est donc recommandée pour éviter de lourdes erreurs d'arrondi avec des images de profondeur 8. Les formats NetPBM enregistrent généralement une seule image par fichier. Cependant, IM, ainsi que beaucoup d'autres utilitaires NetPBM, liront et écriront des fichiers contenant plusieurs images simplement concaténées les unes aux autres. À ce titre, lors de l'écriture d'images, il peut être judicieux de définir le réglage « [-/+adjoin](https://imagemagick.org/command-line-options/#adjoin) » approprié lors de l'écriture des fichiers. (Voir Writing Multiple Image Sequences pour les détails). Le format de fichier PPM est en réalité particulièrement important pour ImageMagick, car c'est le format de communication utilisé lors de la conversion des images Postscript et PDF via le délégué « ghostscript ». C'est aussi un format majeur pour le traitement d'images vidéo, tel que celui issu de la commande « ffmpeg ». N'importe quelle « qualité » ou plage de valeurs peut être utilisée en entrée (jusqu'à 16 bits ou une « profondeur » de 65535). Par exemple, voici une plage de valeurs très inhabituelle de 5, pour générer un « dégradé par paliers ». Je ne connais aucun autre format d'image qui vous permette d'utiliser une plage de qualité aussi biscornue. |
echo "P2 6 1 5 0 1 2 3 4 5" | \
magick - -scale 120x20 pgm_step_gradient.gif
![[IM Output]](../static/img/formats/pgm_step_gradient.gif)
Regardez aussi Resized Gradients où des images texte NetPBM sont utilisées pour créer de très petites images (2 à 4 pixels). Ce qui précède démontre aussi à quel point les sous-formats « ASCII » peuvent être utiles. Notamment comme moyen d'ajouter des images dans des scripts shell, ou comme moyen de générer des images à partir d'un tableau de nombres. Voir par exemple TXT: Enumerated Pixel Format. Un exemple de cet usage est montré dans les exemples de Histogram Redistribution Methodology.
PbmPlus/NetPBM face au format de données ASCII
Sa sortie ASCII est probablement la méthode la plus propre pour extraire les valeurs de couleur d'une image donnée, ce qui, là encore, la rend idéalement adaptée aux scripts et au traitement d'image simple.
magick -size 20x2 xc: +noise random -channel G -separate +channel \
-depth 16 -compress none pgm_random_values.pgm
Notez que lorsque la sortie est du texte simple, les lignes ne sont pas écrites de manière à s'aligner sur la longueur de ligne de l'image. Mais vous pouvez reformater la sortie à l'aide des divers utilitaires de texte UNIX. Par exemple, vous pouvez utiliser l'utilitaire de texte « tr » pour remplacer et compresser des virgules et des espaces multiples en un seul saut de ligne, ce qui placera toutes les valeurs une par ligne, facilitant leur traitement par un script. Par ailleurs, avec IM, vous ne pouvez spécifier qu'une « profondeur » de 8 ou 16 pour la qualité de sortie des formats PGM et PPM. Alors que les formats PbmPlus autorisent l'utilisation de n'importe quel « maxval » pour leurs valeurs, même une valeur qui n'est pas une puissance de deux ! Il existe toutefois une limite stricte à une profondeur de 16 bits (maxval 65535). Un contrôle plus fin du « maxval » réel de l'image NetPBM n'est actuellement pas possible, mais pourrait être ajouté via un réglage de codeur spécial à l'avenir (si la demande est faite). Voici un autre exemple, produisant un tableau 9x9 de valeurs en niveaux de gris de 0 à 255, extrait de l'image intégrée rose. J'ai utilisé « pnmtopnm -plain » pour obtenir un saut de ligne à la fin de chaque rangée de pixels.
magick rose:[9x9+0+0] -colorspace gray -transpose -depth 8 PGM:- |\
pnmtopnm -plain
Des variantes plus anciennes de cette commande NetPBM incluent « pnmnoraw » et « pnmtoplainpnm », pour faire la même chose que « pnmtopnm -plain ». Consultez la page de manuel de vos paquets NetPBM, car les développeurs ne semblent pas parvenir à se décider sur la façon dont cela devrait être fait. N'importe lequel de ces programmes PbmPlus produira un saut de ligne à la fin de chaque « rangée d'image », ce que le codeur d'ImageMagick ne fait pas. Cela peut rendre le traitement d'image dans les scripts bien plus facile. Voici un exemple produisant un tout petit bitmap PBM ASCII.
magick label:O pbm: | pnmtopnm -plain
Notez que les bitmaps PBM n'ont même pas besoin de produire des espaces entre les valeurs, bien qu'ils soient autorisés (IM en produit, les utilitaires PbmPlus non). Notez aussi que pour les bitmaps blanc='0' (arrière-plan) et noir='1' (premier plan). C'est une norme pour les formats de bitmaps tels que XBM et PBM, et ImageMagick comprend cette convention. Si cela n'est pas souhaitable, Negate l'image, ou utilisez Level Images by Color pour définir les couleurs voulues de l'image bitmap.
Contrôle de la profondeur PbmPlus/NetPBM
Parfois, vous voulez davantage de contrôle sur la profondeur des images PGM et PPM, par exemple pour utiliser une plage de valeurs en centiles de 0 à 99. Une méthode consiste à utiliser le programme NetPBM « pamdepth », qui peut convertir des images vers n'importe quelle plage (jusqu'aux limites internes de 65335). Voici par exemple un tableau de valeurs d'image, mais utilisant une plage de valeurs de sortie de 0 à 99.
magick -size 9x9 radial-gradient: -depth 16 PGM:- |\
pamdepth 99 | pnmtopnm -plain
Voici un autre exemple, mais utilisant cette fois l'opérateur Reversed Level pour définir la plage de valeurs de sortie. Cela peut vous donner davantage de contrôle sur la transformation des valeurs, mais le « maxval » de l'image PGM ne correspond pas à la valeur maximale de l'image.
magick -size 9x9 radial-gradient: +depth +level 0,99 PGM:- |\
pnmtopnm -plain
Le « [+depth](https://imagemagick.org/command-line-options/#depth) » dans la commande ci-dessus est essentiel pour régler la profondeur du fichier d'image à la même valeur que le niveau de qualité d'IM. Tout ce qu'il faut, c'est réinitialiser (ou ignorer) la troisième ligne à une valeur de « 99 », et éventuellement recompresser l'image vers un format d'image NetPBM binaire « brut ». Cependant, comme PbmPlus/NetPBM a une profondeur maximale de 65535 (16 bits), cela ne fonctionnerait que pour les versions IM Q8 ou Q16.
Commentaires PbmPlus/NetPBM
IM lira, écrira et préservera les lignes de « commentaire » dans l'en-tête du format de fichier PbmPlus/NetPBM. Par exemple...
magick -size 2x2 xc:grey -set comment "by Anthony" -compress none PGM:-
Cela dit, la plupart des applications, y compris PbmPlus lui-même, ignoreront ces commentaires, et les perdront même lorsqu'elles traitent le fichier.
magick -size 2x2 xc:grey -set comment "by Anthony" PGM:- | pnmtopnm -plain
PbmPlus/NetPBM contre ImageMagick
Le logiciel de traitement d'images PbmPlus/NetPBM fut jadis un rival d'ImageMagick pour le traitement d'images en ligne de commande, mais il repose sur une philosophie de filtrage en pipeline totalement différente (de plus bas niveau) pour la manipulation et le traitement des images. Cela le rend facile à utiliser dans des scripts shell, mais plus difficile à employer pour un traitement d'images général ou très complexe. Cela signifie aussi que l'image est convertie vers et depuis le format de fichier bien plus fréquemment, et nécessite généralement le recours à de nombreux fichiers temporaires. Les images PbmPlus/NetPBM ne gèrent généralement pas la transparence (bien que le format PAM, plus récent, le fasse), et ne fournissent pas de moyen général de transmettre les méta-données de l'image avec les données d'image. Tous les formats PbmPlus/NetPBM (comme le format interne d'ImageMagick, voir MIFF Image Streaming) peuvent gérer un flux de plusieurs images, simplement en concaténant ou en ajoutant les images les unes à la suite des autres. Cela le rend très bien adapté aux méthodes de traitement d'images en pipeline, par flux multi-images, comme pour le traitement vidéo. Attention toutefois : certains programmes PbmPlus/NetPBM ne traitent que des images uniques et ne géreront pas un flux de plusieurs images. Cependant, comme il est de plus bas niveau et antérieur à ImageMagick, il est souvent retenu pour les sorties d'images brutes telles que la sortie et la gestion d'images vidéo. Les images PbmPlus sont aussi plus souvent utilisées pour des données scientifiques, et à ce titre les images y sont généralement stockées dans l'espace colorimétrique 'linear-RGB' plutôt que dans l'espace non linéaire 'sRGB', plus courant. La prudence est de mise. Les deux paquets peuvent coexister, et il m'est arrivé d'utiliser une implémentation PbmPlus/NetPBM pour certaines choses, à la place d'ImageMagick. Typiquement lors d'un traitement d'images spécifique de bas niveau, ou pour scripter à partir de tableaux de valeurs stockés sous forme d'image. Les deux paquets fonctionnent bien ensemble, et je recommande d'installer et d'utiliser les deux pour un travail sérieux sur les images. | _J'ai en fait été celui qui a réalisé la publication cruciale du correctif de NetPBM en 1995, à une époque où peu de travail était consacré à ce logiciel. De ce fait, j'ai une bonne compréhension du logiciel PbmPlus et de son format de fichier image simple.
Depuis, il a été redéveloppé à plusieurs reprises par différentes personnes, et semble enfin être devenu un véritable projet open source. Les divers programmes paraissent gagner en maturité et commencent à mieux fonctionner ensemble.
Cependant, ses principaux problèmes — le manque de méta-données et la complexité — demeurent. Mais sa simplicité en tant que format de fichier est son plus grand atout, ce qui le rend idéal pour la manipulation d'images et de données à très bas niveau.
_
---|---
TIFF
Le format TIFF est le format propriétaire de PhotoShop. Cependant, il est tellement
surchargé de fonctionnalités, et a été modifié par presque toutes les applications
qui ont voulu l'utiliser, qu'aucun programme, pas même Photoshop, ne peut gérer TOUTES
ses variantes. Photoshop a néanmoins les meilleures chances de le lire.
Je vous conseille d'éviter le format de fichier image TIFF, sauf si vous travaillez
spécifiquement avec Photoshop, ou si l'application n'accepte aucun autre format de fichier
image mieux défini.
Je n'utilise ni le format de fichier image TIFF, ni Photoshop. Si vous utilisez abondamment ce format
avec IM, peut-être aimeriez-vous me soumettre vos observations,
pour les inclure ici. Vous aideriez ainsi vos semblables utilisateurs de TIFF.
Pour savoir si un logiciel donné peut lire un TIFF, tout ce que vous pouvez faire c'est essayer
et voir. C'est là, le problème de ce format.
TIFF et densité (résolution) dans photoshop...
Voir [Photoshop et la densité](basics.html#density_photoshop)
pour les détails et les solutions à ce problème
Conversion de JPEG vers TIFF...
magick image.jpg image.tif
Cela enregistrera soit l'image à l'intérieur du fichier TIFF en utilisant la compression JPEG
(héritée de l'entrée JPEG). Soit cela produira une erreur telle que...
Error: "JPEG compression support not configured"
Cela est dû au fait que la bibliothèque TIFF n'inclut pas la prise en charge de la compression JPEG.
Quoi qu'il en soit, C'EST MAUVAIS.
Vous pouvez contourner ce problème en modifiant le réglage pour utiliser un autre
algorithme de compression :
magick image.jpg -compress zip image.tif
magick image.jpg -compress lzw image.tif
magick image.jpg +compress image.tif
AVERTISSEMENT : -compress Group4 fonctionne avec un TIFF, mais UNIQUEMENT si vous retirez tous les
pixels transparents et semi-transparents de l'image. En général, vous pouvez
vous en assurer de la même façon que pour les images JPEG ci-dessus, avec
-background {color} -alpha remove
Voir [Suppression de la transparence des images](masking.html#remove)
juste avant l'enregistrement final (la première ne fonctionne que pour des images uniques).
Fichiers TIFF (et MIFF) en précision à virgule flottante (ajouté à IM v6.2.6-5)...
C'est particulièrement adapté au traitement d'images HDRI (qui utilise la virgule flottante
au sein même d'IM)
Pour la simple précision (float), utilisez...
-depth 32 -define quantum:format=floating-point
Pour la double précision (doubles), utilisez...
-depth 64 -define quantum:format=floating-point
Images TIFF 14 bits...
magick logo: -sharpen 0x1 -depth 14 logo.tif
tiffinfo logo.tif
Image Width: 640 Image Length: 480
Resolution: 72, 72 (unitless)
Bits/Sample: 14
Compression Scheme: LZW
Photometric Interpretation: RGB color
FillOrder: msb-to-lsb
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Rows/Strip: 2
Planar Configuration: single image plane
DocumentName: logo.tif
Software: ImageMagick 6.2.8 07/27/06 Q16 https://imagemagick.org
Images TIFF 12 bits...
Pour magick des images TIFF 16 bits en 12 bits :
magick image.tif -depth 12 image-12.tif
Images en noir et blanc pur...
magick image ... -type truecolor -type bilevel image.tiff
Produit des images normales et la plus petite taille de fichier, ainsi qu'un traitement
correct du noir/blanc dans Photoshop et Microsoft Windows Picture and Fax
Viewer.
[Discussion TIFF](https://magick.imagemagick.org/viewtopic.php?p=51723),
_[RQuadling](https://magick.imagemagick.org/memberlist.php?mode=viewprofile&u=7913)_.
Boutisme et ordre de remplissage (fill-order)
L'ordre dans lequel les valeurs de données TIFF sont stockées est contrôlé par
-endien Ordre global des octets
-define tiff:endian Boutisme du conteneur au format TIFF
-define tiff:fill-order Ordre des bits au sein d'un octet
Chacun accepte une valeur, soit MSB (défaut), soit LSB ; toutefois
« tiff:fill-order » prendra la valeur de « tiff:endian »
si celle-ci est définie, mais pas celle du boutisme global.
La propriété « tiff:endian » est le boutisme du conteneur d'image. La
propriété « -endian » est le boutisme des pixels de l'image. Ils peuvent différer.
Enregistrer un fichier au format TIFF avec une seule rangée par bande
-define tiff:rows-per-strip=1.
Pour enregistrer plus de rangées par bande, augmentez le nombre
-define tiff:rows-per-strip=8
Vous pouvez aussi spécifier l'ordre 'endian' pour les entiers binaires du format
-endian MSB -endian LSB
Pour des images TIFF plus petites (autrement que par la compression, vous pouvez aussi essayer
d'utiliser des options et réglages comme -depth 8 pour réduire la qualité des couleurs
ou -alpha off pour retirer le canal alpha ou de transparence de l'image.
IM enregistrera une image en niveaux de gris comme un TIFF en niveaux de gris, si aucune couleur
non grise n'est présente. Vous pouvez le forcer à enregistrer en non-niveaux-de-gris avec
-depth 8 -type TrueColor
Ajouté à IM 6.6.4-3
Permet de définir la méta-donnée (propriété) « Software Creation: »
à une valeur autre que « Image Magick 6.** »
-set tiff:software "My Software"
Windows Picture and Fax Viewer, Windows Explorer
Ceux-ci ne peuvent afficher que les TIFF dont l'interprétation photométrique
(Photometric Interpretation) prend certaines valeurs, telles que RGB. Options IM...
-compress LZW -type TrueColor
basculer l'interprétation photométrique (ajouté à IM 6.3.2-10)
-define quantum:polarity=min-is-black
-define quantum:polarity=min-is-white
TIFF multi-pages
Si vous voulez découper un TIFF multi-pages en pages distinctes, IM peut poser
problème car il utilisera encore beaucoup de mémoire pour conserver les pages précédentes
même si vous employez une commande comme...
magick "a.tif[i]" b%03d.tif
On peut considérer cela comme un bogue, ou peut-être une amélioration future.
La meilleure solution est peut-être le programme externe (hors IM) "tiffsplit".
TIFF et profils EXIF
Cristy a rapporté : la bibliothèque déléguée libtiff prend en charge le profil EXIF,
mais elle n'était pas fiable et provoquait trop souvent des erreurs ; nous avons donc mis en commentaire
l'appel.
Pour obtenir les attributs EXIF, essayez ceci.
magick identify -verbose -define tiff:exif=true image.tif
Le format TIFF peut contenir un masque bitmap sous la forme d'un chemin de détourage (clip path), que l'on peut activer avec l'opérateur « [-clip](https://imagemagick.org/command-line-options/#clip) ». Ce masque « clip » permet de masquer votre image selon ce chemin, ainsi...
magick image_clip.tif -clip \
...do_various_operations... \
+clip-mask image_masked.png
Voir Écrire ou détourer des masques pour plus de détails.
BMP, bitmap Windows
Le format d'image d'icônes du bureau Windows, BMP (abréviation de bit-mapped), est un
format d'image très peu commode qu'il vaut probablement mieux éviter si possible.
ImageMagick prend en charge les images BMP 8, 24 et 32 bits.
Ajoutez -colors 256 à la fin de votre ligne de commande (avant le nom du fichier
image de sortie) pour créer une image BMP 8 bits à palette indexée plutôt qu'un BMP 24
bits. Des couleurs supplémentaires peuvent être ajoutées aux images après des opérations
comme les rotations et le redimensionnement. Voir Color Quantization pour en savoir plus sur -color.
La présence de toute transparence détermine si le format BMP utilisé est 24 bits (RGB) ou 32
bits (RGBA). Vous pouvez employer "-alpha off" pour désactiver la transparence
d'une image.
Si toutes les couleurs sont en niveaux de gris, une image en niveaux de gris 'directcolor' est générée.
Je pense que -type truecolor empêche ce comportement.
Si vous avez un programme ancien incapable de lire les images BMP4 par défaut écrites par
ImageMagick (par exemple une image d'arrière-plan Windows), vous pouvez forcer la
génération d'une image au format BMP3 avec...
magick image BMP3:image.bmp
Ce format ne devrait comporter aucune transparence et devrait être une 'image imprimable',
quel que soit le sens de cette expression. Autrement dit, compatible 'Windows'.
Cependant, si un fichier PNG est utilisé en entrée et qu'il contient un chunk gAMA et cHRM
(informations de gamma et de chromaticité), l'un ou l'autre force "magick" à
écrire un BMP4. Pour obtenir un BMP3, vous devez vous débarrasser de ces informations. Une
solution consiste à faire transiter l'image par un format de fichier minimal 'ne contenant que
les données d'image' comme PPM, puis à la ré-enregistrer en BMP3. C'est brouillon, mais ça devrait marcher.
magick image.png ppm:- | magick - BMP3:image.bpm
IM ne peut pas produire de BMP à des profondeurs autres que 8. Toutefois, vous pouvez
utiliser la suite de traitement d'images NetPBM pour effectuer la conversion finale vers d'autres
profondeurs (cela nécessite au moins une version Q16 d'IM)...
magick image -alpha off -colors 16 ppm:- |\
pnmdepth 4 | ppm2bmp > image.bmp
Limitations du format....
L'en-tête d'un format BMP2: ne permet de décrire que la largeur, la
hauteur et la profondeur de bits (bits par pixel) d'une image. La profondeur de bits peut valoir
1, 4, 8 ou 24.
À titre de comparaison, le format bmp3: autorise des profondeurs de bits de 0, 1, 4, 8, 16, 24 et
32, et comporte des champs supplémentaires qui précisent les résolutions x et y (en pixels par mètre)
et la compression des données d'image.
ICO
Pour créer une image ICO multi-résolution, il suffit de créer toutes les tailles d'image
dont vous avez besoin et de les écrire toutes dans le même fichier ICO.
magick icon-16.bmp icon-32.bmp icon-64.bmp \
icon-128.bmp icon-256.bmp myicon.ico
Mise à jour
magick icon-256.png \
-define icon:auto-resize="256,128,96,64,48,32,16" \
myicon.ico
Vous pouvez désormais l'ajouter à vos pages web à l'aide de
<LINK REL="shortcut icon" HREF="myicon.ico">
Cependant, la plupart des navigateurs web acceptent désormais la plupart des formats d'image, pas seulement le
format ICO.
Formats d'images brutes d'appareil photo (CRW, CR2, NEF, X3F, etc.)
La plupart des appareils photo numériques, à l'exception du capteur Sigma Foveon et de certains appareils Sony, magick l'image produite par l'objectif en données numériques à l'aide de millions de capteurs qui détectent la luminosité d'une seule couleur précise, rouge, verte ou bleue. Pour que l'appareil réagisse à la couleur à peu près de la même manière que l'œil humain, on trouve deux fois plus de capteurs verts que de rouges ou de bleus, car notre œil est bien plus sensible à la lumière verte. Les capteurs sont disposés selon ce que l'on appelle une matrice de Bayer. Pour une description et des schémas de cette disposition, voir par exemple Understanding Digital Camera Sensors. La conversion des données d'une matrice de Bayer vers les pixels RVB plus familiers nécessite un processus appelé dématriçage (demosaicing). Une fois cette opération effectuée, nous n'avons toujours pas d'image digne d'être affichée. Même avec les pixels verts supplémentaires, le capteur de l'appareil ne perçoit toujours pas la couleur comme nous le faisons. Si vous prenez une feuille de papier blanc et que vous la regardez en plein soleil, puis que vous rentrez et la regardez sous un éclairage fluorescent, elle paraîtra blanche dans les deux cas. Mais si vous photographiez cette feuille dans ces mêmes conditions avec les réglages par défaut de l'appareil, le papier présentera des couleurs légèrement différentes une fois affiché à l'écran. La raison en est que, si le fond de notre rétine « voit » la même lumière réfléchie par le papier que l'appareil, notre cerveau interprète cette lumière pour nous et nous percevons le papier comme blanc. L'appareil se contente de mesurer la quantité de lumière rouge, verte et bleue réfléchie par le papier, et sous un éclairage fluorescent il y a plus de lumière bleue que sous la lumière du soleil ; le papier de cette image paraîtra donc plus bleu que celui pris au soleil. Pour produire des images montrant toutes deux une feuille de papier blanche, il faut qu'elles soient « balancées en blanc » (white balanced), ce que l'on appelle aussi équilibrage des gris ou équilibrage des couleurs. Pour en savoir plus sur la balance des blancs, voir Understanding White Balance Il reste encore d'autres aspects du fichier brut à traiter, comme le réglage d'un gamma correct, mais sans entrer dans plus de détails il est clair que le fichier brut nécessite beaucoup de traitement avant de pouvoir devenir une image visualisable sur un moniteur. Les fichiers bruts d'appareil photo sont souvent appelés négatifs numériques. Si vous prenez une photo et faites générer une image JPG par l'appareil, celui-ci aura effectué le dématriçage et tous les autres ajustements. Mais si, par exemple, vous avez oublié de régler la bonne balance des blancs dans l'appareil avant de prendre la photo, vous ne pourrez pas faire grand-chose avec le JPG pour corriger la situation, car une grande partie de l'information sur l'image d'origine a été perdue. Si, en revanche, vous aviez produit un fichier brut plutôt qu'un JPG, vous pouvez, lors de la conversion depuis le brut, choisir un réglage de balance des blancs particulier ainsi que d'autres paramètres, et si l'image obtenue ne convient pas vous pouvez revenir en arrière, modifier les réglages et magick à nouveau jusqu'à obtenir un résultat satisfaisant. C'est comparable à la possibilité de tirer plusieurs épreuves à partir de négatifs argentiques. Sans le négatif, vous ne pourriez pas obtenir un agrandissement 8x10 de l'un des instantanés 4x6 que vous récupérez au premier développement du film. Bien qu'ImageMagick sache gérer une grande variété de formats différents, il ne « sait » pas magick les fichiers bruts d'appareil photo ; IM utilise donc le programme "[dcraw](http://www.cybercom.net/~dcoffin/dcraw/)" comme programme délégué pour magick le fichier brut vers un format qu'il comprend, soit un TIFF (avec l'option '-T'), soit du PNM. Notez qu'il est conçu pour les images brutes d'appareil photo, et non pour celles issues, par exemple, d'un scanner. Le programme "[dcraw](http://www.cybercom.net/~dcoffin/dcraw/)" peut gérer un grand nombre de formats bruts différents, y compris ceux des appareils fabriqués par Canon, Fuji, Kodak, Nikon et Sony. Vous pouvez déterminer si "dcraw" reconnaîtra vos fichiers bruts en lui demandant d'identifier un échantillon. Par exemple la commande :
dcraw -i CRW_9641.CRW
Ce qui renvoie...
CRW_9641.CRW is a Canon EOS 10D image.
Lorsque IM appelle dcraw pour effectuer une conversion, via le délégué (que l'on peut lister avec "-list delegate"), il spécifie deux options qui influent sur le traitement de l'image :
dcraw -w -4 -O output_file input_file
L'option '-w' signifie que dcraw utilisera les informations de balance des blancs présentes dans le fichier brut si elles peuvent être trouvées. Si ces informations sont introuvables, dcraw utilisera une moyenne de l'ensemble de l'image comme base pour la balance des blancs. L'option '-4' signifie que dcraw se contentera de dématricer et d'équilibrer les blancs de la photo brute, et produira le résultat sous forme d'image linéaire 16 bits (48 bits par pixel), adaptée à la version Q16 par défaut d'IM. Comme '-w' et '-4' sont les deux seules options de traitement d'image spécifiées, dcraw appliquera certains réglages par défaut. L'espace colorimétrique de sortie sera le sRGB et aucun profilage ICC n'est effectué (sur mon système, dcraw a été compilé sans la bibliothèque LCMS et ne peut donc pas faire de profilage). Le fait que l'option '-4' soit activée signifie que de nombreuses étapes de traitement ont été omises, notamment l'ajustement des niveaux et la correction gamma, si bien que l'image résultante paraîtra sombre. L'idée est que l'utilisateur traitera l'image dans un éditeur d'images tel que « Photoshop » ou « Paint Shop Pro », voire « ImageMagick », et procédera lui-même à l'ajustement des niveaux, du gamma, et ainsi de suite. Dans ce cas, l'image doit être exportée vers un format prenant en charge 16 bits par couleur (par exemple TIFF). Notez que le simple fait que dcraw produise un fichier 16 bits ne signifie pas que les 16 bits contiennent tous des données utiles. Par exemple, une image brute d'un reflex numérique Canon 10D comporte 10 bits par couleur. Les appareils plus récents de Canon et d'autres fabricants offrent 14 bits par couleur. Si vous voulez que vos photos brutes soient converties intégralement, vous devrez retirer l'option '-4' afin que dcraw effectue le dématriçage, la balance des blancs, la correction de luminosité et de gamma, etc. Dans ce cas, dcraw produit un fichier 8 bits (24 bits par pixel). Si vous comptez traiter davantage cette image, il vaut mieux l'exporter en PNG et éviter les artefacts de compression JPEG. Le format JPEG ne devrait être employé que comme étape finale pour l'usage réel. En fait, il est toujours judicieux d'utiliser un format sans perte tel que PNG (ou le format interne MIFF d'IM) pour les étapes intermédiaires du traitement d'image. Un délégué DCRaw spécial peut être ajouté pour vous permettre de contrôler la façon dont vous lisez les formats d'images « brutes » d'appareil photo. Pour plus d'informations, consultez le site web de DCRaw, ainsi que le site du tutoriel DCRaw qui contient des informations sur bon nombre des options facultatives de dcraw, y compris des histogrammes d'images brutes selon divers réglages. Voir aussi DCRaw by Example. Les notes ci-dessus ont d'abord été extraites d'un sujet du forum IM Converting RAW images, par jhfry , avec d'importantes réécritures par el_supremo.
Films MPEG, M2V et AVI
IM n'est pas très efficace pour créer des films. Il fait le travail, mais
nécessite le programme externe "mpeg2encode" pour accomplir l'essentiel de la besogne.
Le problème est qu'IM n'est pas conçu pour gérer la vidéo, mais des images statiques ou
de petites séquences d'images. Cela ne veut pas dire qu'il en est incapable, mais ce
n'est pas son objectif. En particulier, il lit généralement toutes les images en mémoire
et les traite depuis celle-ci. Pour une vidéo volumineuse ou longue, ce n'est pas très
efficace.
Pour le traitement d'une petite séquence de trames, en revanche, il est vraiment
imbattable. De fait, à peu près tous les programmes de manipulation vidéo sous Linux utilisent
ImageMagick pour générer des titres, des transitions de scène élaborées et d'autres effets afin de
compléter la phase de post-production d'un développement vidéo plus vaste. Le
reste toutefois limité à de courtes séquences vidéo.
Voyons néanmoins ce qu'ImageMagick est capable de faire.
**Des images vers une vidéo**
Certains signalent que si les images n'ont pas le bon rapport d'aspect,
l'opération échoue sur les anciens lecteurs mpeg ; utiliser plutôt
l'extension MPEG II (m2v:).
Utiliser aussi m2v pour éviter la pixellisation due à la forte compression
qui peut apparaître avec...
magick *.jpg glacier.mpg
PAR EXEMPLE, utiliser plutôt...
magick *.jpg m2v:glacier.mpg
Noter qu'une animation volumineuse peut nécessiter beaucoup d'espace temporaire.
Il est possible d'indiquer un répertoire différent du /tmp habituel avec...
setenv MAGICK_TMPDIR /data
magick -limit memory 0 -limit map 0 *.jpg image.m2v
Alternatives...
Pour convertir des images PNG en flux vidéo MPEG2, au lieu de passer par des
fichiers MNG Multi-PNG, utiliser la délégation suivante...
png2yuv -j file%08d.png -I p -f 25 -b 1 | \
mpeg2enc -f 3 -q 3 -b 5000 -o out.m2v
Pour plus d'informations, voir [mjpeg.sf.net](http://mjpeg.sf.net/)
Les forums IM signalent de bons résultats avec un projet libre appelé « [ffmpeg](http://ffmpeg.org/) », qui semble être un paquet
d'installation linux assez répandu.
ffmpeg -f image2 -i %03d.jpg -vcodec mjpeg -y anim.mpg
Extraire un MVG avec un fond transparent
magick -background none -size 320x240 sample.mvg out.png
Michael Lenh a écrit...
J'ai enfin réussi à créer une très belle vidéo avec mplayer
mencoder "mf://data/p*.png" -mf fps=40 -o particle.avi -ovc lavc
Les résultats sont visibles sur...
http://www.mathematik.uni-ulm.de/~lehn/particle.avi
http://www.mathematik.uni-ulm.de/~lehn/temperature.avi
[mabu](https://magick.imagemagick.org/memberlist.php?mode=viewprofile&u=19117), dans une [discussion du forum IM](https://magick.imagemagick.org/viewtopic.php?f=1&t=18724), a conseillé
de « _UTILISER MENCODER, waouh c'est genre 1000 fois plus rapide et ça MARCHE vraiment_ »...
mencoder -nosound mf://*.jpg -mf w=800:h=371:type=jpg:fps=15 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2160000:mbd=2:keyint=132:v4mv:vqmin=3:lumi_mask=0.07:dark_mask=0.2:mpeg_quant:scplx_mask=0.1:tcplx_mask=0.1:naq -o output.mpg
Elle comporte sans doute des options superflues pour mon usage, mais elle produit
un bel accéléré à partir de fichiers .jpg.
Dean S. Messing utilise transcode...
find . -type f -name '*.png' | sort > filelist
transcode -x imlist,null\
--use_rgb\
-y raw,null\
-f 60\
-i filelist\
-g 4096x2160 \
-j 540,1024,540,1024\
-o video.avi\
-H 0
On peut omettre -j (fenêtre de découpe) si on le souhaite. -g est la taille de sortie.
Wolfgang Hugemann suggère une nouvelle alternative appelée « VirtualDub » sous
Windows Vista, qui permet de lancer une vidéo, ou magick directement à partir
d'un dossier d'images.
AVERTISSEMENT : « mplayer » n'apprécie apparemment pas les fichiers mpeg
ne comportant qu'une seule image. « ffplay » ne semble en revanche poser aucun problème.
**D'une vidéo vers des images**
« [mplayer](http://www.mplayerhq.hu/) » et
« mencode » sont tous deux plus efficaces qu'IM pour convertir une vidéo en une série
d'images. De plus, ils gèrent à peu près n'importe quel codec vidéo
(et audio) disponible.
Par exemple, pour extraire 5 images à 1 min 30 s d'une vidéo, mises à l'échelle
en 320x240, on peut utiliser...
mplayer file.mov -vf scale=320x240 -ss 01:30 -ao null \
-vo png:z=3 -frames 5
Parmi les autres alternatives figure la bibliothèque libre « [ffmpeg](http://ffmpeg.org/) », qui fait par ailleurs partie
de la gestion « [mplayer](http://www.mplayerhq.hu/) ».
MNG, Multiple-image Network Graphics
_Contribué parBarry Loo, issu de la discussion Example Ming Animation._MNG (prononcer « ming ») est un format ouvert fondé sur PNG, qui fournit une alternative animée en bitmap au GIF et à d'autres formats. Il gère la transparence (partielle et totale), la compression (avec et sans perte) et une profondeur de couleur allant jusqu'à 32 bits. C'est cette profondeur de couleur accrue qui distingue véritablement ce format des autres. Le GIF ne prend en charge que 256 couleurs au total, ce qui convient à de nombreux graphismes ; les photographies et les dégradés en pâtissent en revanche. La plupart des options d'animation utilisables pour créer des animations GIF le sont aussi pour créer des MNG. |
magick -size 101x101 radial-gradient: \
\( -clone 0 -level 00,100% +level-colors ,#F00 \) \
\( -clone 0 -level 10,100% +level-colors ,#F12 \) \
\( -clone 0 -level 20,100% +level-colors ,#F24 \) \
\( -clone 0 -level 30,100% +level-colors ,#F36 \) \
\( -clone 0 -level 40,100% +level-colors ,#F46 \) \
-delete 0 -duplicate 1,-2-1 -set delay 1x30 -loop 0 pulsing.mng
La commande ci-dessus génère une image en dégradé radial, ensuite clonée et ajustée pour créer une pulsation du rouge vers un rouge-orangé plus vif. Le résultat est alors dupliqué pour créer un cycle de patrouille inversé, avant de produire une animation MNG de 30 secondes en boucle. Malheureusement, la plupart des navigateurs Web ne prennent pas encore en charge le MNG, et de nombreux lecteurs vidéo n'affichent qu'un seul passage de l'animation en boucle. En cliquant sur l'image manquante ci-dessus, vous pouvez télécharger l'animation et la visionner avec la commande Animate d'IM. Pour plus d'informations sur le format MNG, consulter le site Web MNG.
DPX, Digital Picture Exchange Format
Ce format est utilisé dans l'industrie du cinéma et des effets spéciaux, qui exploite tout particulièrement ses informations d'en-tête étendues et sa souplesse à traiter une plage dynamique élevée ainsi que des valeurs colorimétriques logarithmiques à diverses profondeurs de bits, à l'aide de descriptions de pixels RGB ou YCbCr. Il s'appuie sur le format Cineon de Kodak — dont l'en-tête est plus spécifiquement orienté film — mais le supplante largement. Un exemple d'utilisation serait la numérisation de pellicule destinée à la post-production. Chaque image serait stockée dans un fichier .dpx individuel, allant de 2k (2048 pixels de large) à 8k (8192 pixels de large — pour les images IMAX), à raison de 8 à 64 bits par composante de couleur. Une séquence de ces fichiers pourrait ensuite être traitée avec un logiciel de compositing, en modifiant la couleur ou en ajoutant des effets visuels. Une fois le travail terminé, elle pourrait être enregistrée numériquement sur bande ou reportée sur pellicule. Les valeurs colorimétriques de chaque pixel sont souvent stockées de façon logarithmique (surtout si la séquence est destinée à être retransférée sur pellicule), ce qui reflète plus naturellement la densité selon laquelle l'information colorimétrique est enregistrée dans l'émulsion de la pellicule d'origine. Vus sans modification, les fichiers logarithmiques paraissent très peu contrastés et nécessitent donc une « table de correspondance » (look up table) pour convertir l'image logarithmique en quelque chose qui ressemble à ce que l'on verrait si l'image était retransférée sur pellicule et projetée en salle. Outre le fait de rendre l'image linéaire (comme la plupart des images informatiques classiques) et d'ajuster le niveau de gamma, cette table définit l'emplacement des points noir et blanc. Pour une image logarithmique en 10 bits, où chaque valeur de composante colorimétrique va de 0 à 1023, les points noir et blanc sont normalement fixés à 95 pour le noir et 685 pour le blanc. Cela signifie que le fichier logarithmique stocke des valeurs colorimétriques plus claires que ce que la version linéaire affichera comme blanc pur, et plus sombres que ce qu'elle affichera comme noir pur. Ces informations supplémentaires demeurent donc disponibles pour un artiste effets spéciaux qui souhaiterait modifier la luminosité de l'image après son enregistrement en fichier dpx. Par exemple, si ces informations avaient été perdues, réduire uniformément la luminosité d'une image assombrirait les hautes lumières, tandis qu'avec ces informations supplémentaires, les hautes lumières se réduisent au contraire en taille et commencent à révéler des détails auparavant trop clairs pour être visibles. Ce dernier comportement est bien plus proche de ce qui se passe dans le monde réel. L'en-tête peut contenir des données propres au cinéma et/ou à la télévision liées à une production. Par exemple, l'en-tête télévision peut contenir un time code SMPTE, afin que les plans exportés en séquence dpx depuis le montage d'une production puissent être facilement remplacés une fois les effets ajoutés. L'en-tête film conserve des informations sur la bobine de pellicule d'où proviennent les images ainsi que sur divers réglages de caméra utilisés lors du tournage. Tous ces détails accompagnent ensuite les images à mesure qu'elles circulent entre les sociétés de post-production.
Ajouter un time code aux fichiers DPX
Vous pouvez ajouter un time code à n'importe quel fichier dpx à l'aide de ceci :
magick -define dpx:television.time.code=10000215 \
originalFile.00001.dpx alteredFile.00001.dpx
Exécuter cette commande pour chacun des quelques milliers de fichiers qui composent une séquence de film ou d'animation prendrait à l'évidence très longtemps. Un script simple peut être utilisé avec ImageMagick pour incrémenter automatiquement le time code de chaque image d'une séquence. Voir par exemple le script Perl dpx_timecode.pl.
Une copie de ce qui précède a été ajoutée à la documentation principale d'IM, dans Introduction to Motion Picture Formats. Ce qui précède est fourni gracieusement par Seth Dubieniec
**Notes complémentaires (non mises en forme)...**
Ajouter -depth 10 fait produire à IM un fichier DPX 10 bits.
-- James Fancher
Pour définir le gamma, par exemple, dans l'image DPX de sortie...
-define dpx:television.gamma=1.7
L'espace colorimétrique de l'image DPX est défini par le descripteur d'élément d'image et
la caractéristique de transfert. Si la caractéristique de transfert est
PrintingDensityColorimetric, nous fixons l'espace colorimétrique à LogColorspace. Ce n'est que si
l'espace colorimétrique est Log que nous appliquons le gamma et les points noir/blanc pour convertir
vers l'espace colorimétrique RGB. Il est possible que le programme que vous utilisez ne soit pas
conforme à la norme SMPTE, ou qu'ImageMagick n'interprète pas
la norme correctement. Publiez une URL vers vos deux images DPX et nous les téléchargerons pour
tenter de déterminer si ImageMagick comporte un bogue ou si le programme que vous utilisez est
défectueux.
Ce qui suit fonctionne avec ImageMagick 6.3.8-3
magick -colorspace log AfterEffectsFile.dpx -set gamma 0.5 \
-set reference-black 95 -set reference-white 685 image.jpg
Vous pouvez aussi consulter la documentation SMTPE
-- Cristy
Vous pouvez ajouter des données utilisateur textuelles au fichier dpx en utilisant
magick image.dpx -set dpx:userdata "some text" new.dpx
-- Cristy
PSD
Un fichier image PSD est le format de fichier de travail de Photoshop, tout comme XCF est le format de fichier de travail de GIMP, et MIFF le format de fichier de travail propre à ImageMagick. Ils contiennent généralement plusieurs images, la première étant une fusion « tout-en-un » de l'image de travail courante. Cela le rend utile pour voir l'image de travail dans son état actuel, et sert typiquement à la génération de vignettes. Toutes les autres images du format multi-images sont celles qui servent à générer cette première image combinée. Autrement dit, les images de calques de travail individuels sur lesquels l'utilisateur travaillait au moment de l'enregistrement. Donc, si vous ne voulez que l'image « finale », je vous suggère d'ajouter un « '[0]' » au nom du fichier d'entrée pour ignorer les images de travail et n'utiliser que la première image tout-en-un. En revanche, si vous comptez travailler sur les images de calques individuelles, utilisez alors « '[1--1]' » pour sauter la première image. Si aucune image de calque supplémentaire n'est trouvée, c'est la première image qui est renvoyée à la place. Je déconseille FORTEMENT d'utiliser « -delete 0 », car cela ne renverrait aucune image du tout si aucune image de calque ne suit cette première image. Notes complémentaires... Si vous pouvez fournir davantage d'informations ou souhaitez soumettre un résumé de l'utilisation d'IM pour ce format, faites-le sans hésiter...
Pour un PSD contenant une image CMYK, il peut être nécessaire de faire utiliser à IM le
bon profil lors de la conversion (assurez-vous qu'IM a été installé avec la bibliothèque
de délégation LCMS) ....
magick Test_CMYK.psd -strip -profile USWebCoatedSWOP.icc \
-profile sRGB.icc Test_RGB.png
Voir [Profils](#profiles) ci-dessus pour plus d'informations.
Si une image PSD contient une image de « prévisualisation », celle-ci est renvoyée comme
dernière image d'une lecture à deux images.
Pour garantir qu'IM ne lit jamais la dernière image, utiliser...
magick test.psd[0--2] -flatten test.jpg
C'est-à-dire lire toutes les images, sauf la dernière. Mais toujours lire la première.
Ceci ne peut pas se faire après la lecture au moyen d'un « -delete ».
WMF
Autre format vectoriel souvent employé pour les cliparts redimensionnables utilisés par la suite de programmes Microsoft Office. L'entrée peut être mise à l'échelle en changeant la « [-density](https://imagemagick.org/command-line-options/#density) » avant la lecture de l'image. Voir aussi Formats d'image vectoriels.
Animations Flash (SWF)
Les animations Flash ne sont actuellement pas prises en charge par IM. Mais, pour être complet, Scott Bicknell signale que l'utilitaire SWF Tool « swfextract » permet d'extraire des images jpeg ou png d'une animation flash. Wolfgang Hugemann pense également que l'outil freeware Windows « IrfanView » pourrait aussi le faire. Cela m'a tout l'air d'un bon candidat à la délégation.
Conversion d'une page Web en image (HTML)
Si IM charge un fichier HTML, il cherche un html2ps pour convertir le html en postscript, qu'il peut ensuite rendre sous forme d'image. Cela ne fonctionne pas très bien, mais cela fonctionne. Utiliser un véritable navigateur Web est une bien meilleure méthode, puisqu'il est conçu pour accomplir cette tâche du mieux possible. La méthode la plus simple pour utiliser un navigateur consiste simplement à charger la page dans le navigateur puis à en faire une capture d'écran. On obtient ainsi une image parfaite de la page, mais limitée à la taille de la fenêtre du navigateur. Une autre variante consiste à faire produire par le navigateur la page en postscript plutôt que de la faire convertir par IM. Cela devrait paginer assez proprement le site en pages plus petites. Sous LINUX, vous pouvez démarrer un serveur d'affichage X virtuel suffisamment grand pour exécuter un navigateur affichant l'intégralité du site. L'affichage peut être TRÈS haut. Le navigateur y est alors exécuté et réglé pour remplir tout l'affichage. Le site est chargé et l'on en fait de nouveau une capture d'écran. J'ai vu un script capable d'automatiser tout ce processus complexe. Vous pouvez toutefois vous retrouver avec une image TRÈS longue. Il est aussi difficile de savoir quelle taille donner à l'affichage. En résumé, ce n'est PAS simple, et les meilleures solutions n'utilisent IM que pour le traitement final de l'image, et non pour la génération de l'image à partir du html.
Format d'impression PCL
Le PCL d'IM est par défaut du PCL version 6. Pour la version 5, il vous faut convertir votre image en noir et blanc. Par exemple...
magick image.png -monochrome image.pcl
Kodak PhotoCD ou ProPhotoCD (PCD)
Le fichier Kodak PhotoCD est un format d'image à résolutions multiples. Autrement dit, chaque fichier contient la même image à 6 tailles différentes, formant ce que l'on appelle une « image pyramidale ». La première image du fichier est la plus basse résolution (la plus petite taille) et la dernière la plus haute résolution (la plus grande taille, 3072×2048 pixels). Comme les utilisateurs veulent généralement l'image de plus haute résolution pour le traitement, la façon de convertir une image PCD vers un autre format comme le JPG consiste à extraire la sixième image (index 5) du fichier. Par exemple...
magick -colorspace RGB image.pcd[5] image.jpg
L'option « -colorspace RGB » est nécessaire pour obtenir les bonnes couleurs. Information fournie gracieusement par Wolfgang Hugemann
Données RGB et Gray brutes
Imagemagick dispose de quelques formats de fichier pour traiter les données d'image brutes, notamment « RGB: » et « GRAY: ». Il fournit également des réglages définissant ces données. Par exemple, pour produire des données RGB brutes...
magick image.jpg -depth 8 image.rgb
Le réglage « [-depth](https://imagemagick.org/command-line-options/#depth) » précise la taille des entiers écrits (et lus par la suite). Dans ce cas, des valeurs sur 8 bits avec 3 octets par pixel pour le RGB (une image 24 bits). Il est toujours recommandé d'indiquer une profondeur appropriée pour le traitement de données d'image brutes. Une « [-depth](https://imagemagick.org/command-line-options/#depth) » de 16 bits produira 2 octets par valeur, auquel cas vous pourriez aussi devoir préciser « [-endian](https://imagemagick.org/command-line-options/#endian) », c'est-à-dire l'ordre des octets, soit « MSB » (octet de poids fort en premier), soit « LSB » (octet de poids faible en premier, la valeur par défaut). Noter que le rgb ne contient purement que les données d'image ; il ne contient même pas la largeur ni la hauteur de l'image ! Certaines applications « supposent » que les données ont une taille précise, aussi pourriez-vous devoir recourir à IM pour vous assurer que les données ont bien cette taille. Par exemple, ceci redimensionne et complète l'image pour garantir une taille de 512x512 pixels.
magick image.jpg -resize \>512x512 \
-background black -gravity center -extent 512x512 \
-depth 8 image.rgb
Lors de la lecture de données RGB (ou GRAY) brutes dans ImageMagick, vous devrez indiquer la taille de l'image. Par exemple..
magick -size 512x512 -depth 8 image.rgb image.png
Ceci définira exactement la quantité de données qu'Imagemagick lira. Il arrive que les données brutes comportent des informations d'en-tête supplémentaires. Pour permettre à IM de passer ces informations, vous pouvez indiquer un « byte_offset » dans le réglage « [-size](https://imagemagick.org/command-line-options/#size) ». Par exemple, pour sauter un en-tête de 48 octets...
magick -size 512x512+48 -depth 8 image.rgb image.png
C'est le seul cas que je connaisse où IM exploite un troisième nombre dans le réglage « [-size](https://imagemagick.org/command-line-options/#size) ». Pour d'autres exemples d'utilisation de données d'image brutes (niveaux de gris), voir le sujet du forum de discussion IM How to convert raw image to compressed tif?.
Données en virgule flottante
Vous pouvez aussi lire (et écrire) du RGB à l'aide de nombres en virgule flottante normalisés.
Cela nécessite cependant l'usage de réglages -define de coder particuliers.
Voir les formats de fichier HDRI en virgule flottante
https://usage.imagemagick.org/basics/#hdri_formats
Image RGB en virgule flottante générée en code C (HDRI)...
float red = 1.0f;
float green = 1.0f; /* appropriate data */
float blue = 1.0f;
/* for exach pixel in image... */
fwrite (&red, sizeof(float), 1, file);
fwrite (&green, sizeof(float), 1, file);
fwrite (&blue, sizeof(float), 1, file);
Options de lecture....
magick -size 200x100 -depth 32 -define quantum:format=floating-point
-define quantum:scale=65536.0 -endian lsb input.rgb
output.png
Le quantum:format indique de lire des nombres en virgule flottante depuis le fichier.
Tandis que le -depth définit la taille du flottant (32 = floats, 64 = doubles).
Le quantum:scale définit comment mettre à l'échelle les nombres en virgule flottante,
des valeurs normalisées 0.0 à 1.0 vers les niveaux de qualité 16 bits en mémoire requis
par ma version Q16 d'IM.
![[IM Output]](../static/img/images/hand_point.gif)
![[IM Output]](../static/img/formats/hand_point.txt.gif)
![[IM Output]](../static/img/formats/hand_white.gif)
![[IM Output]](../static/img/formats/hand_white.txt.gif)
![[IM Output]](../static/img/formats/hand_flatten.gif)
![[IM Output]](../static/img/formats/hand_flatten.txt.gif)
![[IM Output]](../static/img/formats/hand_wheat.gif)
![[IM Output]](../static/img/formats/hand_wheat.txt.gif)
![[IM Output]](../static/img/formats/a_ordered_2x2.gif)
![[IM Output]](../static/img/formats/a_ordered_3x3.gif)
![[IM Output]](../static/img/formats/a_ordered_4x4.gif)
![[IM Output]](../static/img/formats/a_halftone_2.gif)
![[IM Output]](../static/img/formats/a_halftone_4.gif)
![[IM Output]](../static/img/formats/a_halftone_6.gif)
![[IM Output]](../static/img/formats/a_halftone_8.gif)
![[IM Output]](../static/img/formats/a_random_5x95.gif)
![[IM Output]](../static/img/formats/a_random_5x60.gif)
![[IM Output]](../static/img/formats/a_random_50x95.gif)
![[IM Output]](../static/img/formats/a_random_45x55.gif)
![[IM Output]](../static/img/formats/a_random_50x50.gif)
![[IM Output]](../static/img/formats/jpg_lossy_mag.gif)
![[IM Output]](../static/img/formats/jpg_lossy_tn.gif)
![[IM Output]](../static/img/formats/jpg_lossy_100_tn.gif)
![[IM Output]](../static/img/formats/jpg_lossy_80_tn.gif)
![[IM Output]](../static/img/formats/jpg_lossy_50_tn.gif)
![[IM Output]](../static/img/formats/jpg_lossy_20_tn.gif)
![[IM Output]](../static/img/formats/jpg_lossy_5_tn.gif)
![[IM Text]](../static/img/formats/jpg_ls_lossy.txt.gif)
![[IM Output]](../static/img/formats/a.jpg)
![[IM Output]](../static/img/formats/a_compress.txt.gif)
![[IM Output]](../static/img/formats/a_compress.png)
![[IM Output]](../static/img/formats/a_compress2.txt.gif)
![[IM Output]](../static/img/formats/a_compress2.png)
![[IM Text]](../static/img/formats/iptcData.pro.gif)
![[IM Text]](../static/img/formats/pgm_random_values.pgm.gif)
![[IM Text]](../static/img/formats/pgm_array.pgm.gif)
![[IM Text]](../static/img/formats/pbm_array.pbm.gif)
![[IM Text]](../static/img/formats/pgm_percent.pgm.gif)
![[IM Text]](../static/img/formats/pgm_percent_2.pgm.gif)
![[IM Text]](../static/img/formats/pgm_comment.pgm.gif)
![[IM Text]](../static/img/formats/pgm_comment_2.pgm.gif)