Netpbm - Netpbm

Netpbm
Développeur(s) Jef Poskanzer , Bryan Henderson, Akira F Urushibata
Première version 1988 ; il y a 33 ans ( 1988 )
Version stable
10.47.61 / 9 mai 2016 ; il y a 5 ans ( 2016-05-09 )
Dépôt Modifiez ceci sur Wikidata
Écrit en C , Perl , Unix Shell
Système opérateur Multiplateforme
Licence Divers, censé être sans DFSG
Site Internet netpbm .sourceforge .net Modifiez ceci sur Wikidata

Netpbm (anciennement Pbmplus) est un package open source de programmes graphiques et une bibliothèque de programmation. Il est principalement utilisé dans le monde Unix , où l'on peut le trouver inclus dans toutes les principales distributions de systèmes d'exploitation open source , mais fonctionne également sur Microsoft Windows , macOS et d'autres systèmes d'exploitation.

Formats de fichiers

Pixmap portable
Extension de nom de fichier
.pbm, .pgm, .ppm, .pnm
Type de média Internet
image/x-portable-bitmap, image/x-portable-graymap, image/x-portable-pixmap, image/x-portable-anymap
Identificateur de type uniforme (UTI) public.pbm
Développé par Jef Poskanzer
Type de format Formats de fichier image
Prolongé à Carte arbitraire portable (PAM)
Format ouvert ? Oui

Plusieurs formats graphiques sont utilisés et définis par le projet Netpbm. Le format portable pixmap ( PPM ), le format portable graymap ( PGM ) et le format portable bitmap ( PBM ) sont des formats de fichiers d'images conçus pour être facilement échangés entre les plateformes. Ils sont également parfois désignés collectivement sous le nom de format portable anymap ( PNM ), à ne pas confondre avec le format portable arbitraire de carte (PAM) associé . Le "numéro magique" (Px) au début d'un fichier détermine le type, pas l'extension du fichier, bien qu'il soit préférable d'utiliser la bonne extension si possible.

Le format PBM a été inventé par Jef Poskanzer dans les années 1980 en tant que format qui permettait de transmettre des bitmaps monochromes dans un message électronique sous forme de texte ASCII brut, lui permettant de survivre à tout changement de formatage du texte. Poskanzer a développé la première bibliothèque d'outils pour gérer le format PBM, Pbmplus, sorti en 1988. Il contenait principalement des outils pour convertir entre PBM et d'autres formats graphiques. Fin 1988, Poskanzer avait développé les formats PGM et PPM ainsi que leurs outils associés et les avait ajoutés à Pbmplus. La version finale de Pbmplus date du 10 décembre 1991.

En 1993, la bibliothèque Netpbm a été développée pour remplacer le Pbmplus non maintenu. Il s'agissait simplement d'un reconditionnement de Pbmplus avec des ajouts et des correctifs soumis par des personnes du monde entier.

La description

Chaque fichier commence par un nombre magique à deux octets (en ASCII) qui identifie le type de fichier (PBM, PGM et PPM) et son codage ( ASCII /"plain" ou binaire/"raw"). Le nombre magique est un P majuscule suivi d'un nombre à un chiffre.

Taper nombre magique Extension Couleurs
ASCII (ordinaire) Binaire (brut)
BitMap portable P1 P4 .pbm 0–1 (blanc et noir)
GrayMap portable P2 P5 .pgm 0 à 255 (échelle de gris), 0 à 65535 (échelle de gris), variable, plage de noir à blanc
PixMap portable P3 P6 .ppm 16 777 216 (0-255 pour chaque canal RVB ), une certaine prise en charge de 0-65535 par canal

Une valeur de P7fait référence au format de fichier PAM qui est également couvert par la bibliothèque netpbm.

Les formats ASCII (« plain ») permettent une lisibilité humaine et un transfert facile vers d'autres plates-formes ; les formats binaires (" bruts ") sont plus efficaces en taille de fichier mais peuvent avoir des problèmes d'ordre des octets natifs.

