Netpbm - Netpbm
| Dezvoltatori | Jef Poskanzer , Bryan Henderson, Akira F Urushibata |
|---|---|
| Eliberarea inițială | 1988 |
| Versiune stabila | 10.47.61 / 9 mai 2016
|
| Repertoriu |
|
| Scris in | C , Perl , Unix Shell |
| Sistem de operare | Cross-platform |
| Licență | Diverse, despre care se crede că nu conțin DFSG |
| Site-ul web |
netpbm |
Netpbm (fost Pbmplus) este un pachet open-source de programe grafice și o bibliotecă de programare. Este utilizat în principal în lumea Unix , unde îl puteți găsi inclus în toate distribuțiile majore ale sistemului de operare open-source , dar funcționează și pe Microsoft Windows , macOS și alte sisteme de operare.
Formate de fișiere
| Extensie nume de fișier |
.pbm, .pgm, .ppm, .pnm
|
|---|---|
| Tipul media internet |
image / x-portable-bitmap, image / x-portable-graymap, image / x-portable-pixmap, image / x-portable-anymap |
| Identificator de tip uniform (UTI) | public.pbm |
| Dezvoltat de | Jef Poskanzer |
| Tipul formatului | Formate de fișiere imagine |
| Extins la | Harta arbitrară portabilă (PAM) |
| Formatul deschis ? | da |
Mai multe formate grafice sunt utilizate și definite de proiectul Netpbm. Formatul portabil pixmap ( PPM ), formatul graymap portabil ( PGM ) și formatul portabil bitmap ( PBM ) sunt formate de fișiere de imagine concepute pentru a fi ușor schimbate între platforme. De asemenea, sunt denumite uneori în mod colectiv formatul portabil anymap ( PNM ), care nu trebuie confundat cu formatul portabil de hartă arbitrară portabil (PAM). „Numărul magic” (Px) de la începutul unui fișier determină tipul, nu extensia de fișier, deși este cea mai bună practică să folosiți extensia potrivită, dacă este posibil.
Formatul PBM a fost inventat de Jef Poskanzer în anii 1980 ca un format care a permis ca bitmap-urile monocrome să fie transmise într-un mesaj de e-mail sub formă de text ASCII simplu, permițându-i să supraviețuiască oricăror modificări ale formatării textului. Poskanzer a dezvoltat prima bibliotecă de instrumente pentru a gestiona formatul PBM, Pbmplus, lansat în 1988. Conținea în principal instrumente pentru conversia între PBM și alte formate grafice. Până la sfârșitul anului 1988, Poskanzer dezvoltase formatele PGM și PPM împreună cu instrumentele asociate și le adăuga la Pbmplus. Lansarea finală a Pbmplus a fost 10 decembrie 1991.
În 1993, biblioteca Netpbm a fost dezvoltată pentru a înlocui Pbmplus neîntreținut. A fost pur și simplu o reambalare a Pbmplus cu adăugiri și remedieri trimise de oameni din întreaga lume.
Descriere
Fiecare fișier începe cu un număr magic de doi octeți (în ASCII) care identifică tipul de fișier care este (PBM, PGM și PPM) și codificarea acestuia ( ASCII / „simplu” sau binar / „brut”). Numărul magic este un P majuscul urmat de un număr dintr-o singură cifră.
| Tip | Număr magic | Extensie | Culori | |
|---|---|---|---|---|
| ASCII (simplu) | Binar (brut) | |||
| BitMap portabil |
P1
|
P4
|
.pbm |
0-1 (alb și negru) |
| Portabil GreyMap |
P2
|
P5
|
.pgm |
0–255 (scară de gri), 0–65535 (scară de gri), variabilă, interval negru-alb |
| PixMap portabil |
P3
|
P6
|
.ppm |
16 777 216 (0–255 pentru fiecare canal RGB ), unele suport pentru 0-65535 pe canal |
O valoare de P7se referă la formatul de fișier PAM care este acoperit și de biblioteca netpbm.
Formatele ASCII („simple”) permit lizibilitatea umană și transferul ușor pe alte platforme; formatele binare („brute”) sunt mai eficiente în ceea ce privește dimensiunea fișierului, dar pot avea probleme de ordine de octet nativă.
În formatele binare, PBM utilizează 1 bit pe pixel, PGM utilizează 8 sau 16 biți pe pixel, iar PPM utilizează 24 de biți pe pixel: 8 pentru roșu, 8 pentru verde, 8 pentru albastru. Unii cititori și scriitori pot accepta 48 de biți pe pixel (16 fiecare pentru R, G, B), dar acest lucru este încă rar.
În mod convențional, PGM stochează valori în spațiul de culoare liniar , dar în funcție de aplicație, acesta folosește adesea sRGB sau reprezentare gamma simplificată . Datele fișierului nu stochează informații despre spațiul de culoare pe care îl folosește și trebuie alese de utilizator sau de alt software. PGM pe 16 biți este aproape întotdeauna stocat ca liniar, deoarece corectarea gamma este de obicei avantajoasă doar în formatele de 8 biți.
De obicei, formatul PPM pe 8 biți stochează culorile în format neliniar, în mod convențional CIE Rec. 709 pentru roșu, verde și albastru, ajustat prin Rec. CIE. Funcția de transfer gamma 709. Cu toate acestea, este foarte obișnuit să stocați culoarea folosind spațiul de culoare sRGB sau uneori folosind spațiul de culoare liniar . Nu există metadate în fișier care să indice ce format este utilizat.
Exemplu PBM
Un exemplu simplu de format PBM este după cum urmează (există un caracter de linie nouă la sfârșitul fiecărei linii):
P1 # This is an example bitmap of the letter "J" 6 10 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
Șirul P1 identifică formatul fișierului. Semnul numeric introduce un comentariu. Următoarele două numere dau lățimea și înălțimea. Apoi urmează matricea cu valorile pixelilor (în cazul monocrom aici, numai zerouri și unele).
Nu este necesar ca pixelii să fie aliniați frumos, formatul ignoră spațiile albe și alimentările de linie din secțiunea de date, deși se recomandă ca nici o linie să nu depășească 76 de caractere. Următoarele afișează aceeași imagine:
P1 # This is an example bitmap of the letter "J" 6 10 000010000010000010000010000010000010100010011100000000000000
Iată imaginea rezultată:
Aici este din nou mărită de 20 de ori:
Rețineți că un 0 înseamnă un pixel alb, iar un 1 înseamnă un pixel negru. Acest lucru este în contrast cu celelalte formate, unde valorile mai mari semnifică pixeli mai strălucitori.
Formatul binar P4 al aceleiași imagini reprezintă fiecare pixel cu un singur bit, împachetând 8 pixeli pe octet, primul pixel fiind cel mai semnificativ bit. Se adaugă biți suplimentari la sfârșitul fiecărui rând pentru a umple un octet întreg.
Exemplu PGM
Formatele PGM și PPM (atât versiunile ASCII, cât și versiunile binare) au un parametru suplimentar pentru valoarea maximă (numere de gri între alb și negru) după dimensiunile X și Y și înainte de datele reale ale pixelilor. Negrul este 0 și valoarea maximă este albă. Există un caracter de linie nouă la sfârșitul fiecărei linii.
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 0
Exemplu PPM
Acesta este un exemplu de imagine RGB color stocată în format PPM. Există un caracter de linie nouă la sfârșitul fiecărei linii.
P3 # "P3" means this is a RGB color image in ASCII 3 2 # "3 2" is the width and height of the image in pixels 255 # "255" is the maximum value for each color # The part above is the header # The part below is the image data: RGB triplets 255 0 0 # red 0 255 0 # green 0 0 255 # blue 255 255 0 # yellow 255 255 255 # white 0 0 0 # black
Formatul binar P6 al aceleiași imagini reprezintă fiecare componentă de culoare a fiecărui pixel cu un octet (deci trei octeți pe pixel) în ordinea roșu, verde, apoi albastru. Fișierul este mai mic, dar informațiile despre culoare sunt greu de citit de oameni. Antetul rămâne în ASCII și argumentele sunt încă separate de un spațiu alb. Informațiile despre imagini binare vin după antet (care se termină cu un spațiu alb).
Formatul PPM nu este comprimat și, prin urmare, necesită mai mult spațiu și lățime de bandă decât ar face un format comprimat. De exemplu, imaginea de mai sus 192 × 128 PNG ( Portable Network Graphics ) are o dimensiune a fișierului de 166 octeți. Când este convertit la o imagine 192 × 128 PPM, dimensiunea fișierului este de 73.848 octeți. Formatul PPM este în general un format intermediar utilizat pentru lucrul cu imagini înainte de a fi convertit într-un format mai eficient, de exemplu formatul PNG, fără pierderi de informații în etapa intermediară.
Imaginea arătată mai sus , folosind doar 0 sau valoarea maximă pentru r ed- g reen- b canale Lue pot fi codificate ca:
P3 # The same image with width 3 and height 2, # using 0 or 1 per color (red, green, blue) 3 2 1 1 0 0 0 1 0 0 0 1 1 1 0 1 1 1 0 0 0
Spațiul alb, inclusiv capetele de linie și liniile de comentariu, este echivalent din punct de vedere sintactic cu un singur spațiu din antetele PNM. Pentru formatele simple P1 ... P3, aceasta afectează și liniile pixmap; de fapt, liniile ar trebui să fie limitate la 70 de caractere:
P3 3 2 1 1 0 0 0 1 0 0 0 1 1 1 0 1 1 1 0 0 0
Extensii pe 16 biți
Definiția originală a formatelor binare PGM și PPM (formatele P5 și P6) nu permitea adâncimi de biți mai mari de 8 biți. În timp ce formatul ASCII poate găzdui adâncimi de biți mai mari, crește dimensiunea fișierului și astfel încetinește operațiile de citire și scriere. În consecință, mulți programatori au extins formatul pentru a permite adâncimi de biți mai mari. Folosirea adâncimilor de biți mai mari întâmpină problema de a decide asupra endiannessului fișierului. Diferitele implementări nu au putut fi de acord asupra ordinii de octet de utilizat, iar unele au conectat endianitatea de 16 biți la ordinea de împachetare a pixelilor. În Netpbm, implementarea standard de facto a formatelor PNM, cel mai semnificativ octet este primul.
Extensii pe 32 de biți
PFM (Portable Floatmap) este extensia neoficială de patru octeți IEEE 754 cu virgulă simplă de precizie. Un fișier color este identificat cu textul ASCII „PF” în prima linie a antetului și o scară de gri cu „Pf”. Următorul rând text ASCII conține lățimea și înălțimea, separate de caracterul spațial hex 20 și uneori cu hex 0A (rezultând patru linii). După fiecare linie este scris un caracter de spațiu alb hex 0A și nu combinația Windows / DOS CR / LF. A treia linie de text ASCII deține un număr zecimal diferit de zero, care indică mici flotări endian pentru datele pixelilor atunci când negativ și big-endian flotează când este pozitiv. Valoarea absolută a numărului indică intervalul. Deci, a treia linie care conține -1,0 indică formatul endian mic în intervalul zero la unu. Nu există comentarii. După antet, fișierul continuă cu numere în virgulă mobilă pentru fiecare pixel, specificat în stânga în dreapta, de jos în sus. Unele programe sugerează PF4 ca o extensie suplimentară pentru formatul RGBA.
Este susținut de programele Photoshop , GIMP și ImageMagick .
Programe
Netpbm conține peste 220 de programe separate în pachet, dintre care majoritatea au „pbm”, „pgm”, „ppm”, „pam” sau „pnm” în numele lor. De exemplu, s-ar putea folosi pamscale pentru a micșora o imagine cu 10%, pamcomp pentru a suprapune o imagine peste alta, pbmtext pentru a crea o imagine de text sau pentru a reduce numărul de culori dintr-o imagine cu pnmquant .
Programele sunt concepute pentru a fi elemente minime care pot fi utilizate în diferite combinații pentru a face alte lucruri. Pachetul Netpbm poate, de exemplu, utiliza două programe de conversie succesive pentru a transforma o imagine în format PBM într-un fișier .bmp :
pgmtoppm "#FFFFFF" somepic.pbm > somepic.ppm ppmtobmp somepic.ppm > somepic.bmp
Acest lucru se face mai frecvent ca o conductă , pentru a economisi timpul de execuție și pentru a evita lăsarea unui fișier somepic.ppm temporar în jur:
pgmtoppm "#FFFFFF" somepic.pbm | ppmtobmp > somepic.bmp
Programele Netpbm sunt frecvent utilizate ca intermediari pentru a converti între formate obscure. De exemplu, este posibil să nu existe un instrument pentru a converti o fereastră X11 ( format XWD ) direct într-un fișier Macintosh PICT , dar se poate face acest lucru rulând xwdtopnm , apoi ppmtopict . (Instrumentele care spun că produc ieșiri PNM fie PBM, PGM sau PPM. Instrumentele care importă PNM vor citi oricare dintre cele trei formate.) Ca un exemplu mai complex, instrumentele Netpbm pot converti 48 × 48 XBM în Ikon și în cele din urmă X-Face .
Istorie
Formatul PBM (alb-negru) a fost inventat de Jef Poskanzer la mijlocul anilor 1980. La acea vreme, nu exista o modalitate standard și fiabilă de a trimite fișiere binare în e-mail, iar încercarea de a trimite altceva decât ASCII pe 7 biți în e-mail a dus deseori la corupția datelor . PBM a fost conceput pentru a permite trimiterea imaginilor prin e-mail fără a fi corupte. Poskanzer a lansat precursorul Netpbm, numit Pbmplus în 1988. Până la sfârșitul anului 1988, Poskanzer a dezvoltat formatele PGM (în tonuri de gri) și PPM (color) și le-a lansat cu Pbmplus.
Ultima versiune Pbmplus a fost pe 10 decembrie 1991. Poskanzer nu a lansat niciodată alte actualizări, iar în 1993 a fost dezvoltat Netpbm pentru a-l înlocui. La început, nu a fost altceva decât o versiune redenumită a Pbmplus, dar actualizările au continuat până în 1995, când pachetul a fost din nou abandonat. În 1999, pachetul Netpbm a fost preluat de actualul său întreținător, Bryan Henderson.
În 2000, PAM a fost adăugat la formatele de fișiere ale bibliotecii Netpbm permițând un canal alfa.
Numele Netpbm a venit de la dezvoltatorii de programe care au colaborat pe internet , ceea ce era remarcabil la acea vreme; NetBSD sistemul de operare și NetHack joc a primit numele lor în mod similar. (Spre deosebire de formatul mai târziu, mai răspândit, Portable Network Graphics (PNG), „rețeaua” din nume nu face de fapt referire la imaginea în sine optimizată pentru transfer pe o rețea.)
Format grafic PAM
| Extensie nume de fișier |
.pam
|
|---|---|
| Tipul media internet |
image / x-portable-arbitrarmap |
| Dezvoltat de | Bryan Henderson |
| Tipul formatului | Formate de fișiere imagine |
| Extins de la | Harta portabilă aNy (PNM) |
| Formatul deschis ? | da |
Harta arbitrară portabilă ( PAM ) este o extensie a formatelor grafice binare mai vechi P4 ... P6 . PAM generalizează toate caracteristicile PBM, PGM și PPM și oferă extensii. PAM definește două noi atribute; adâncimea și tipul de tuplu :
- Adâncime atribut definește numărul de canale din imagine, cum ar fi 1 pentru imagini în nuanțe de gri și 3 pentru imaginile RGB.
- Cele de tip tuplu precizează atribut ce fel de imagine fișierul PAM reprezintă, permițându -i astfel să stea mai vechi formate Netpbm, precum și să fie extins la noi utilizări, de exemplu, transparența .
PAM este acceptat de XnView și FFmpeg . După cum TUPLTYPEeste specificat, este opțional; cu toate acestea, FFmpeg o cere.
Diferențe față de formatele mai vechi
Antetul pentru formatul de fișier PAM începe cu P7 și (spre deosebire de celelalte formate) se încheie într-o închidere explicită: ENDHDR. Capetele de linie într-un antet PAM sunt semnificative; pentru PNM, capetele liniei sunt spațiu alb.
Nu există o versiune simplă (lizibilă de către om, bazată pe ASCII ) a PAM. Fișierele PAM sunt întotdeauna binare și încercările de a utiliza comutatorul -plaincu programe Netpbm care produc ieșire PAM rezultă într-un mesaj de eroare.
Pentru versiunea alb-negru a PAM (adâncimea 1, tip tuplu BLACKANDWHITE), corespunzătoare PBM, PAM utilizează un octet pe pixel, în loc de utilizarea de către PBM a unui bit pe pixel (împachetarea a opt pixeli într-un octet). De asemenea, valoarea 1 într-o astfel de imagine PAM reprezintă alb („lumină aprinsă”), spre deosebire de negru în PBM („cerneală aprinsă”).
| TUPLTYPE | MAXVAL | ADÂNCIME | cometariu |
|---|---|---|---|
| BLACKANDWHITE | 1 | 1 | caz special de GRAYSCALE |
| SCARA TONURILOR DE GRI | 2 ... 65535 | 1 | 2 octeți pe pixel pentru MAXVAL> 255 |
| RGB | 1 ... 65535 | 3 | 6 octeți pe pixel pentru MAXVAL> 255 |
| BLACKANDWHITE_ALPHA | 1 | 2 | 2 octeți pe pixel |
| GRAYSCALE_ALPHA | 2 ... 65535 | 2 | 4 octeți pe pixel pentru MAXVAL> 255 |
| RGB_ALPHA | 1 ... 65535 | 4 | 8 octeți pe pixel pentru MAXVAL> 255 |
Transparenţă
Toate tipurile de tupluri de bază (BLACKANDWHITE, GRAYSCALE și RGB) au o variantă cu un canal de opacitate . Tipul de tuplu este creat prin adăugarea „_ALPHA” ca sufix la tipul de tuplă de bază.
De exemplu, o imagine cu un tip de tuplă GRAYSCALE este echivalentă cu PGM (graymap portabil). GRAYSCALE_ALPHA cu transparență nu este direct posibil în PGM. Specificația permite MAXVAL 1 pentru GRAYSCALE, dar ar avea același efect ca BLACKANDWHITE.
Un exemplu din articolul BMP arată o imagine RGBA cu 4 × 2 = 8 pixeli albastru, verde, roșu și alb; pe jumătate transparent (0x7F) în primul rând inferior, opac (0xFF) în al doilea rând superior; hex. FF00007F 00FF007F 0000FF7F FFFFFF7F FF0000FF 00FF00FF 0000FFFF FFFFFFFFîn ordinea BGRA . Pentru PAM, această bitmap trebuie să fie dată în ordine RGBA , schimbând primul și al treilea octet în fiecare pixel. Rândurile BMP sunt de obicei aranjate de jos în sus, pentru rândurile PAM și PNM sunt date de sus în jos (adică pentru acest exemplu 0000FFFF 00FF00FF FF0000FF FFFFFFFF 0000FF7F 00FF007F FF00007F FFFFFF7F). Antetul PAM pentru acest exemplu ar putea fi:
P7 WIDTH 4 HEIGHT 2 DEPTH 4 MAXVAL 255 TUPLTYPE RGB_ALPHA ENDHDR
Extensii
Mecanismul de tip tupl al PAM permite multe extensii. În teorie, PAM poate fi extins pentru a reprezenta modele de culoare, cum ar fi CMYK.
Formatul nici măcar nu se limitează la grafică, definiția acestuia permițându-i să fie folosit pentru matrici tridimensionale arbitrare ale unor numere întregi nesemnate. Unele programe ale pachetului Netpbm, de exemplu pamsummcol , funcționează ca procesoare aritmetice matrice brute și utilizează formatul PAM în acest fel.
Vezi si
- Biblioteca de grafică GD
- GraphicsMagick
- ImageMagick
- Lista comenzilor Unix
- X PixMap (compararea PBM și XPM)

