Handbücher für die Kommandozeile

Man » pam-Handbuch online - detaillierte Online-Dokumentation für die pam-Manpage

🌍
pam - Netpbm-Format für zweidimensionale Bitmap-Grafiken

ALLGEMEIN

Das PAM-Bildformat ist ein einfaches, zweidimensionales Kartenformat.

Es ist für die Verwendung mit unzähligen Arten von Grafiken konzipiert, kann aber theoretisch für jede Art von Daten verwendet werden, die in einem zweidimensionalen, rechteckigen Array angeordnet sind. Tatsächlich kann es auch als Format für Daten betrachtet werden, die in einem dreidimensionalen Array angeordnet sind.

Der Name „PAM“ ist ein Akronym, das von „Portable Arbitrary Map“ abgeleitet ist. Diese Ableitung ergibt mehr Sinn, wenn man sie im Zusammenhang mit den anderen Netpbm-Formatnamen betrachtet: PBM, PGM und PPM.

Dieses Format definiert nicht die Bedeutung der Daten an einem bestimmten Punkt im Array. Es könnte sich um Rot-, Grün- und Blau-Lichtintensitäten handeln, so dass das Array ein visuelles Bild darstellt, oder es könnte sich um die gleichen Rot-, Grün- und Blau-Komponenten sowie eine Transparenzkomponente handeln, oder es könnte die jährlichen Niederschlagsmengen für Orte auf der Erdoberfläche enthalten. Jeder Prozess, der das PAM-Format verwendet, muss das Format weiter definieren, um die Bedeutung der Daten anzugeben.

Ein PAM-Bild beschreibt ein zweidimensionales Raster von Tupeln. Die Tupel sind in Zeilen und Spalten angeordnet. Die Breite des Bildes ist die Anzahl der Spalten. Die Höhe des Bildes ist die Anzahl der Zeilen. Alle Zeilen haben die gleiche Breite und alle Spalten die gleiche Höhe. Die Tupel können eine beliebige Anzahl von Elementen haben, aber alle Tupel haben die gleiche Anzahl von Elementen. Die Anzahl der Elemente in den Tupeln wird als Tiefe des Bildes bezeichnet. Jedes Element eines Tupels wird als Sample bezeichnet. Ein Sample ist eine vorzeichenlose Ganzzahl, die einen Punkt auf einer Skala darstellt, die bei Null beginnt und bei einem bestimmten Maximalwert endet, dem sogenannten Maximalwert (maxval). Der Maximalwert ist für alle Samples im Bild gleich. Das zweidimensionale Array aller N-ten Samples jedes Tupels wird als N-te Ebene oder N-ter Kanal des Bildes bezeichnet.

Obwohl das Basisformat keine Bedeutung für die Tupelwerte zuweist, enthält es eine optionale Zeichenkette, die diese Bedeutung beschreibt. Der Inhalt dieser Zeichenkette, der als Tupeltyp bezeichnet wird, ist aus der Sicht des Basis-PAM-Formats beliebig, aber die Benutzer des Formats können ihm durch Konvention eine Bedeutung zuweisen, damit sie ihre spezifischen Implementierungen des PAM-Formats identifizieren können. Einige Tupeltypen sind als offizielle Subformate von PAM definiert. Siehe Definierte Tupeltypen.

Das verwirrende Universum der Netpbm-Formate

Es ist leicht, sich über die Beziehung zwischen dem PAM-Format und PBM, PGM, PPM und PNM zu wundern. Hier ist eine kleine Aufklärung:

„PNM“ ist eigentlich kein Format. Es ist eine Kurzform für die Formate PBM, PGM und PPM, die zusammengefasst werden. Es ist auch der Name einer Gruppe von Bibliotheksfunktionen, die jeweils alle drei dieser Formate verarbeiten können.


"PAM" ist in der Tat ein viertes Format. Aber es ist so allgemein, dass Sie die gleichen Informationen in einem PAM-Bild darstellen können wie in einem PBM-, PGM- oder PPM-Bild. Und tatsächlich kann ein Programm, das PBM, PGM oder PPM lesen soll und dies mit einer aktuellen Version der Netpbm-Bibliothek tut, problemlos ein äquivalentes PAM-Bild lesen, und das Programm würde den Unterschied nicht bemerken.

