Die Portable Bitmap Utilities (PBM, auch pbmplus oder netpbm) sind eine Sammlung freierhältlicher Programme, die von Jef Poskanzer gepflegt werden. Es handelt sich eigentlich um drei Programmpakete, die sich mit unterschiedlichen Bildarten und File-Formaten befassen:
Die PBM-, PGM- und PPM-File-Formate sind so einfach wie möglich gehalten. Sie starten jeweils mit einem Header, dem die Bildinformation unmittelbar folgt. Der Header ist immer in ASCII geschrieben, wobei die einzelnen Einträge durch White Spaces getrennt werden. Die Bildinformation kann entweder im ASCII- oder Binärformat sein.
Es gibt jeweils zwei Header-Versionen, von denen eine für ASCII- und eine für binäre Bildinformationen benutzt wird.
PBM-Header
Ein PBM-Header besteht aus folgenden Einträgen, jeweils durch White Spaces getrennt:
Magic Value | P1 für ASCII-, P4 für binäre Bildinformation |
Image Width | Breite des Bildes in Pixeln (ASCII-Dezimalwert) |
Image Height | Höhe des Bildes in Pixeln (ASCII-Dezimalwert) |
PGM-Header
Ein PGM-Header besteht aus folgenden Einträgen, jeweils durch White Spaces getrennt:
Magic Value | P2 für ASCII-, P5 für binäre Bildinformation |
Image Width | Breite des Bildes in Pixeln (ASCII-Dezimalwert) |
Image Height | Höhe des Bildes in Pixeln (ASCII-Dezimalwert) |
Max Grey | Maximaler Grauwert (ASCII-Dezimalwert) |
PPM-Header
Ein PPM-Header besteht aus folgenden Einträgen, jeweils durch White Spaces getrennt:
Magic Value | P3 für ASCII-, P6 für binäre Bildinformation |
Image Width | Breite des Bildes in Pixeln (ASCII-Dezimalwert) |
Image Height | Höhe des Bildes in Pixeln (ASCII-Dezimalwert) |
Max Color | Maximaler Farbwert (ASCII-Dezimalwert) |
Bildinformation in ASCII
Nach dem Header folgt die Beschreibung der Breite × Höhe vielen Pixel, beginnend in der linken oberen Bildecke zeilenweise von links nach rechts.
Bei PPM besteht jedes Pixel aus drei ASCII-Dezimalwerten zwischen 0 und dem angegebenen maximalen Farbwert, die die Rot-, Grün- und Blauwerte des Pixels darstellen.
Bei PBM und PGM gibt es nur einen ASCII-Dezimalwert pro Pixel. Bei PBM ist der maximale Wert implizit 1; die Werte müssen nicht durch White Spaces getrennt werden.
Beispiel:
Das folgende Beispiel stellt ein 4 × 4 -Pixmap im ASCII-Format dar:
P3 # feep.ppm 4 4 15 0 0 0 0 0 0 0 0 0 15 0 15 0 0 0 0 15 7 0 0 0 0 0 0 0 0 0 0 0 0 0 15 7 0 0 0 15 0 15 0 0 0 0 0 0 0 0 0Wie zu sehen, können auch Kommentare in ein PNM-File eingefügt werden. Zeichen ab einem # bis zum Zeilenende werden ignoriert.
Binäre Bildinformation
Deutlich kleinere Dateien, die schneller gelesen und geschrieben werden können, werden mit Hilfe der binären Bilddarstellung erreicht.
Die Pixelwerte werden dabei wie folgt abgelegt:
Format | Magic Value | binäre Darstellung |
PBM | P4 | acht Pixel pro Byte |
PGM | P5 | ein Pixel pro Byte |
PPM | P6 | drei Bytes pro Pixel |
Beim binären Format ist nach dem Header nur noch ein einziger White Space (typischerweise Newline) erlaubt. Innerhalb der binären Bilddaten sind keine White Spaces erlaubt. Die Bitorder innerhalb der Bytes ist ``most significant bit first''.
Beachtenswert ist, daß für das Binärformat nur maximale Werte bis 255 benutzt werden können.
Konvertierungsroutinen
Für die Umwandlung vom bzw. in das PNM-Format steht eine ganze Reihe von Routinen zur Verfügung, z.B.:
anytopnm, asciitopgm, bmptoppm, giftopnm, pbmtopgm, pgmtopbm, pgmtoppm, ppmtopgm, pstopnm, rgb3toppm, tifftopnm, xbmtopbm, xwdtopnm, pbmtoascii, pbmtolps, pbmtopgm, pbmtoxbm, pgmtopbm, pgmtoppm, pnmtops, pnmtotiff, pnmtoxwd, ppmtobmp, ppmtogif, ppmtopgm, ppmtorgb3.