Qu’est-ce qu’un fichier PBM ?
Un fichier Portable Bitmap est un format matriciel Netpbm pour les images monochromes. Chaque pixel possède l’une de deux valeurs, représentées par un encodage texte ou binaire volontairement simple.
Fonctionnement des fichiers PBM
PBM est le format à deux niveaux de la famille Netpbm, aux côtés de PGM (niveaux de gris) et de PPM. PNM est le nom collectif de ces trois formats, et PAM est un quatrième format, plus général. Une image PBM se compose d’un court en-tête ASCII suivi d’une matrice de pixels : un nombre magique de deux caractères, la largeur et la hauteur sous forme de nombres décimaux séparés par des caractères d’espacement, puis les lignes de haut en bas, chacune allant de gauche à droite. PBM ne possède pas de champ de valeur maximale, que PGM ajoute après la hauteur. Avant la matrice de pixels, le texte allant d’un # jusqu’à la fin de la ligne est un commentaire. La variante brute regroupe les pixels dans des octets, tandis que la variante texte, plus ancienne, écrit chaque pixel sous forme d’un 1 ou d’un 0 ASCII. Les images plus riches nécessitent PGM, PPM, PAM ou un autre format.
Points clés
- Identifiez la variante à partir des deux premiers octets, et non du suffixe :
P4désigne la variante binaire compacte (brute) etP1la variante ASCII (texte). Le suffixe habituel est.pbm, mais.pnmest également utilisé pour PBM, PGM et PPM, et aucun type de média n’est enregistré auprès de l’IANA (image/x-portable-bitmapest la valeur habituelle). Vérifiez que votre bibliothèque lit les deux variantes : la documentation de Pillow indique que Pillow écrit les variantes brutes et ne lit les fichiers texteP1àP3qu’à partir de la version 9.2.0. - Dans un fichier PBM brut, chaque ligne regroupe 8 pixels par octet, en commençant par le bit de poids fort, et le dernier octet de la ligne est complété par des bits sans signification. Une ligne occupe donc, en octets, la largeur divisée par 8, arrondie à l’entier supérieur. Un lecteur qui traite la matrice de pixels comme un flux continu de bits décale toutes les lignes après la première lorsque la largeur n’est pas un multiple de 8. Un seul caractère d’espacement sépare la hauteur de la matrice de pixels.
- La valeur stockée
1représente le noir et0le blanc, à l’inverse de PGM, où zéro représente le noir et la valeur maximale le blanc, et d’une image PAM dont le type de tuple estBLACKANDWHITE, qui utilise 0 pour le noir et 1 pour le blanc. Le code qui convertit directement les bits PBM stockés en valeurs de luminosité ou en échantillons PAM doit les inverser. Une bibliothèque de décodage peut déjà l’avoir fait : Pillow transforme la valeur stockée 1 en 0 et la valeur stockée 0 en 255. Vérifiez donc ce que renvoie votre bibliothèque avant de les inverser à nouveau. - Les deux variantes ne diffèrent pas seulement par leur encodage. Un fichier texte contient exactement une image, n’a pas de bits de remplissage, ignore les caractères d’espacement dans la matrice de pixels et devrait limiter ses lignes à 70 caractères. Un fichier brut peut contenir plusieurs images à la suite, ce que la spécification autorise depuis juillet 2000, tout en précisant que la plupart des outils ne lisent encore que la première. Pour une compatibilité maximale, la spécification recommande d’écrire
P4, un saut de ligne, la largeur et la hauteur séparées par une espace, un saut de ligne et une seule matrice de pixels.
Quand les fichiers PBM sont utiles
Utilisez PBM comme format intermédiaire pour les données à deux niveaux, telles que les masques binaires échangés entre outils de traitement d’images. La spécification Netpbm le décrit comme un format intermédiaire qui ne se soucie pas de l’efficacité et précise qu’il ne s’agit pas d’un format normalement utilisé pour stocker ou transmettre un fichier. Il ne peut pas représenter les niveaux de gris, la couleur ou la transparence partielle sans conversion vers un autre format.
Comment Transloadit vous aide avec les fichiers PBM
Le tableau des formats d’image de Transloadit répertorie PBM comme un format que ses Robots basés sur ImageMagick, dont /image/resize, peuvent lire et écrire. Le paramètre format de ce Robot accepte tout format que le tableau indique comme disponible en écriture.
Le tableau ne précise pas si les fichiers PBM produits utilisent la variante brute ou texte. Vérifiez donc le nombre magique du fichier de sortie si l’outil suivant exige l’une d’elles.
Explorer les possibilités de Transloadit en matière de formats de fichiers et de compression
Références
- Netpbm : spécification du format PBM (structure, sous-ensemble minimal, PBM texte, type de média, compatibilité)
- Netpbm : PNM, le nom collectif de PBM, PGM et PPM
- Netpbm : spécification du format PGM (valeur maximale, zéro représente le noir)
- Netpbm : spécification du format PAM (type de tuple BLACKANDWHITE, plans d’opacité)
- Manuel de Pillow : section PPM (prise en charge de la lecture et de l’écriture de PBM, PGM et PPM selon la version)
- Code source de Pillow : PpmImagePlugin.py (décodage PBM avec inversion des bits)
- Ticket Pillow #860 : impossible d’identifier le fichier image lors de l’ouverture de fichiers ASCII .pbm, .pgm et .ppm