Specificații privind formatul PGM(5)

NUME

pgm - formatul de imagine în tonuri de gri Netpbm

DESCRIERE

Acest program face parte din Netpbm(1).

Formatul PGM este un format de fișier în tonuri de gri cu cel mai mic numitor comun. Este conceput pentru a fi extrem de ușor de învățat și de scris programe pentru acesta; (este atât de simplu încât majoritatea oamenilor vor face pur și simplu inginerie inversă pentru că este mai ușor decât să citească această specificație).

O imagine PGM reprezintă o imagine grafică în tonuri de gri. Există multe formate pseudo-PGM în uz, în care totul este așa cum este specificat aici, cu excepția semnificației valorilor individuale ale pixelilor.În cele mai multe scopuri, o imagine PGM poate fi considerată ca o matrice de numere întregi arbitrare, iar toate programele din lume care cred că procesează o imagine în tonuri de gri pot fi cu ușurință păcălite să proceseze altceva.

Numele "PGM" este un acronim derivat de la „Portable Gray Map” (hartă de griri portabilă.

O variantă oficială a PGM este masca de transparență. O mască de transparență în Netpbm este reprezentată de o imagine PGM, cu excepția faptului că în locul intensităților pixelilor există valori de opacitate. A se vedea mai jos.

FORMATUL

Definiția formatului este următoarea. Puteți utiliza biblioteca de subrutine libnetpbm(1) C pentru a citi și interpreta în mod convenabil și precis formatul.

Un fișier PGM este format dintr-o secvență de una sau mai multe imagini PGM. Nu există date, delimitatori sau umplutură înainte, după sau între imagini.

Fiecare imagine PGM este compusă din următoarele elemente:

•   Un „număr magic” pentru identificarea tipului de fișier. Numărul magic al unei imagini pgm este format din cele două caractere „P5”.

•   Spațiu alb (spații goale, TAB-uri(tabulatoare), CR-uri(retururi de cărucior), LF-uri(salturi de linie)).

•   O lățime, formatată în caractere ASCII în zecimale.

•   Spațiu alb.

•   O înălțime, din nou în format ASCII zecimal.

•   Spațiu alb.

•   Valoarea maximă a griului (Maxval), din nou în ASCII zecimal. Trebuie să fie mai mică decât 65536 și mai mare decât zero.

•   Un singur caracter de spațiu alb (de obicei o linie nouă).

•   Un raster de rânduri de înălțime, în ordine de sus în jos. Fiecare rând este format din valori gri ale lățimii, în ordine de la stânga la dreapta. Fiecare valoare gri este un număr de la 0 la Maxval, 0 fiind negru și Maxval fiind alb. Fiecare valoare gri este reprezentată în binar pur prin 1 sau 2 octeți. În cazul în care Maxval este mai mică de 256, aceasta reprezintă 1 octet. În caz contrar, este de 2 octeți. Cel mai semnificativ octet este primul.

    Un rând al unei imagini este orizontal. O coloană este verticală. Pixelii din imagine sunt pătrați și contigui.

    Fiecare valoare de gri este un număr proporțional cu intensitatea pixelului, ajustată prin funcția de transfer gamma din Recomandarea ITU-R BT.709; (această funcție de transfer specifică un număr gamma de 2,2 și are o secțiune liniară pentru intensități mici). Prin urmare, o valoare de zero reprezintă negru. O valoare de Maxval reprezintă albul CIE D65 și cea mai intensă valoare din imagine și din orice altă imagine cu care imaginea ar putea fi comparată.

    Gama de valori ale canalelor din BT.709 (16-240) este irelevantă pentru PGM.

    Rețineți că o variație obișnuită față de formatul PGM este ca valoarea de gri să fie „liniară”, adică așa cum se specifică mai sus, dar fără ajustarea gamma. pnmgamma primește ca intrare o astfel de variantă PGM și produce ca ieșire un PGM adevărat.

    O altă variantă populară a PGM este înlocuirea funcției de transfer sRGB mai noi cu cea a BT.709. Puteți utiliza pnmgamma pentru a face conversia între această variantă și PGM adevărat.

    În varianta de mască de transparență din PGM, valoarea reprezintă opacitatea. Ea este proporțională cu fracțiunea de intensitate a unui pixel care ar apărea în locul unui pixel de bază. Astfel, ceea ce în mod normal înseamnă alb reprezintă opacitate totală, iar ceea ce în mod normal înseamnă negru reprezintă transparență totală. Între aceste două valori, se calculează intensitatea unui pixel compus dintr-un pixel „sub” și „peste” ca fiind sub * (1-(alfa/alfa_maxval)) + peste * (alfa/alfa_maxval). Rețineți că nu există o funcție de transfer gamma în masca de transparență.

Șirurile care încep cu „#” pot fi comentarii, la fel ca în cazul PBM(1) .

Rețineți că puteți utiliza pamdepth pentru a face conversia între formatul cu 1 octet pe valoare de gri și cel cu 2 octeți pe valoare de gri.

Toate caracterele la care se face referire în prezentul document sunt codificate în ASCII. „linie nouă” se referă la caracterul cunoscut în ASCII sub numele de „Line Feed” sau LF (salt de linie). Un caracter „spațiu alb” este un spațiu, CR, LF, TAB, VT sau FF (adică ceea ce funcția C isspace() din standardul ANSI numește „spațiu alb”).

  PGM simplu „plain”

De fapt, există o altă versiune a formatului PGM care este destul de rară: formatul PGM „simplu”. Formatul de mai sus, care este considerat în general cel normal, este cunoscut sub numele de format PGM „brut”. A se vedea pbm(1) pentru câteva comentarii privind modul în care formatele simplu și brut se raportează unul la celălalt și cum să le utilizați.

Diferența în format simplu este următoarea:

•   Există exact o singură imagine într-un fișier.

•   „Numărul magic” este „P2” în loc de „P5”.

•   Fiecare pixel din raster este reprezentat ca un număr zecimal ASCII (de dimensiune arbitrară).

•   Fiecare pixel din raster are un spațiu alb înainte și după el. Trebuie să existe cel puțin un caracter de spațiu alb între doi pixeli, dar nu există un maxim.

•   Niciun rând nu trebuie să aibă mai mult de 70 de caractere.

Iată un exemplu de imagine mică în format simplu (plain) PGM.

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

La sfârșitul fiecăreia dintre aceste linii se află un caracter de linie nouă.

Programele care citesc acest format trebuie să fie cât se poate de indulgente, acceptând orice lucru care seamănă cât de cât cu o imagine PGM.

TIP DE SUPORT INTERNET

Nu a fost înregistrat la IANA niciun Internet Media Type (aka MIME type, content type) pentru PGM, dar valoarea image/x-portable-graymap este convențională.

Rețineți că se aplică și PNM Internet Media Type image/x-portable-anymap.

NUME DE FIȘIER

Nu există cerințe privind numele unui fișier PGM, dar convenția este de a utiliza sufixul „.pgm”. „pnm” este, de asemenea, convențional, pentru cazurile în care nu este convenabil să se facă distincția între subformatele particulare ale PNM.

COMPATIBILITATE

Înainte de aprilie 2000, un fișier PGM în format brut nu putea avea o valoare maximă mai mare de 255. Prin urmare, acesta nu putea avea mai mult de un octet pe eșantion. Programele vechi pot depinde de acest lucru.

Înainte de iulie 2000, un fișier PGM putea conține cel mult o imagine. Ca urmare, majoritatea instrumentelor de procesare a fișierelor PGM ignorau (și nu citeau) niciun fel de date după prima imagine.

CONSULTAȚI ȘI
pnm(1) , pbm(1) , ppm(1) , pam(1) , libnetpbm(1) , programs that process PGM(1)

AUTOR

Drepturi de autor © 1989, 1991 pentru Jef Poskanzer.

SURSA DOCUMENTULUI
Această pagină de manual a fost generată de instrumentul Netpbm «makeman» din sursa HTML. Documentația principală este la

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

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.