Um die Dinge noch komplizierter zu machen, gibt es eine Sammlung von Bibliotheksroutinen, die als "pam"-Funktionen bezeichnet werden, die das PAM-Format lesen und schreiben, aber auch die PBM-, PGM- und PPM-Formate lesen und schreiben. Dies liegt daran, dass letztere Formate viel älter und beliebter sind, so dass selbst ein neues Programm damit umgehen können muss. Die Verwendung der Bibliothek zur Verarbeitung aller Formate erleichtert das Schreiben von Programmen, die das neuere PAM-Format verwenden.

DAS LAYOUT

Eine bequeme Möglichkeit, das PAM-Format genau zu lesen und zu schreiben, ist die Verwendung der C-Subroutinenbibliothek [libnetpbm(1)](1).

Eine PAM-Datei besteht aus einer Sequenz von einem oder mehreren PAM-Bildern. Es gibt keine Daten, Trennzeichen oder Auffüllung vor, nach oder zwischen Bildern.

Jedes PAM-Bild besteht aus einem Header, dem unmittelbar ein Raster folgt.

Hier ist ein Beispiel für einen Header:

P7
WIDTH 227
HEIGHT 149
DEPTH 3
MAXVAL 255
TUPLTYPE RGB
ENDHDR

Der Header beginnt mit den ASCII-Zeichen "P7", gefolgt von einem Zeilenumbruch. Dies ist die magische Zahl.

Hinweis: xv-Miniaturansichten beginnen ebenfalls mit der magischen Zahl "P7". (Dies und PAM waren unabhängige Erweiterungen der Netpbm-Formate). Der Rest des Formats erleichtert die Unterscheidung zwischen PAM und diesem Format).

Der Header wird mit einer beliebigen Anzahl von ASCII-Textzeilen fortgesetzt. Jede Zeile endet mit einem Zeilenumbruch.

Jede Header-Zeile besteht aus null oder mehr durch Leerzeichen getrennten Token oder beginnt mit "#". Wenn sie mit "#" beginnt, handelt es sich um einen Kommentar, und der Rest dieser Spezifikation gilt nicht dafür.

Eine Header-Zeile, die null Token enthält, ist gültig, hat aber keine Bedeutung.

Der Typ der Header-Zeile wird durch ihr erstes Token identifiziert, das 8 Zeichen oder weniger lang ist:

ENDHDR Dies ist die letzte Zeile im Header. Der Header muss genau eine dieser Header-Zeilen enthalten.

HEIGHT Das zweite Token ist eine Dezimalzahl, die die Höhe des Bildes (Anzahl der Zeilen) darstellt. Der Header muss genau eine dieser Header-Zeilen enthalten.

WIDTH Das zweite Token ist eine Dezimalzahl, die die Breite des Bildes (Anzahl der Spalten) darstellt. Der Header muss genau eine dieser Header-Zeilen enthalten.

DEPTH Das zweite Token ist eine Dezimalzahl, die die Tiefe des Bildes (Anzahl der Ebenen oder Kanäle) darstellt. Der Header muss genau eine dieser Header-Zeilen enthalten.

MAXVAL Das zweite Token ist eine Dezimalzahl, die den Maxval des Bildes darstellt. Der Header muss genau eine dieser Header-Zeilen enthalten.

TUPLTYPE

Der Header kann eine beliebige Anzahl dieser Header-Zeilen enthalten, einschließlich null. Der Rest der Zeile ist Teil des Tuple-Typs. Der Rest der Zeile wird nicht in Token aufgeteilt, aber der Tuple-Typ enthält kein Leerzeichen unmittelbar nach TUPLTYPE oder am Ende der Zeile. Er enthält auch keinen Zeilenumbruch. Nach dem TUPLTYPE-Token muss etwas anderes als ein Leerzeichen stehen.


