Formát Netpbm - Netpbm format

Přenosná pixmap
Přípona názvu souboru .pbm, .pgm, .ppm, .pnm
Typ internetového média image/x‑portable‑bitmap, image/x‑portable‑graymap, image/x‑portable‑pixmap, image/x‑portable‑anymap
Vyvinul Jef Poskanzer
Typ formátu Formáty obrazových souborů
Rozšířeno na Přenosná libovolná mapa (PAM)
Otevřený formát ? Ano

Formát NetPBM je nějaký grafický formát používaný a definovaný NetPBM projektu. Přenosný formát pixmap ( PPM ) je přenosný formát graymap ( PGM ) a přenosný formát bitmapy ( PBM ) jsou formáty obrazu navrženy tak, aby se snadno vyměnit mezi platformami. Někdy se jim také souhrnně říká přenosný formát anymap ( PNM ), který nelze zaměňovat se souvisejícím přenosným formátem libovolné mapy .

Dějiny

Formát PBM vynalezl Jef Poskanzer v 80. letech jako formát, který umožňoval přenášet monochromatické bitmapy v e-mailové zprávě jako prostý text ASCII, což mu umožnilo přežít jakékoli změny formátování textu. Poskanzer vyvinul první knihovnu nástrojů pro zpracování formátu PBM, Pbmplus, vydanou v roce 1988. Obsahovala hlavně nástroje pro převod mezi PBM a jinými grafickými formáty. Do konce roku 1988 vyvinul Poskanzer formáty PGM a PPM spolu s jejich přidruženými nástroji a přidal je do Pbmplus. Konečné vydání Pbmplus bylo 10. prosince 1991.

V roce 1993 byla vyvinuta knihovna Netpbm, která nahradila neudržovaný Pbmplus. Bylo to prostě přebalení Pbmplus s dodatky a opravami předloženými lidmi z celého světa.

Popis formátu souboru

Každý soubor začíná dvoubajtovým magickým číslem (v ASCII), které identifikuje typ souboru (PBM, PGM a PPM) a jeho kódování ( ASCII nebo binární). Kouzelné číslo je velké P následované jednociferným číslem.

Typ Magické číslo Rozšíření Barvy
ASCII Binární
Přenosná bitmapa P1 P4 .pbm 0–1 (bílá a černá)
Přenosná šedá mapa P2 P5 .pgm 0–255 (stupnice šedé)
Přenosná PixMap P3 P6 .ppm 0–255 (RGB)

Hodnota P7odkazuje na formát souboru PAM, který je rovněž pokryt knihovnou netpbm .

Formáty ASCII umožňují lidskou čitelnost a snadný přenos na jiné platformy; binární formáty jsou ve velikosti souboru efektivnější, ale mohou mít problémy s nativním bajtovým uspořádáním.

V binárních formátech používá PBM 1 bit na pixel, PGM používá 8 bitů na pixel a PPM používá 24 bitů na pixel: 8 pro červenou, 8 pro zelenou, 8 pro modrou.

Příklad PBM

Jednoduchý příklad formátu PBM je následující (na konci každého řádku je znak nového řádku):

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

Řetězec P1 označuje formát souboru. Znak čísla uvádí komentář. Další dvě čísla udávají šířku a výšku. Poté následuje matice s hodnotami pixelů (v monochromatickém případě zde pouze nuly a jedničky).

Není nutné, aby pixely byly pěkně seřazené, formát ignoruje mezery a řádky v datové sekci, i když se doporučuje, aby žádný řádek nebyl delší než 76 znaků. Následující obrázek zobrazuje stejný obrázek:

P1
# This is an example bitmap of the letter "J"
6 10
000010000010000010000010000010000010100010011100000000000000


Zde je výsledný obrázek: Příklad umění ASCII se změnil na bitmap.pbm.png

Zde je opět 20krát zvětšen: Příklad umění ASCII se změnil na bitmapový scale20.pbm.png

Všimněte si, že 0 znamená bílý pixel a 1 znamená černý pixel. To je na rozdíl od ostatních formátů, kde vyšší hodnoty znamenají jasnější pixely.