Dans les formats binaires, PBM utilise 1 bit par pixel, PGM utilise 8 ou 16 bits par pixel et PPM utilise 24 bits par pixel : 8 pour le rouge, 8 pour le vert, 8 pour le bleu. Certains lecteurs et écrivains peuvent prendre en charge 48 bits par pixel (16 chacun pour R, V, B), mais cela reste rare.

Classiquement, PGM stocke les valeurs dans un espace colorimétrique linéaire , mais selon l'application, il utilise souvent une représentation sRGB ou gamma simplifiée . Les données du fichier ne stockent pas d'informations sur l'espace colorimétrique utilisé et doivent être choisies par l'utilisateur ou un autre logiciel. Le PGM 16 bits est presque toujours stocké sous forme linéaire, car la correction gamma n'est généralement avantageuse que dans les formats 8 bits.

Habituellement, le format PPM 8 bits stocke les couleurs dans un format non linéaire, conventionnellement CIE Rec. 709 pour le rouge, le vert et le bleu, ajusté par la Rec. CIE. 709 fonction de transfert gamma. Cependant, il est très courant de stocker la couleur en utilisant l'espace colorimétrique sRGB, ou parfois en utilisant l' espace colorimétrique linéaire . Il n'y a pas de métadonnées dans le fichier pour indiquer quel format est utilisé.

Exemple de PBM

Un exemple simple du format PBM est le suivant (il y a un caractère de nouvelle ligne à la fin de chaque ligne) :

P1
# This is an example bitmap of the letter "J"
6 10
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
0 0 0 0 1 0
1 0 0 0 1 0
0 1 1 1 0 0
0 0 0 0 0 0
0 0 0 0 0 0

La chaîne P1 identifie le format de fichier. Le signe dièse introduit un commentaire. Les deux chiffres suivants donnent la largeur et la hauteur. Suit ensuite la matrice avec les valeurs des pixels (dans le cas monochrome ici, uniquement des zéros et des uns).

Il n'est pas nécessaire que les pixels soient bien alignés, le format ignore les espaces et les sauts de ligne dans la section des données, bien qu'il soit recommandé qu'aucune ligne ne dépasse 76 caractères. Ce qui suit affiche la même image :

P1
# This is an example bitmap of the letter "J"
6 10
000010000010000010000010000010000010100010011100000000000000

Voici l'image résultante :

Exemple d'art ASCII transformé en bitmap.pbm.png

La voici encore agrandie 20 fois :

Exemple d'art ASCII transformé en bitmap scale20.pbm.png

Notez qu'un 0 signifie un pixel blanc et un 1 signifie un pixel noir. Cela contraste avec les autres formats, où des valeurs plus élevées signifient des pixels plus lumineux.

Le format binaire P4 de la même image représente chaque pixel avec un seul bit, avec 8 pixels par octet, le premier pixel étant le bit le plus significatif. Des bits supplémentaires sont ajoutés à la fin de chaque ligne pour remplir un octet entier.

Exemple de PGM

Les formats PGM et PPM (versions ASCII et binaires) ont un paramètre supplémentaire pour la valeur maximale (nombre de gris entre le noir et le blanc) après les dimensions X et Y et avant les données de pixels réelles. Le noir est 0 et la valeur max est le blanc. Il y a un caractère de nouvelle ligne à la fin de chaque ligne.

Image
Exemple (agrandi)
P2
# Shows the word "FEEP" (example from Netpbm man page on PGM)
24 7
15
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
0  3  3  3  3  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15 15 15 15  0
0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0 15  0
0  3  3  3  0  0  0  7  7  7  0  0  0 11 11 11  0  0  0 15 15 15 15  0
0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0  0  0
0  3  0  0  0  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

Exemple de PPM

Ceci est un exemple d'image RVB couleur stockée au format PPM. Il y a un caractère de nouvelle ligne à la fin de chaque ligne.

Image
Image (agrandie)
P3           # "P3" means this is a RGB color image in ASCII
3 2          # "3 2" is the width and height of the image in pixels
255          # "255" is the maximum value for each color
# The part above is the header
# The part below is the image data: RGB triplets
255   0   0  # red
  0 255   0  # green
  0   0 255  # blue
255 255   0  # yellow
255 255 255  # white
  0   0   0  # black

