Formát Netpbm - Netpbm format
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 .
Obsah
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 P7
odkazuje 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
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.
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.
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é
- X PixMap (srovnání PBM a XPM)
- pfm: formát souboru grafického obrazu PFM, jak jej chápe Netpbm