Portable Anymap
Portable Anymap (abgekürzt PNM) ist eine Familie von einfachen Dateiformaten zur Speicherung von Rastergrafiken.
Zu den PNM-Formaten gehören die Dateiformate:
- Portable Bitmap (PBM),
- Portable Graymap (PGM) und
- Portable Pixmap (PPM)
Der Aufbau des Dateikopfs aller drei Dateiformate ist identisch. Die Bilddaten unterscheiden sich im Wertebereich bzw. der Wortbreite und können als dezimal kodierte Werte im ASCII-Format oder binär kodiert vorliegen.
Geschichte
Die PNM-Formate wurden in den 1980er Jahren zur einfachen Übertragung von Bitmaps zwischen verschiedenen Rechnersystemen entwickelt. Zusammen mit dem später entwickelten Dateiformat PAM (Portable Arbitrary Map) bilden die PNM-Formate die Familie der Netpbm-Formate.
Dateiformat
Kopfdaten
Der Dateikopf ist folgendermaßen aufgebaut:
- Magischer Wert: Kennzeichnet das Format der Bilddaten
- Leerraum
- Breite des Bilds (dezimal in ASCII kodiert)
- Leerraum
- Höhe des Bilds (dezimal in ASCII kodiert)
- Leerraum
Bei Graustufen- (PGM) und Farbbildern (PPM) zusätzlich noch:
- Maximalwert für die Helligkeit (dezimal in ASCII kodiert)
- Leerraum
Gültiger Leerraum ist eine Zeichenkette aus 1..n Zeichen aus den folgenden vier Möglichkeiten: Leerzeichen, Tabulator, Wagenrücklauf (carriage return) und Zeilenvorschub (line feed).[1]
Außerdem können noch Kommentarzeilen im Dateikopf untergebracht werden. Sie müssen mit einem Doppelkreuz (#
) am Zeilenanfang gekennzeichnet werden.
Zulässige Werte für den Dateityp (Magic Number) sind:
Magic Number | Dateityp | Kodierung |
---|---|---|
P1 |
Portable Bitmap | ASCII |
P2 |
Portable Graymap | ASCII |
P3 |
Portable Pixmap | ASCII |
P4 |
Portable Bitmap | Binär |
P5 |
Portable Graymap | Binär |
P6 |
Portable Pixmap | Binär |
Das später entwickelte, verwandte Format Portable Arbitrary Map beginnt mit der Magic Number P7.
Bilddaten
Auf den Kopfbereich folgen die eigentlichen Bilddaten in Form von einzelnen Pixeln, entweder dezimal in ASCII oder binär kodiert.
Zulässige Wertebereiche sind:
Dateityp | Max. zulässiger Wertebereich | Anzahl der Bits bei Binärkodierung |
---|---|---|
Portable Bitmap | 0 und 1 | 1 Bit |
Portable Graymap | 0 … 255 bzw. 0 … 65535 | 8 Bit bzw. 16 Bit |
Portable Pixmap | 0 … 255 bzw. 0 … 65535 | 24 bzw. 48 Bit |
Wenn der Maximalwert kleiner als 256 ist, werden für die binäre Speicherung nur 8 Bits pro Kanal verwendet, ansonsten 16 Bits im Big-Endian-Format.
ASCII
Jeder Bildpunkt wird dezimal notiert und in ASCII kodiert gespeichert. Vor und nach jedem Wert muss ein Leerraum stehen.
Eine Zeile sollte nicht länger als 70 Zeichen sein.
Beispiel:
0 1 2 3 4 5 6 7 8 9 …
Binär
Werden die Bildpunkte binär gespeichert, folgen sie unmittelbar auf den Dateikopf. Zeilenumbrüche oder andere Textformatierungen sind deshalb nicht erlaubt, denn sie werden als Bildpunkte interpretiert.
Beispiel: (dargestellt als Hexdump)
00000000 20 41 42 43 44 45 46 47 48 |.ABCDEFG| 00000008 49 … |H… |
Beispiele
Bitmap
P1 #Bitmap # Beispiel für das Bild des Buchstabens "J" 6 10 #Breite des Bildes, Leerstelle, Höhe des Bildes 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
Dekodiertes Bild:
Graymap
P2 # Das Wort "FEEP" in verschiedenen Graustufen (Beispiel von der Netpbm-Man-Page) 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
Dekodiertes Bild:
Pixmap
P3 # Ein Farbbild der Größe 3 × 2 Pixel, maximaler Helligkeit 255. # Darauf folgen die RGB-Tripel. 3 2 255 255 0 0 0 255 0 0 0 255 255 255 0 255 255 255 0 0 0
Dekodiertes Bild: