pam - Format bitmap 2D commun Netpbm
GÉNÉRAL
Le format d'image PAM est un format de carte 2D du dénominateur commun le plus bas.
Il est conçu pour être utilisé pour une myriade de types de graphiques, mais peut théoriquement être utilisé pour tout type de données disposées dans un tableau rectangulaire bidimensionnel. En fait, d'un autre point de vue, on peut le considérer comme un format pour des données disposées dans un tableau tridimensionnel.
Le nom "PAM" est un acronyme dérivé de "Portable Arbitrary Map" (Carte arbitraire portable). Cette dérivation prend plus de sens si l'on considère son contexte par rapport aux autres noms de formats Netpbm : PBM, PGM et PPM.
Ce format ne définit pas la signification des données à un point particulier du tableau. Il pourrait s'agir d'intensités de lumière rouge, verte et bleue telles que le tableau représente une image visuelle, ou il pourrait s'agir des mêmes composants rouge, vert et bleu plus un composant de transparence, ou il pourrait contenir les précipitations annuelles pour des endroits à la surface de la Terre. Tout processus qui utilise le format PAM doit définir davantage le format pour spécifier la signification des données.
Une image PAM décrit une grille bidimensionnelle de tuples. Les tuples sont disposés en rangées et en colonnes. La largeur de l'image est le nombre de colonnes. La hauteur de l'image est le nombre de rangées. Toutes les rangées ont la même largeur et toutes les colonnes ont la même hauteur. Les tuples peuvent avoir n'importe quel degré, mais tous les tuples ont le même degré. Le degré des tuples est appelé la profondeur de l'image. Chaque membre d'un tuple est appelé un échantillon. Un échantillon est un entier non signé qui représente un locus le long d'une échelle qui commence à zéro et se termine à une certaine valeur maximale appelée maxval. Le maxval est le même pour chaque échantillon de l'image. Le tableau bidimensionnel de tous les Nièmes échantillons de chaque tuple est appelé le Nième plan ou Nième canal de l'image.
Bien que le format de base n'attribue aucune signification aux valeurs des tuples, il inclut une chaîne facultative qui décrit cette signification. Le contenu de cette chaîne, appelé le type de tuple, est arbitraire du point de vue du format PAM de base, mais les utilisateurs du format peuvent lui attribuer une signification par convention afin qu'ils puissent identifier leurs implémentations particulières du format PAM. Certains types de tuples sont définis comme des sous-formats officiels de PAM. Voir Types de tuples définis.
L'univers déroutant des formats Netpbm
Il est facile de se sentir confus quant à la relation entre le format PAM et les formats PBM, PGM, PPM et PNM. Voici quelques éclaircissements :
"PNM" n'est pas vraiment un format. C'est un raccourci pour les formats PBM, PGM et PPM pris collectivement. C'est également le nom d'un groupe de fonctions de bibliothèque qui peuvent toutes gérer les trois formats.
« PAM » est en fait un quatrième format. Mais il est tellement général que vous pouvez représenter les mêmes informations dans une image PAM que dans une image PBM, PGM ou PPM. Et en fait, un programme conçu pour lire les formats PBM, PGM ou PPM et qui utilise une version récente de la bibliothèque Netpbm pourra lire une image PAM équivalente sans problème, et le programme ne s'en apercevra même pas.
Pour compliquer les choses, il existe un ensemble de routines de bibliothèque appelées les fonctions « pam » qui lisent et écrivent le format PAM, mais qui lisent et écrivent également les formats PBM, PGM et PPM. Ils le font parce que ces derniers formats sont beaucoup plus anciens et plus populaires, de sorte qu’un nouveau programme doit également être capable de les gérer. Le fait que la bibliothèque gère tous les formats permet d’écrire facilement des programmes qui utilisent également le nouveau format PAM.
LA STRUCTURE
Un moyen pratique de lire et d’écrire le format PAM avec précision consiste à utiliser la bibliothèque de sous-routines C libnetpbm(1).
Un fichier PAM est constitué d’une séquence d’une ou plusieurs images PAM. Il n’y a pas de données, de délimiteurs ou de remplissage avant, après ou entre les images.
Chaque image PAM est constituée d’un en-tête suivi immédiatement de la trame.
Voici un exemple d’en-tête :
P7
WIDTH 227
HEIGHT 149
DEPTH 3
MAXVAL 255
TUPLTYPE RGB
ENDHDR
L’en-tête commence par les caractères ASCII « P7 » suivis d’un saut de ligne. Il s’agit du nombre magique.
Remarque : les images miniatures xv commencent également par le nombre magique « P7 ». (PAM et ce format étaient des extensions indépendantes des formats Netpbm). Le reste du format permet de distinguer facilement PAM de ce format.
L’en-tête se poursuit avec un nombre arbitraire de lignes de texte ASCII. Chaque ligne se termine par un caractère de saut de ligne.
Chaque ligne d’en-tête est constituée de zéro ou plusieurs jetons délimités par des espaces, ou commence par « # ». Si elle commence par « # », il s’agit d’un commentaire et le reste de cette spécification ne s’y applique pas.
Une ligne d’en-tête qui ne contient aucun jeton est valide, mais n’a aucun sens.
Le type de ligne d’en-tête est identifié par son premier jeton, qui compte 8 caractères ou moins :
ENDHDR Il s’agit de la dernière ligne de l’en-tête. L’en-tête doit contenir exactement une de ces lignes d’en-tête.
HEIGHT Le deuxième jeton est un nombre décimal représentant la hauteur de l’image (nombre de lignes). L’en-tête doit contenir exactement une de ces lignes d’en-tête.
WIDTH Le deuxième jeton est un nombre décimal représentant la largeur de l’image (nombre de colonnes). L’en-tête doit contenir exactement une de ces lignes d’en-tête.
DEPTH Le deuxième jeton est un nombre décimal représentant la profondeur de l’image (nombre de plans ou de canaux). L’en-tête doit contenir exactement une de ces lignes d’en-tête.
MAXVAL Le deuxième jeton est un nombre décimal représentant la valeur maximale de l’image. L’en-tête doit contenir exactement une de ces lignes d’en-tête.
TUPLTYPE
L’en-tête peut contenir un nombre quelconque de ces lignes d’en-tête, y compris zéro. Le reste de la ligne fait partie du type de tuple. Le reste de la ligne n’est pas divisé en jetons, mais le type de tuple ne contient pas d’espace blanc immédiatement après le jeton TUPLTYPE ou à la fin de la ligne. Il ne contient pas non plus de saut de ligne. Il doit y avoir autre chose que de l’espace blanc après le jeton TUPLTYPE.
S’il existe plusieurs lignes d’en-tête TUPLTYPE, le type de tuple est la concaténation des valeurs de chacune d’entre elles, séparées par un seul espace, dans l’ordre dans lequel elles apparaissent dans l’en-tête. S’il n’y a pas de lignes d’en-tête TUPLTYPE, le type de tuple est une chaîne vide.
Le raster est constitué de chaque ligne de l’image, dans l’ordre, de haut en bas, consécutives, sans aucun délimiteur de quelque sorte que ce soit entre, avant ou après les lignes.
Chaque ligne est constituée de chaque tuple de la ligne, dans l’ordre, de gauche à droite, consécutifs, sans aucun délimiteur de quelque sorte que ce soit entre, avant ou après les tuples.
Chaque tuple est constitué de chaque échantillon du tuple, dans l’ordre, consécutifs, sans aucun délimiteur de quelque sorte que ce soit entre, avant ou après les échantillons.
Chaque échantillon est constitué d’un entier non signé au format binaire pur, avec l’octet de poids fort en premier. Le nombre d’octets est le nombre minimal d’octets requis pour représenter la valeur maximale de l’image.
Le caractère désigné sous le nom de « saut de ligne » ici est le caractère connu dans ASCII sous le nom de saut de ligne ou LF.
LIMITATIONS
La hauteur, la largeur, la profondeur et la valeur maximale sont au moins égales à 1.
La hauteur, la largeur et la profondeur n’ont pas de limite maximale définie, mais les processeurs et les générateurs d’images ont généralement leurs propres limitations.
La valeur maximale d’une image ne dépasse jamais 65 535. (La raison pour laquelle elle est limitée est de faciliter la création d’un processeur d’images, dans lequel les valeurs arithmétiques intermédiaires doivent souvent tenir dans 31 ou 32 bits). Il n’y avait pas de limitation spécifiée avant octobre 2005, mais toutes les implémentations l’ont toujours respectée.
TYPES DE TUPLES DÉFINIS
Certains types de tuples sont définis dans cette spécification afin de spécifier les sous-formats PAM officiels pour les applications les plus populaires du format. Les utilisateurs du format peuvent également définir leurs propres types de tuples et, par conséquent, leurs propres sous-formats.
Le type de tuple affecte uniquement la signification des échantillons (qui sont des entiers non signés) dans les tuples de l’image. Il n’affecte pas la façon dont les échantillons ou les tuples sont codés. Le type de tuple peut affecter la signification de la position d’un tuple dans la matrice (par exemple, il peut indiquer dans une image visuelle qu’un tuple dans la ligne 1 se trouve en haut de l’image plutôt qu’en bas).
Le type de tuple ne détermine jamais le nombre d’échantillons dans un tuple (c’est plutôt déterminé par la ligne d’en-tête DEPTH). On pourrait dire que le type de tuple implique une profondeur (nombre d’échantillons par tuple), car certains types de tuples ne sont valides qu’en combinaison avec certaines valeurs DEPTH, mais il est de bonne pratique d’utiliser DEPTH pour la profondeur lors du décodage du raster et de valider séparément que la profondeur est cohérente avec le type de tuple. Il est également de bonne pratique d’accepter une profondeur trop importante et de simplement ignorer les plans numérotés plus haut.
PAM utilisé pour les images visuelles
Une utilisation courante des images PAM est de représenter des images visuelles, comme celles qui sont généralement représentées par les images des formats PBM, PGM et PPM plus anciens et plus concrets.
Noir et blanc
Une image en noir et blanc, qui pourrait être représentée par une image PBM, a un type de tuple de « NOIRBLANC ». Une telle image PAM a une profondeur de 1 et une valeur maximale de 1, où la valeur unique dans chaque tuple est de 0 pour représenter un pixel noir et de 1 pour représenter un pixel blanc. La valeur maximale, la hauteur, la largeur et l’ordre des tuples dans la trame ont une relation évidente avec ceux de l’image PBM équivalente.
Notez que dans le format PBM, une valeur d’échantillon de zéro signifie blanc, mais dans PAM, zéro signifie noir.
Niveaux de gris
Une image en niveaux de gris, qui pourrait être représentée par une image PGM, a un type de tuple de « NIVEAUXDEGRIS ». Une telle image PAM a une profondeur de 1. La valeur maximale, la hauteur, la largeur et la trame ont une relation évidente avec ceux de l’image PGM équivalente.
Couleur
Une image couleur, qui pourrait être représentée par une image PPM, a un type de tuple de « RVB ». Une telle image PAM a une profondeur de 3. La valeur maximale, la hauteur, la largeur et la trame ont une relation évidente avec ceux de l’image PPM équivalente. Le premier plan représente le rouge, le deuxième le vert et le troisième le bleu.
Transparent
Chacun des formats d’image visuelle mentionnés ci-dessus a une variante qui contient des informations de transparence. Dans cette variante, le type de tuple a « \_ALPHA » ajouté (par exemple, « RVB\_ALPHA ») et un plan supplémentaire. Le plan le plus élevé est le plan d’opacité (parfois appelé plan alpha ou plan de transparence).
Dans ce type d’image, la couleur représentée par un pixel est en fait une combinaison d’une couleur de premier plan spécifiée explicitement et d’une couleur d’arrière-plan à identifier ultérieurement.
Les plans autres que le plan d’opacité décrivent la couleur de premier plan. Un échantillon dans le plan d’opacité indique dans quelle mesure le pixel est opaque, en indiquant quelle fraction de la lumière du pixel provient de la couleur de premier plan. Le reste de la lumière du pixel provient de la couleur d’arrière-plan (non spécifiée).
Par exemple, dans une image NIVEAUXDEGRIS\_ALPHA, supposons que le plan 0 indique un ton de gris à 60 % du blanc et que le plan 1 indique une opacité de 25 %. La couleur de premier plan est le gris à 60 %, et 25 % de celle-ci contribue à la couleur finale du pixel. Les 75 % restants proviennent d’une couleur d’arrière-plan. Supposons donc que la couleur d’arrière-plan du pixel est le blanc pur. La couleur du pixel est alors de 90 % du blanc : 25 % du gris de premier plan à 60 %, plus 75 % de l’arrière-plan à 100 %.
La valeur de l’échantillon est la fraction d’opacité telle que décrite, en tant que fraction de la valeur maximale. Notez que celle-ci n’est pas corrigée par gamma comme les échantillons de couleur de premier plan.
TYPE DE MÉDIA INTERNET
Aucun type de média Internet (également appelé type MIME, type de contenu) pour PAM n’a été enregistré auprès de l’IANA, mais la valeur non officielle image/x-portable-arbitrarymap est attribuée par cette spécification, afin d’être cohérent avec les valeurs conventionnelles pour les formats Netpbm plus anciens.
NOM DU FICHIER
L'extension conventionnelle pour le nom d'un fichier PAM est « .pam ». Mais ce n'est pas obligatoire.
VOIR AUSSI
Netpbm(1), pbm(1), pgm(1), ppm(1), pnm(1), libnetpbm(1)
SOURCE DU DOCUMENT
Cette page de manuel a été générée par l'outil Netpbm « makeman » à partir d'une source HTML. La documentation principale se trouve à l'adresse suivante :
http://netpbm.sourceforge.net/doc/pam.html