PGM-Formatspezifikation(5) File Formats Manual PGM-Formatspezifikation(5) BEZEICHNUNG PGM - Netpbm-Graustufen-Bildformat BESCHREIBUNG Dieses Programm ist Teil von netpbm(1). Das PGM-Format ist der kleinste gemeinsame Nenner der Graustufen-Dateiformate. Es ist so entworfen, dass es sehr leicht ist, es zu erlernen und dafur Programme zu schreiben. (Es ist so einfach, dass die meisten Menschen einfach den Quellcode studieren, weil das leichter ist, als diese Spezifikation zu lesen). Ein PGM-Bild reprasentiert ein Graustufen-Bild. Es sind viele verschiedene Pseudo-PGM-Formate gebrauchlich, von denen hier bis auf die Bedeutung der einzelnen Pixel-Werte alles spezifiziert ist. Fur die meisten Anwendungsfalle kann ein PGM-Bild als ein Feld von unterschiedlichen Ganzzahlen angesehen werden. Und alle Programme der Welt, die meinen, ein Graustufen-Bild zu verarbeiten, konnen einfach dazu uberlistet werden, stattdessen etwas anderes zu verarbeiten. Der Name >>PGM<< ist ein Akronym, das vom englischen >>Portable-Gray-Map<< abgeleitet ist. Eine offizielle Variante von PGM verwendet eine Transparenz-Maske. Eine Transparenz-Maske in Netpbm wird durch ein PGM-Bild dargestellt, nur dass anstatt der Intensitaten der Pixel Durchlassigkeitswerte verwendet werden. Lesen Sie dazu den folgenden Abschnitt. DAS FORMAT Die Formatdefinition ist wie folgt. Sie konnen die C-Unterprogramm-Bibliothek libnetpbm(1) verwenden, um das Format auf bequeme und exakte Art und Weise zu lesen und zu interpretieren. Eine PGM-Datei besteht aus einer Reihe von einem oder mehreren PGM-Bildern. Vor, nach oder zwischen den Bildern befinden sich weder Daten, Begrenzungs- oder Fullzeichen. Jedes PGM-Bild hat folgende Bestandteile: o Eine >>magische Zahl<<, um den Dateityp zu identifizieren. Die >>magische Zahl<< eines PGM-Bildes sind die zwei Zeichen >>P5<<. o Leerraumzeichen (Leerzeichen, Tabulatoren, Wagenrucklaufe, Zeilenumbruche). o Eine Breite, dezimal in ASCII-Zeichen formatiert. o Leerraumzeichen. o Eine Hohe, wieder dezimal in ASCII. o Leerraumzeichen. o Der maximale Grauwert (>>Maxwert<<), wieder dezimal in ASCII. Er muss kleiner als 65536 und grosser als Null sein. o Ein einzelnes Leerraumzeichen (normalerweise ein Zeilenumbruch). o Ein Raster von >>Hohe<< Reihen in der Reihenfolge von oben nach unten. Jede Reihe besteht aus >>Breite<< Grauwerten in der Reihenfolge von links nach rechts. Jeder Grauwert ist eine Zahl von 0 bis >>Maxwert<<; 0 ist Schwarz, >>Maxwert<< ist Weiss. Jeder Grauwert wird als reine Binarzahl mit entweder einem oder zwei Byte dargestellt. Wenn >>Maxwert<< kleiner als 256 ist, dann ist es ein Byte, ansonsten sind es zwei Byte. Das hoherwertige Byte ist das erste Byte. Eine Zeile in einem Bild ist horizontal. Eine Spalte ist vertikal. Die Pixel in dem Bild sind quadratisch und fortlaufend. Jeder Grauwert ist eine Zahl, die proportional zur gewichteten Intensitat der Pixels ist. Die Gewichtung erfolgt mit der Gamma-Funktion gemass BT.709. (Diese Ubertragungsfunktion spezifiziert die Zahl Gamma zu 2,2 und weist fur niedrige Intensitaten einen linearen Bereich auf). Ein Wert von Null ist damit schwarz. Ein Wert von >>Maxwert<< entspricht CIE-D65-weiss und ist die hellste Farbe in dem Bild und jedem anderen Bild, mit denen dieses Bild verglichen werden konnte. Beachten Sie, dass eine gebrauchliche Variante des PGM Formates die Grauwerte >>linear<< verwendet, dass heisst wie oben beschrieben, nur ohne die Gamma-Anpassung. pnmgamma(1) akzeptiert eine solche PGM-Variante als Eingabe und erzeugt echtes PGM als Ausgabe. In der Transparenz-Maske-Variante von PGM reprasentiert der Wert die Undurchsichtigkeit. Er ist proportional zu dem Anteil von Intensitat, mit der ein Pixel unterhalb des Bildes durchscheinen wurde. Was normalerweise >>weiss<< bedeutet, erscheint komplett undurchsichtig. Was normalerweise >>schwarz<< bedeutet, erscheint voll transparent. Fur die Zwischenwerte konnen Sie die Intensitat eines zusammengesetzten Pixels aus Vordergrund-Pixel und Hintergrund-Pixel zu Hintergrund * (1-(Alpha/Alpha_Maxwert)) + Vordergrund * (Alpha/Alpha_Maxwert) berechnen. Beachten Sie, dass bei Verwendung der Transparenz-Maske keine Gamma-Anpassung durchgefuhrt wird. Zeichenketten, die mit einem >>#<< beginnen, konnen wie bei PBM(1) Kommentare sein. Beachten Sie, dass Sie pamdepth(1) verwenden konnen, um zwischen dem Format mit einem Byte pro Grauwert und zwei Byte pro Grauwert zu konvertieren. Alle Zeichen, auf die sich hier bezogen wird, sind ASCII-kodiert. >>newline<< (zu deutsch >>Zeilenumbruch<<) entspricht dem ASCII-Zeichen, das als >>Line-Feed<< oder >>LF<< bekannt ist. Ein >>white space<< (zu deutsch >>Leerraumzeichen<<) ist >>Space<< (Leerzeichen), >>LF<< (Zeilenumbruch), >>TAB<< (Tabulator), >>VT<< (vertikaler Tabulator) oder >>FF<< (Seitenvorschub) (dies dind die Zeichen, die die Funktion isspace() aus Standard-ANSI-C als >>White Space<< bezeichnet). Gewohnliches PGM Es gibt eine weitere Version des PGM-Formats, die ziemlich selten ist: das >>plain<<-PGM-Format. Das obige Format, das im Allgemeinen als normal angesehen wird, ist als >>raw<<-PGM-Format (zu deutsch >>roh<<) bekannt. Lesen Sie die Diskussion in pbm(1) bezuglich der Beziehung zwischen dem >>plain<<- und dem >>raw<<-Format und ihrer Verwendung. Die Unterschiede zu dem >>plain<<-Format sind folgende: o Es gibt genau ein Bild in einer Datei. o Die >>magische Zahl<< ist >>P2<< anstatt >>P5<<. o Jeder Wert in dem Raster wird durch eine ASCII-Dezimalzahl (von beliebiger Grosse) dargestellt. o Jeder Wert in dem Raster hat sowohl vorab als auch abschliessend ein Leerraumzeichen. Zwischen zwei Werten muss mindestens ein Leerraumzeichen stehen, es gibt aber keine maximale Anzahl. o Keine Zeile sollte langer als 70 Zeichen sein. Hier ist ein kleines Beispielbild im >>plain<<-PGM-Format. P2 # feep.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 0 Es gibt am Ende jeder dieser Zeilen ein Zeilenumbruchzeichen. Programme, die dieses Format lesen, sollten so nachsichtig wie moglich sein und alles akzeptieren, was entfernt nach einem PGM aussieht. INTERNET-MEDIENTYP Fur PGM wurde kein Internet-Medientyp (auch MIME-Typ, Content-Typ) bei der IANA registriert, jedoch ist der Wert image/x-portable-graymap gebrauchlich. Beachten Sie, dass der PNM-Internet-Medientyp image/x-portable-anymap ebenfalls verwendet wird. DATEINAME Es gibt keine Anforderungen an den Namen einer PGM-Datei. Die Konvention ist aber, die Endung >>.pgm<< zu verwenden. In Fallen, in denen es unbequem ist, zwischen den verschiedenen Unterformaten von PNM zu unterscheiden, ist die Verwendung von >>pnm<< ebenfalls ublich. KOMPATIBILITAT Vor April 2000 konnte der >>Maxwert<< einer PGM-Datei nicht grosser als 255 sein. Es konnte deshalb nicht mehr als ein Byte pro Wert enthalten. Alte Programme verlassen sich moglicherweise darauf. Vor Juli 2000 konnte in einer PGM-Datei maximal ein Bild enthalten sein. Deshalb ignorieren die meisten Werkzeuge zur Verarbeitung von PGM-Dateien samtliche Daten nach dem ersten Bild; sie werden nicht eingelesen. SIEHE AUCH pnm(1), pbm(1), ppm(1), pam(1), libnetpbm(1), Programme, die PGM verarbeiten(1) AUTOR Copyright (C) 1989, 1991 Jef Poskanzer. URSPRUNG DES DOKUMENTS Diese Handbuchseite wurde vom Netpbm-Werkzeug >>makeman<< aus der HTML-Quelle erstellt. Das Hauptdokument befindet sich unter http://netpbm.sourceforge.net/doc/pgm.html UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Christoph Brinkhaus und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Netpbm-Dokumentation 27. November 2013 PGM-Formatspezifikation(5)