Le format binaire P6 d'une même image représente chaque composante couleur de chaque pixel avec un octet (donc trois octets par pixel) dans l'ordre rouge, vert, puis bleu. Le fichier est plus petit, mais les informations de couleur sont difficiles à lire par les humains. L'en-tête reste en ASCII et les arguments sont toujours séparés par un espace. Les informations binaires de l'image viennent après l'en-tête (qui se termine par un espace).

Le format PPM n'est pas compressé et nécessite donc plus d'espace et de bande passante qu'un format compressé. Par exemple, l'image ci-dessus 192 × 128 PNG ( Portable Network Graphics ) a une taille de fichier de 166 octets. Lorsqu'il est converti en une image 192 × 128 PPM, la taille du fichier est de 73 848 octets. Le format PPM est généralement un format intermédiaire utilisé pour le travail de l'image avant la conversion vers un format plus performant, par exemple le format PNG, sans aucune perte d'informations dans l'étape intermédiaire.

L'image présentée ci - dessus en utilisant seulement 0 ou la valeur maximale de la r ed- g reen- b canaux de Lue peuvent également être codés sous la forme:

P3
# The same image with width 3 and height 2,
# using 0 or 1 per color (red, green, blue)
3 2 1
1 0 0   0 1 0   0 0 1
1 1 0   1 1 1   0 0 0

L'espace blanc comprenant les fins de ligne et les lignes de commentaire est syntaxiquement équivalent à un seul espace dans les en-têtes PNM. Pour les formats simples P1...P3, cela affecte également les lignes de pixmap ; en fait les lignes doivent être limitées à 70 caractères :

P3 3 2 1  1 0 0   0 1 0   0 0 1  1 1 0   1 1 1   0 0 0

extensions 16 bits

La définition originale des formats binaires PGM et PPM (les formats P5 et P6) n'autorisait pas des profondeurs de bits supérieures à 8 bits. Bien que le format ASCII puisse accepter des profondeurs de bits plus importantes, il augmente la taille du fichier et ralentit ainsi les opérations de lecture et d'écriture. En conséquence, de nombreux programmeurs ont étendu le format pour permettre des profondeurs de bits plus élevées. L'utilisation de profondeurs de bits plus élevées se heurte au problème d'avoir à décider du caractère endian du fichier. Les différentes implémentations n'ont pas pu s'entendre sur l'ordre des octets à utiliser, et certaines ont connecté l'extrémité de 16 bits à l'ordre d'emballage des pixels. Dans Netpbm, l' implémentation standard de facto des formats PNM, l'octet le plus significatif est le premier.

extensions 32 bits

Le PFM (Portable Floatmap) est l'extension non officielle à virgule flottante simple précision IEEE 754 à quatre octets. Un fichier couleur est identifié par le texte ASCII "PF" dans la première ligne de l'en-tête et une échelle de gris par "Pf". La ligne de texte ASCII suivante contient la largeur et la hauteur, séparées par le caractère espace hexadécimal 20 et parfois par hexadécimal 0A (résultant en quatre lignes). Après chaque ligne, un espace blanc hexadécimal 0A est écrit et non la combinaison Windows/DOS CR/LF. La troisième ligne de texte ASCII contient un nombre décimal différent de zéro qui indique les flottants little-endian pour les données de pixels lorsqu'ils sont négatifs et les flottants big-endian lorsqu'ils sont positifs. La valeur absolue du nombre indique la plage. Ainsi, la troisième ligne contenant -1.0 indique le format little-endian dans la plage zéro à un. Il n'y a pas de commentaires. Après l'en-tête, le fichier continue avec des nombres à virgule flottante pour chaque pixel, spécifiés de gauche à droite, de bas en haut. Certains programmes suggèrent PF4 comme extension supplémentaire pour le format RGBA.

Il est pris en charge par les programmes Photoshop , GIMP et ImageMagick .

Programmes

Netpbm contient plus de 220 programmes distincts dans le package, dont la plupart ont "pbm", "pgm", "ppm", "pam" ou "pnm" dans leurs noms. Par exemple, on peut utiliser pamscale pour réduire une image de 10%, pamcomp pour superposer une image sur une autre, pbmtext pour créer une image de texte ou réduire le nombre de couleurs dans une image avec pnmquant .