Binární formát P4 stejného obrazu představuje každý pixel s jediným bitem, který obsahuje 8 pixelů na bajt, přičemž první pixel je nejvýznamnějším bitem. Na konec každého řádku jsou přidány další bity, které vyplní celý bajt.

Příklad PGM

Formáty PGM a PPM (jak ASCII, tak binární verze) mají další parametr pro maximální hodnotu (počty šedé mezi černou a bílou) za rozměry X a Y a před skutečnými údaji o pixelech. Černá je 0 a maximální hodnota je bílá. Na konci každého řádku je znak nového řádku.

Příklad (zvětšený)
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

Příklad PPM

Toto je příklad barevného obrazu RGB uloženého ve formátu PPM. Na konci každého řádku je znak nového řádku.

Obrázek (zvětšený)
P3
3 2
255
# The part above is the header
# "P3" means this is a RGB color image in ASCII
# "3 2" is the width and height of the image in pixels
# "255" is the maximum value for each color
# The part below is image data: RGB triplets
255   0   0     0 255   0     0   0 255
255 255   0   255 255 255     0   0   0

Binární formát P6 stejného obrázku představuje každou barevnou složku každého pixelu s jedním bajtem (tedy třemi bajty na pixel) v pořadí červená, zelená a poté modrá. Soubor je menší, ale informace o barvě jsou pro člověka obtížně čitelné.

Formát PPM není komprimovaný, a proto vyžaduje více místa a šířku pásma, než by komprimovaný formát. Například výše uvedený obrázek 192 × 128 PNG ( Portable Network Graphics ) má velikost souboru 166 bajtů. Po převodu na obrázek 192 × 128 PPM je velikost souboru 73 848 bajtů. Formát PPM je obecně přechodný formát používaný pro práci s obrázky před převedením na efektivnější formát, například formát PNG, bez ztráty informací v mezikroku.

Obraz je uvedeno výše, za použití pouze 0 nebo maximální hodnotu pro r ed- g reen- b Lue kanály mohou být také kódovány jako:

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

Prázdné místo včetně konců řádků a řádků komentářů je syntakticky ekvivalentní jednomu prostoru v hlavičkách PNM. U obyčejných formátů P1… P3 to ovlivní také pixmapové čáry; ve skutečnosti by řádky měly mít maximálně 70 znaků:

P3 3 2 1  1 0 0   0 1 0   0 0 1  1 1 0   1 1 1   0 0 0

16bitové rozšíření

Původní definice binárních formátů PGM a PPM (formáty P5 a P6) neumožňovala bitové hloubky větší než 8 bitů. Samozřejmě lze použít formát ASCII, ale tento formát zpomaluje čtení a zvětšuje soubory. V souladu s tím mnoho programátorů rozšířilo formát tak, aby umožňoval vyšší bitovou hloubku. Používání vyšších bitových hloubek naráží na problém nutnosti rozhodnout o endianness souboru. Různé implementace se nemohly shodnout na tom, které pořadí bajtů použít, a některé spojily 16bitovou endiannost s pořadí balení pixelů. V Netpbm , de facto standardní implementaci formátů PNM, je nejvýznamnější bajt první.

Mezi běžné barevné hloubky RGB patří 24 = (3 × 8), 30 = (3 × 10), 32 = (4 × 8), 36 = (3 × 12), 48 = (3 × 16) a 64 = (4 x 16) (se třemi r ed- g reen- b Lue kanálů , a čtvrtou nepoužitého nebo RGBA na IPHa kanálu, v tomto pořadí). Classic XnView umí číst rgb48be PPM, FFmpeg také může vytvářet rgb48be PPM.

Zatímco 30 = (3 × 10) se vejde do 32 bitů, není to podporováno binárními formáty PNM a PAM . Všechny bitové hloubky PPM s více než 8 bity jsou kódovány do 48 bitů. Více než 8 šedých bitů skončí jako 16 bitů bez průhlednosti (FFmpeg PGM nebo PAM pix_fmt grey16be ).

PGMYUV je varianta PGM, kterou používá pouze FFmpeg .

Viz také

Reference

externí odkazy