Wenn es mehrere TUPLTYPE-Headerzeilen gibt, ist der Tupeltyp die Verkettung der Werte aus jeder dieser Zeilen, getrennt durch ein einzelnes Leerzeichen, in der Reihenfolge, in der sie im Header erscheinen. Wenn es keine TUPLTYPE-Headerzeilen gibt, ist der Tupeltyp die Null-Zeichenkette.

Das Raster besteht aus jeder Zeile des Bildes, in der Reihenfolge von oben nach unten, direkt aneinandergereiht, ohne jegliche Trennzeichen zwischen, vor oder nach den Zeilen.

Jede Zeile besteht aus jedem Tupel in der Zeile, in der Reihenfolge von links nach rechts, direkt aneinandergereiht, ohne jegliche Trennzeichen zwischen, vor oder nach den Tupeln.

Jedes Tupel besteht aus jeder Probe im Tupel, in der Reihenfolge, direkt aneinandergereiht, ohne jegliche Trennzeichen zwischen, vor oder nach den Proben.

Jede Probe besteht aus einer vorzeichenlosen Ganzzahl in reinem Binärformat, wobei das höchstwertige Byte zuerst kommt. Die Anzahl der Bytes ist die minimale Anzahl von Bytes, die erforderlich sind, um den Maximalwert (maxval) des Bildes darzustellen.

Das Zeichen, das hier als "Zeilenumbruch" bezeichnet wird, ist das Zeichen, das in ASCII als Zeilenvorschub (Line Feed) oder LF bekannt ist.

EINSCHRÄNKUNGEN

Höhe, Breite, Tiefe und maxval sind mindestens 1.

Höhe, Breite und Tiefe haben keine definierte Obergrenze, aber Prozessoren und Generatoren von Bildern haben in der Regel ihre eigenen Beschränkungen.

Der maxval eines Bildes ist niemals größer als 65535. (Der Grund für diese Beschränkung ist, dass es einfacher wird, einen Bildverarbeitungsprozessor zu erstellen, bei dem Zwischenarithmetikwerte oft in 31 oder 32 Bit passen müssen). Vor Oktober 2005 gab es keine spezifizierte Beschränkung, aber im Wesentlichen haben alle Implementierungen sie immer eingehalten.

DEFINIERTE TUPELTYPEN

Einige Tupeltypen sind in dieser Spezifikation definiert, um offizielle Subformate von PAM für besonders beliebte Anwendungen des Formats anzugeben. Benutzer des Formats können auch ihre eigenen Tupeltypen und damit ihre eigenen Subformate definieren.

Der Tupeltyp beeinflusst nur die Bedeutung der (vorzeichenlosen Ganzzahlen) in den Tupeln des Bildes. Er beeinflusst nicht, wie die Proben oder Tupel codiert werden. Der Tupeltyp kann die Bedeutung der Position eines Tupels im Array beeinflussen (z. B. kann er in einem visuellen Bild angeben, dass ein Tupel in Zeile 1 sich oben im Bild und nicht unten befindet).

Der Tupeltyp bestimmt niemals, wie viele Proben in einem Tupel enthalten sind (dies wird stattdessen durch die DEPTH-Headerzeile bestimmt). Es könnte gesagt werden, dass der Tupeltyp eine Tiefe (Anzahl der Proben pro Tupel) impliziert, da bestimmte Tupeltypen nur in Kombination mit bestimmten DEPTH-Werten gültig sind, aber es ist gute Programmierpraxis, die DEPTH für die Tiefe beim Decodieren des Rasters zu verwenden und separat zu überprüfen, ob die Tiefe mit dem Tupeltyp übereinstimmt. Es ist auch eine gute Praxis, eine Tiefe zu akzeptieren, die zu groß ist, und einfach die höher nummerierten Ebenen zu ignorieren.


PAM für visuelle Bilder

Eine gängige Verwendung von PAM-Bildern ist die Darstellung von visuellen Bildern, wie sie typischerweise durch Bilder in den älteren und konkreteren PBM-, PGM- und PPM-Formaten dargestellt werden.

Schwarz und Weiß

