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

Format MIFF

En-tête MIFF • Données binaires MIFF

Le Magick Image File Format (MIFF) est le format indépendant de la plateforme propre à ImageMagick pour stocker des images bitmap. Il présente un avantage sur les autres formats d'image : il stocke toutes les métadonnées connues d'ImageMagick (par exemple les profils colorimétriques de l'image, les commentaires, l'auteur, le copyright, etc.), alors que d'autres formats ne prennent en charge qu'une petite partie des métadonnées disponibles, voire aucune. Un fichier image MIFF se compose de deux sections. La première section est un en-tête composé de clés décrivant l'image sous forme de texte. La section suivante est constituée des données binaires de l'image. Nous détaillons ces sections ci-dessous.

En-tête MIFF

L'en-tête MIFF est entièrement composé de caractères ISO-8859-1. Les champs de l'en-tête sont des combinaisons clé et valeur au format key = value, chaque clé et valeur étant séparées par un signe égal (=). Chaque combinaison key = value est délimitée par au moins un caractère de contrôle ou d'espacement. Des commentaires peuvent apparaître dans la section d'en-tête et sont toujours délimités par des accolades. L'en-tête MIFF se termine toujours par un caractère deux-points (:), suivi d'un caractère ctrl-Z. Il est également courant de faire précéder le deux-points d'un saut de page (formfeed) et d'un caractère de nouvelle ligne. Le saut de page empêche l'affichage des données binaires lors de l'utilisation du programme Linux more, tandis que le ctrl-Z a le même effet avec la commande type sur la ligne de commande Windows.

Voici une liste partielle des combinaisons key = value que l'on trouve généralement dans un fichier MIFF :