Les programmes sont conçus pour être des blocs de construction minimaux qui peuvent être utilisés dans diverses combinaisons pour faire d'autres choses. Le package Netpbm peut par exemple utiliser deux programmes de conversion successifs pour transformer une image au format PBM en un fichier .bmp :

pgmtoppm "#FFFFFF" somepic.pbm  > somepic.ppm
ppmtobmp somepic.ppm > somepic.bmp

Cela se fait plus généralement sous forme de pipeline , pour gagner du temps d'exécution et éviter de laisser un fichier temporaire somepic.ppm autour :

pgmtoppm "#FFFFFF" somepic.pbm | ppmtobmp > somepic.bmp

Les programmes Netpbm sont fréquemment utilisés comme intermédiaires pour convertir entre des formats obscurs. Par exemple, il peut n'y avoir aucun outil pour convertir un dump de fenêtre X11 ( format XWD ) directement en un fichier PICT Macintosh , mais on peut le faire en exécutant xwdtopnm , puis ppmtopict . (Les outils qui disent qu'ils produisent une sortie PNM soit PBM, PGM ou PPM. Les outils important PNM liront n'importe lequel des trois formats.) Comme exemple plus complexe, les outils Netpbm peuvent convertir 48×48 XBM en Ikon et éventuellement X-Face .

Histoire

Le format PBM (noir et blanc) a été inventé par Jef Poskanzer au milieu des années 1980. À l'époque, il n'existait aucun moyen standard et fiable d'envoyer des fichiers binaires par courrier électronique, et tenter d'envoyer autre chose que de l' ASCII 7 bits dans un courrier électronique entraînait souvent une corruption des données . PBM a été conçu pour permettre l'envoi d'images par e-mail sans être corrompues. Poskanzer a sorti le précurseur de Netpbm, appelé Pbmplus en 1988. À la fin de 1988, Poskanzer avait développé les formats PGM (niveaux de gris) et PPM (couleur) et les avait publiés avec Pbmplus.

La dernière version de Pbmplus date du 10 décembre 1991. Poskanzer n'a jamais publié d'autres mises à jour, et en 1993, Netpbm a été développé pour le remplacer. Au début, ce n'était rien de plus qu'une version renommée de Pbmplus, mais des mises à jour ont continué jusqu'en 1995, date à laquelle le paquet a de nouveau été abandonné. En 1999, le paquet Netpbm a été récupéré par son mainteneur actuel, Bryan Henderson.

En 2000, PAM a été ajouté aux formats de fichiers de la bibliothèque Netpbm permettant un canal alpha.

Le nom Netpbm vient des développeurs de programmes collaborant sur Internet , ce qui était remarquable à l'époque ; le système d'exploitation NetBSD et le jeu NetHack portent leurs noms de la même manière. (Contrairement au format PNG ( Portable Network Graphics ) plus répandu , le "net" dans le nom ne fait pas réellement référence à l'image elle-même optimisée pour le transfert sur un réseau.)

Format graphique PAM

Carte arbitraire portable
Extension de nom de fichier
.pam
Type de média Internet
image/x-portable-arbitrarymap
Développé par Bryan Henderson
Type de format Formats de fichier image
Prolongé de Portable n'importe quelle carte (PNM)
Format ouvert ? Oui

Portable Arbitrary Map ( PAM ) est une extension des anciens formats graphiques binaires P4...P6 . PAM généralise toutes les fonctionnalités de PBM, PGM et PPM, et fournit des extensions. PAM définit deux nouveaux attributs ; profondeur et type de tuple :

  1. L' attribut de profondeur définit le nombre de canaux dans l'image, par exemple 1 pour les images en niveaux de gris et 3 pour les images RVB.
  2. L' attribut tuple type spécifie quel type d'image le fichier PAM représente, lui permettant ainsi de représenter les anciens formats Netpbm, ainsi que d'être étendu à de nouvelles utilisations, par exemple, la transparence .

PAM est pris en charge par XnView et FFmpeg . Comme spécifié, le TUPLTYPEest facultatif ; cependant, FFmpeg l'exige.

Différences avec les anciens formats

L'en-tête du format de fichier PAM commence par P7 et (contrairement aux autres formats) se termine par une fermeture explicite : ENDHDR. Les fins de ligne dans un en-tête PAM sont significatives ; pour PNM, les fins de ligne sont des espaces blancs.

Il n'y a pas de version simple (lisible par l'homme, basée sur ASCII ) de PAM. Les fichiers PAM sont toujours binaires et les tentatives d'utilisation du commutateur -plainavec les programmes Netpbm qui produisent une sortie PAM entraînent un message d'erreur.

