Alt om PBM filer
PBM er nok verdens enkleste billedformat. Det består udelukkende af 0'er og 1'er, og hvert tal svarer til en pixel. Linjen og kolonnen i teksten bestemmer placeringen i billedet. Man kan således endda oprette billeder med en teksteditor. Næsten ligesom når man farvelægger rutepapir med en blyant. PBM understøtter hverken komprimering, alfakanaler eller farver. Ikke engang gråtoner. Det kan kun tegne en pixel (1) eller lade være (0).
TLDR:
PBM-filer er en del af en større formatfamilie. Formatet og dets søskende bruges stadig i dag, men de er ikke særlig velegnede til deling og permanent arkivering. De er store og understøttes kun af få programmer, men de er meget fleksible og ydeevne. Hvis du finder en PBM-fil, har du sandsynligvis et mellemprodukt eller et billede, der er oprettet til undervisningsformål. PBM-formatet er nemlig meget velegnet til illustration, da det praktisk talt er selvforklarende.
Historien om PBM-filer
PBM blev opfundet i 1980'erne af Jef Poskanzer, en programmør fra Berkeley, der ønskede at løse et simpelt problem: at sende billeder via e-mail. I 1980'erne var e-mailen dog endnu ikke så udviklet som i dag. Kun ASCII-tegn kunne sendes pålideligt, mens binære filer som billeder ofte gik i stykker undervejs. Poskanzer udviklede derfor PBM, et billedformat, der løste netop dette problem.
Den tekniske opbygning
Et PBM-billede består i sin plain-variant (P1) af nøjagtigt tre dele: magic-nummeret, dimensionerne og selve pixeldataene. Der kan eventuelt bruges kommentarer, f.eks. til indholdet.
| Komponent | Eksempel | Betydning |
|---|---|---|
| Magic Number | P1 |
Plain PBM (ASCII-variant) |
| Kommentar | # mein bild |
Valgfrit, indledt med # indledt |
| Bredde Højde | 24 7 |
Dimensioner i pixels |
| Rasterdata | 0 1 1 0 ... |
1 = sort, 0 = hvid |
Følgende eksempel viser et komplet billede fra dokumentationen:
P1 # feep.pbm 24 7 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 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 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 1 1 1 0 0 1 1 1 1 0 0 1 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
(0'erne er kun vist lidt mørkere for bedre visualisering)
Mellem nullerne og ettallerne kan man tydeligt se teksten FEEP. PBM svarer altså til binær ASCII-kodning ;).
Plain vs. Raw: P1 og P4
Poskanzer indførte senere en binær variant og gjorde den til standardudgangen for Netpbm-værktøjerne. Plain-varianten (P1) kom historisk set først, men blev afløst på grund af sit meget større pladsbehov ("lavishly wasteful" – "ekstremt spildt").
| Egenskab | Plain PBM (P1) |
Raw PBM (P4) |
|---|---|---|
| Pixeldata | ASCII-tegn 0 og 1 |
bits, pakket 8 pr. byte |
| Læseligt for mennesker | Ja, fuldstændigt | Kun overskriften |
| Plads pr. pixel | ~2 byte (tegn + mellemrum) | 1/8 byte (1 bit) |
| Maks. linjelængde | 70 tegn anbefales | Ingen begrænsning |
| Billeder pr. fil | Præcis 1 | Flere mulige (siden juli 2000) |
I dag bruges hele PBM-familien, især PPM, ofte som mellemformat. I det enkleste og korteste af alle anvendelsestilfælde findes det kun i en pipe mellem to programmer, altså kun i selve kørselstiden. Dermed kommer vi også til formatets styrker:
Styrker ved PBM-filer
- Ingen afhængigheder: Ingen dekoder, ingen bibliotek. Et par linjer C, Python eller Shell er nok til at læse og skrive.
- Unix-filosofi: PBM-værktøjer er filtre. Man forbinder dem med hinanden via pipes:
cat bild.pbm | pbmtopgm | ppmtojpeg > out.JPG. Over 330 programmer i Netpbm-pakken fungerer på denne måde. - Pædagogik: Hvis man vil forstå billedbehandling (ikke billedredigering), starter man ideelt set med PBM.
- Robust: Ingen ødelagt header, ingen korrupt chunk. Der er så lidt indhold, at der næsten ikke kan gå noget galt. Og hvis der alligevel går en bit tabt, forbliver billedet læsbart.
PBM-familien
PBM står ikke alene. I slutningen af 1988 udvidede Poskanzer familien med PGM (Portable Gray Map, gråtoner, Magic Number P2/P5) og PPM (Portable Pixel Map, RGB-farve, P3/P6). Sammen udgør de PNM: Portable Any Map. Senere kom PAM (P7) som en universel udvidelse.
PBM er fundamentet og også den "mest radikale" repræsentant for familien og giver kun to muligheder: lys tændt eller lys slukket – pixel til stede eller ikke. Ingen farve, ingen gennemsigtighed, ingen gråtoner. Kun et sort-hvidt billede, der kan læses direkte i kildekoden.
Pbmplus og Netpbm
Poskanzer vedligeholdt Pbmplus indtil den sidste udgivelse i slutningen af 1991. Derefter blev projektet ikke længere vedligeholdt. I 1993 opstod Netpbm som en community-fork, i grunden en ny udgave af Pbmplus med fejlrettelser og udvidelser fra udviklere over hele verden. Siden 1999 har Netpbm været vedligeholdt af Bryan Henderson og er i dag inkluderet i stort set alle Linux-distributioner.
PBM som sådan er forældet. Mail-servere kan uden problemer håndtere JPG'er, PNG'er og også videoer. Den "farverige" variant ppm bruges dog dagligt i pipes på Linux-systemer. For PBM forbliver den pædagogiske del: det kan forklares vidunderligt, forstås vidunderligt og – så enkelt er PBM – forklares på rutepapir.
Kilder
Netpbm PBM-formatspecifikation
Netpbm-historie – meget læseværdig artikel om pbm's historie
Wiki: Jef Poskanzer
Konverter, åbn og rediger PBM filer
Detaljer om PBM filer
- Software til åbning af PBM filer
- Software til redigering af PBM filer
- MIME-type i PBM
Ingen kommentarer