Clé Description
background-color = color
border-color = color
matte-color = color ces clés optionnelles reflètent respectivement les couleurs d'arrière-plan, de bordure et de matte de l'image. Une couleur peut être un nom (par exemple white) ou une valeur hexadécimale (par exemple #ccc).
class = le type de données de pixels binaires stockées dans le fichier MIFF. Si cette clé est absente, des données de pixels DirectClass sont supposées.
colors = value le nombre de couleurs dans une image DirectClass. Pour une image PseudoClass, cette clé spécifie le nombre d'entrées dans la palette de couleurs. Si cette clé est absente de l'en-tête et que l'image est PseudoClass, une palette de couleurs en niveaux de gris linéaire de 256 couleurs est supposée. Le nombre maximal d'entrées de palette de couleurs est 65536.
colorspace = l'espace colorimétrique des données de pixels. La valeur par défaut est RGB.
columns = value la largeur de l'image en pixels. C'est une clé obligatoire et elle n'a pas de valeur par défaut.
compression = le type d'algorithme utilisé pour compresser les données de l'image. Si cette clé est absente, les données de pixels sont supposées non compressées.
delay = microseconds le délai entre images d'une séquence d'images, en microsecondes.
depth = la profondeur d'une valeur de couleur unique représentant des valeurs de 0 à 255 (profondeur 8), de 0 à 65535 (profondeur 16), ou de 0 à 4294967295 (profondeur 32). Si cette clé est absente, une profondeur de 8 est supposée.
dispose = value méthode d'élimination de calque. Voici les valeurs valides : 0 = Aucune élimination spécifiée. 1 = Ne pas éliminer entre les images. 2 = Écraser l'image avec la couleur d'arrière-plan de l'en-tête. 3 = Écraser avec l'image précédente.
gamma = value le gamma de l'image. S'il n'est pas spécifié, un gamma de 1.0 (réponse de luminosité linéaire) est supposé.
id=ImageMagick identifie le fichier comme un fichier image au format MIFF. Cette clé est obligatoire, doit être la première paire clé-valeur, ne peut apparaître qu'une seule fois et n'a pas de valeur par défaut. Bien que cette clé puisse apparaître n'importe où dans l'en-tête, elle devrait commencer en tant que première clé de l'en-tête, dans la colonne 1. Cela permet à des programmes comme file(1) d'identifier facilement le fichier comme MIFF.
iterations = value le nombre de fois qu'une séquence d'images boucle avant de s'arrêter.
label = { string ] définit un titre court ou une légende pour l'image. Si un espace apparaît dans le label, il doit être encadré par des accolades.
matte = spécifie si l'image possède des données de matte. Les données de matte sont généralement utiles pour la composition d'images.
montage = x[+-][+-] taille et emplacement des tuiles individuelles d'une image composite. Utilisez cette clé lorsque l'image est une composition de plusieurs tuiles différentes. Une tuile se compose d'une image et, en option, d'une bordure et d'un label. Width est la taille en pixels de chaque tuile individuelle dans la direction horizontale et height est la taille dans la direction verticale. Chaque tuile doit avoir un nombre égal de pixels en largeur et un nombre égal en hauteur. Cependant, la largeur peut différer de la hauteur. X offset est le décalage en nombre de pixels depuis le bord vertical de l'image composite où commence la première tuile d'une rangée, et y offset est le décalage depuis le bord horizontal où commence la première tuile d'une colonne. Si cette clé est spécifiée, un répertoire de noms de tuiles doit suivre l'en-tête de l'image. Le format du répertoire est expliqué ci-dessous.
page = value taille et emplacement préférés d'un canevas d'image.
profile-icc = value le nombre d'octets dans le profil colorimétrique de l'International Color Consortium. Le profil est défini par la spécification de profil ICC située à http://www.color.org/icc_specs2.html.
red-primary = x,y
green-primary = x,y
blue-primary = x,y
white-point = x,y cette clé optionnelle reflète les primaires de chromaticité et le point blanc.
rendering-intent = L'intention de rendu est la propriété CSS-1 définie par l'International Color Consortium (http://www.color.org).
resolution = x résolution verticale et horizontale de l'image. Voir units pour les unités de résolution spécifiques (par exemple pixels par pouce).
rows = value la hauteur de l'image en pixels. C'est une clé obligatoire et elle n'a pas de valeur par défaut.
scene = value le numéro de séquence de ce fichier image MIFF. Cette clé optionnelle est utile lorsqu'un fichier image MIFF fait partie d'une série de fichiers utilisés dans une animation.
signature = value cette clé optionnelle contient une chaîne qui identifie de manière unique le contenu en pixels de l'image. L'algorithme de condensé de message SHA-256 du NIST est recommandé.
units = unités de résolution de l'image.

D'autres paires clé-valeur sont autorisées. Si une valeur contient un espace, elle doit être encadrée par des accolades, comme illustré ici :

id=ImageMagick
class=PseudoClass  colors=256  matte=False
columns=1280  rows=1024  depth=8
compression=RLE
colorspace=RGB
copyright={© 1999-2017 ImageMagick Studio LLC}
⋮

Notez que les combinaisons key = value peuvent être séparées par des nouvelles lignes ou des espaces et peuvent apparaître dans n'importe quel ordre au sein de l'en-tête. Les commentaires (entre accolades) peuvent apparaître n'importe où avant le deux-points.

Si vous spécifiez la clé montage dans l'en-tête, faites suivre l'en-tête d'un répertoire de tuiles d'image. Ce répertoire se compose d'un nom pour chaque tuile de l'image composite, séparés par un caractère de nouvelle ligne. La liste est terminée par un caractère NULL.

Si vous spécifiez la clé color-profile dans l'en-tête, faites suivre l'en-tête (ou le répertoire de montage si la clé montage est présente dans l'en-tête) du profil colorimétrique binaire.

L'en-tête est séparé des données de l'image par un caractère : immédiatement suivi d'une nouvelle ligne.

Données binaires MIFF

Viennent ensuite les données binaires de l'image elles-mêmes. La manière dont les données de l'image sont formatées dépend de la classe de l'image telle que spécifiée (ou non spécifiée) par la valeur de la clé class dans l'en-tête.

Les images DirectClass sont des images à tons continus, stockées sous forme de valeurs d'intensité RGB (rouge, vert, bleu), RGBA (rouge, vert, bleu, alpha), CMYK (cyan, jaune, magenta, noir) ou CMYKA (cyan, jaune, magenta, noir, alpha) telles que définies par la clé colorspace. Chaque valeur d'intensité occupe un octet pour les images de profondeur 8 (0..255), deux octets pour une profondeur de 16 (0..65535), et les images de profondeur 32 (0..4294967295) nécessitent quatre octets dans l'ordre de l'octet le plus significatif en premier.

Les images PseudoClass sont des images RGB à palette de couleurs. La palette de couleurs est stockée sous forme d'une série de valeurs de pixels rouge, vert et bleu, chaque valeur occupant un octet. Si la profondeur de l'image est 16, chaque entrée de palette consomme deux octets, l'octet le plus significatif étant le premier. Le nombre d'entrées de palette est défini par la clé colors. Les données de la palette de couleurs apparaissent immédiatement après l'en-tête (ou le répertoire d'images si la clé montage est présente dans l'en-tête). Les données d'image PseudoClass sont un tableau de valeurs d'index dans la palette de couleurs. S'il y a 256 couleurs ou moins dans l'image, chaque octet de données d'image contient une valeur d'index. Si l'image contient plus de 256 couleurs ou si la profondeur de l'image est 16, la valeur d'index est stockée sous forme de deux octets contigus, l'octet le plus significatif étant le premier. Si matte est true, chaque index de palette est suivi d'une valeur alpha de 1 ou 2 octets.

Les données de pixels de l'image dans un fichier MIFF peuvent être non compressées, codées en longueur de plage (runlength), compressées en Zip ou compressées en BZip. La clé compression dans l'en-tête définit la manière dont les données de l'image sont compressées. Les pixels non compressés sont stockés une ligne de balayage à la fois, dans l'ordre des rangées. La compression par codage en longueur de plage compte les suites de pixels adjacents identiques et stocke les pixels suivis d'un octet de longueur (le nombre de pixels identiques moins 1). Les compressions Zip et BZip compressent chaque rangée d'une image et font précéder la rangée compressée de la longueur des octets de pixels compressés sous forme d'un mot dans l'ordre de l'octet le plus significatif en premier.

Les fichiers MIFF peuvent contenir plus d'une image. Il suffit de concaténer chaque image individuelle (composée d'un en-tête et de données d'image) dans un seul fichier.