Pour la version noir et blanc de PAM (profondeur 1, type de tuple BLACKANDWHITE), correspondant à PBM, PAM utilise un octet par pixel, au lieu d'utiliser un bit par pixel par PBM (contenant huit pixels dans un octet). De plus, la valeur 1 dans une telle image PAM signifie blanc ("lumière allumée"), par opposition au noir dans PBM ("encre allumée").

Types de tuples PAM
TUPLTYPE MAXVAL PROFONDEUR commenter
NOIR ET BLANC 1 1 cas particulier des NIVEAUX DE GRIS
ÉCHELLE DE GRIS 2...65535 1 2 octets par pixel pour MAXVAL > 255
RVB 1...65535 3 6 octets par pixel pour MAXVAL > 255
NOIR ET BLANC_ALPHA 1 2 2 octets par pixel
GRAYSCALE_ALPHA 2...65535 2 4 octets par pixel pour MAXVAL > 255
RVB_ALPHA 1...65535 4 8 octets par pixel pour MAXVAL > 255

Transparence

Tous les types de tuple de base (BLACKANDWHITE, GRAYSCALE et RGB) ont une variante avec un canal d'opacité . Le type de tuple est créé en ajoutant "_ALPHA" comme suffixe au type de tuple de base.

Par exemple, une image avec un type de tuple de GRAYSCALE est équivalente à PGM (portable graymap). GRAYSCALE_ALPHA avec transparence n'est pas directement possible dans PGM. La spécification autorise MAXVAL 1 pour GRAYSCALE, mais cela aurait le même effet que BLACKANDWHITE.

Un exemple dans l' article BMP montre une image RGBA avec 4 × 2 = 8 pixels bleus, verts, rouges et blancs ; semi-transparent (0x7F) dans la première rangée inférieure, opaque (0xFF) dans la deuxième rangée supérieure ; hexagone. FF00007F 00FF007F 0000FF7F FFFFFF7F FF0000FF 00FF00FF 0000FFFF FFFFFFFFdans l' ordre BGRA . Pour PAM, ce bitmap doit être donné dans l' ordre RGBA , en échangeant le 1er et le 3ème octet dans chaque pixel. Les lignes BMP sont généralement disposées de bas en haut, pour les lignes PAM et PNM sont données de haut en bas (c'est-à-dire pour cet exemple 0000FFFF 00FF00FF FF0000FF FFFFFFFF 0000FF7F 00FF007F FF00007F FFFFFF7F). L'en-tête PAM pour cet exemple pourrait être :

Bmp format2.svg0,0: blue 0000FF FF 0,1: green 00FF00 FF 0,2: red FF0000 FF 0,3: white FFFFFF FF 1,0: blue 0000FF 7F, half transparent 1,1: green 00FF00 7F, half transparent 1,2: red FF0000 7F, half transparent 1,3: white FFFFFF 7F, half transparent
À propos de cette image
P7
WIDTH 4
HEIGHT 2
DEPTH 4
MAXVAL 255
TUPLTYPE RGB_ALPHA
ENDHDR

Rallonges

Le mécanisme de type tuple de PAM permet de nombreuses extensions. En théorie, PAM peut être étendu pour représenter des modèles de couleurs tels que CMJN.

Le format n'est même pas limité aux graphiques, sa définition lui permettant d'être utilisé pour des matrices tridimensionnelles arbitraires d'entiers non signés. Certains programmes du package Netpbm, par exemple pamsummcol , fonctionnent comme des processeurs arithmétiques matriciels bruts et utilisent ainsi le format PAM.

Voir également

Les références

Liens externes