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 einem oder mehreren der folgenden Zeichen: Leerzeichen, Tabulator, Wagenrücklauf (carriage return) und Zeilenvorschub (line feed).[1] Bei binärer Kodierung der Bilddaten muss der letzte Leerraum am Ende des Dateikopfs aus genau einem Zeichen bestehen.
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 Helligkeitswerten der einzelnen Pixel bzw. für jeden Farbkanal eines Pixels, entweder dezimal in ASCII oder binär kodiert. Die Werte werden zeilenweise angegeben, beginnend mit der obersten Pixelzeile, und in einer Zeile von links nach rechts. Die Reihenfolge der Farbwerte eines Pixels ist Rot, Grün, Blau.
Zulässige Wertebereiche für die Farb- bzw. Helligkeitswerte sind:
Dateityp | maximaler Wertebereich | Bits je Pixel 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 |
Bei Speicherung im ASCII-Format wird jeder Bildpunkt als Dezimalzahl mit einem Byte je Ziffer (ASCII-Code der Ziffer) gespeichert. Vor und nach jedem Wert muss ein Leerraum stehen (z. B. Leerzeichen oder Zeilentrenner). Eine Zeile sollte nicht länger als 70 Zeichen sein.
Bei binärer Speicherung folgen die Werte unmittelbar auf den Dateikopf und zwischen ihnen stehen keine Trennzeichen. Zeilenumbrüche oder andere Textformatierungen sind nicht erlaubt, denn sie würden als Bildpunkte interpretiert. Auch am Ende einer Zeile (am Rand des Bildes) gibt es keine Trennung, die nächste Zeile schließt unmittelbar an.
Eine Bitmap belegt für jeden Wert eines Pixels nur ein Bit, also beträgt der Platzbedarf ein Byte je acht Pixel. Innerhalb eines Bytes werden die Werte absteigend angeordnet, also das Bit für das erste Pixel an die höchstwertige Position im ersten Byte. Bei Graymap oder Pixmap wird ein Wert für ein Pixel bzw. einen Farbkanal eines Pixels als ein Byte gespeichert, wenn der Maximalwert kleiner als 256 ist, ansonsten als zwei Byte im Big-Endian-Format.
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
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
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
Weblinks
- PAM
- FileFormat.info: PBM, PGM, PNM, and PPM File Format Summary
- PGM
- PBM
- PPM
Einzelnachweise
Auf dieser Seite verwendete Medien
Example of PPM format
PBM resized to 20 times size with no interpolation.
Autor/Urheber: Spliffster, Lizenz: CC BY 3.0
This is an example of a grayscale netbpm image (PGM) which is reperented by the following ASCII characters (you may save the following code with the editor of your choice and rename the file to *.pgm):
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 0More infos at: http://en.wikipedia.org/wiki/Netpbm_format#PGM_example