Ein Schwarzweißbild, das alternativ durch ein PBM-Bild dargestellt werden könnte, hat einen Tupeltyp von „BLACKANDWHITE“. Ein solches PAM-Bild hat eine Tiefe von 1 und maxval 1, wobei das einzelne Sample in jedem Tupel 0 ist, um ein schwarzes Pixel darzustellen, und 1, um ein weißes Pixel darzustellen. Der maxval, die Höhe, die Breite und die Reihenfolge der Tupel im Raster stehen in einer offensichtlichen Beziehung zu denen des entsprechenden PBM-Bildes.

Beachten Sie, dass in dem PBM-Format ein Sample-Wert von Null Weiß bedeutet, während in PAM Null Schwarz bedeutet.

Graustufen

Ein Graustufenbild, das alternativ durch ein PGM-Bild dargestellt werden könnte, hat einen Tupeltyp von „GRAYSCALE“. Ein solches PAM-Bild hat eine Tiefe von 1. Der maxval, die Höhe, die Breite und das Raster stehen in einer offensichtlichen Beziehung zu denen des entsprechenden PGM-Bildes.

Farbe

Ein Farbbild, das alternativ durch ein PPM-Bild dargestellt werden könnte, hat einen Tupeltyp von „RGB“. Ein solches PAM-Bild hat eine Tiefe von 3. Der maxval, die Höhe, die Breite und das Raster stehen in einer offensichtlichen Beziehung zu denen des PPM-Bildes. Die erste Ebene stellt Rot dar, die zweite Grün und die dritte Blau.

Transparent

Jedes der oben genannten visuellen Bildformate hat eine Variante, die Transparenzinformationen enthält. In dieser Variante wird dem Tupeltyp „_ALPHA“ hinzugefügt (z. B. „RGB_ALPHA“) und eine Ebene mehr. Die höchstnummerierte Ebene ist die Opazitätsebene (manchmal auch Alpha-Ebene oder Transparenzebene genannt).

In dieser Art von Bild ist die durch ein Pixel dargestellte Farbe tatsächlich eine Kombination aus einer explizit angegebenen Vordergrundfarbe und einer Hintergrundfarbe, die später angegeben wird.

Die Ebenen, die nicht die Opazitätsebene sind, beschreiben die Vordergrundfarbe. Ein Sample in der Opazitätsebene gibt an, wie undurchsichtig das Pixel ist, indem angegeben wird, welcher Bruchteil des Lichts des Pixels von der Vordergrundfarbe stammt. Der Rest des Lichts des Pixels stammt von der (nicht angegebenen) Hintergrundfarbe.

Beispielsweise wird in einem GRAYSCALE_ALPHA-Bild davon ausgegangen, dass Ebene 0 einen Grauton mit 60 % Weiß und Ebene 1 eine Opazität von 25 % angibt. Die Vordergrundfarbe ist das 60%ige Grau, und 25 % davon tragen zur endgültigen Farbe des Pixels bei. Die restlichen 75 % stammen von einer Hintergrundfarbe. Nehmen wir also weiter an, dass die Hintergrundfarbe des Pixels reines Weiß ist. Dann ist die Farbe des Pixels 90 % Weiß: 25 % des Vordergrunds von 60 % plus 75 % des Hintergrunds von 100 %.

Der Sample-Wert ist der oben beschriebene Opaktionsanteil als Anteil des maxval. Beachten Sie, dass er nicht wie die Vordergrundfarben-Samples gamma-korrigiert ist.

INTERNET MEDIA TYPE

Für PAM wurde kein Internet Media Type (auch bekannt als MIME-Typ, Content-Type) bei der IANA registriert, aber der inoffizielle Wert image/x-portable-arbitrarymap wird von dieser Spezifikation zugewiesen, um mit den üblichen Werten für die älteren Netpbm-Formate übereinzustimmen.


DATEINAME

Das übliche Suffix für den Namen einer PAM-Datei ist ".pam". Dies ist jedoch nicht erforderlich.

SIEHE AUCH

Netpbm(1), pbm(1), pgm(1), ppm(1), pnm(1), libnetpbm(1)

DOKUMENTATIONSQUELLEN

Diese Manpage wurde mit dem Netpbm-Tool 'makeman' aus HTML-Quellen generiert. Die Hauptdokumentation befindet sich unter

http://netpbm.sourceforge.net/doc/pam.html