Alt om PBM-filer
PBM er trolig verdens enkleste bildeformat. Det består kun av 0-er og 1-er, og hvert tall tilsvarer en piksel. Radene og kolonnene i teksten bestemmer posisjonen i bildet. På denne måten kan man til og med lage bilder med en tekstredigerer. Nesten akkurat som å fargelegge rutepapir med en blyant. PBM støtter ikke komprimering, ikke alfakanaler, ikke farger. Ikke engang gråtoner. Det kan bare tegne en piksel (1) eller ikke (0).
TLDR:
PBM-filer er en del av en større formatfamilie. Formatet og dets søsken brukes fortsatt i dag, men de er ikke spesielt godt egnet for deling og permanent arkivering. De er store, støttes av få programvarer, men de er svært fleksible og ytelsessterke. Den som finner en PBM-fil, har sannsynligvis et mellomprodukt eller et bilde laget for undervisningsformål. PBM-formatet egner seg nemlig svært godt til illustrasjon, det er praktisk talt selvforklarende.
Historien om PBM-filene
PBM ble oppfunnet på 1980-tallet av Jef Poskanzer, en programmerer fra Berkeley som ønsket å løse et enkelt problem: å sende bilder via e-post. På 1980-tallet var e-post ikke så utviklet som i dag. Det var bare ASCII-tegn som kunne sendes på en pålitelig måte, mens binære filer som bilder ofte ble ødelagt underveis. Poskanzer utviklet derfor PBM, et bildeformat som løste nettopp dette problemet.
Den tekniske oppbygningen
Et PBM-bilde består i sin enkle variant (P1) av nøyaktig tre deler: magisk tall, dimensjoner og selve pikseldataene. Eventuelt kan kommentarer brukes, f.eks. for innholdet.
| Komponent | Eksempel | Betydning |
|---|---|---|
| Magisk tall | P1 |
Plain PBM (ASCII-variant) |
| Kommentar | # mein bild |
Valgfritt, innledet med # innledet |
| Bredde Høyde | 24 7 |
Dimensjoner i piksler |
| Rasterdata | 0 1 1 0 ... |
1 = svart, 0 = hvit |
Følgende eksempel viser et komplett bilde fra dokumentasjonen:
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-ene er bare vist litt mørkere for bedre visualisering)
Mellom nullene og enene kan man tydelig se teksten FEEP. PBM tilsvarer altså binær ASCII-kode ;).
Plain vs. Raw: P1 og P4
Poskanzer introduserte senere en binær variant og gjorde den til standardutdata for Netpbm-verktøyene. Plain-varianten (P1) kom historisk sett først, men ble erstattet på grunn av sitt mye større plassbehov («lavishly wasteful» – «ekstremt sløsende»).
| Egenskap | Plain PBM (P1) |
Raw PBM (P4) |
|---|---|---|
| Pikseldata | ASCII-tegn 0 og 1 |
Bits, pakket med 8 per byte |
| Lesbar for mennesker | Ja, fullstendig | Bare overskriften |
| Lagringsplass per piksel | ~2 byte (tegn + mellomrom) | 1/8 byte (1 bit) |
| Maks. linjelengde | 70 tegn anbefales | Ingen begrensning |
| Bilder per fil | Nøyaktig 1 | Flere mulig (siden juli 2000) |
I dag brukes hele PBM-familien, spesielt PPM, ofte som mellomformat. I det enkleste og korteste av alle bruksområder eksisterer det bare i en pipe mellom to programmer, altså bare i selve kjøretiden. Dermed kommer vi også til formatets styrker:
Styrker ved PBM-filer
- Ingen avhengigheter: Ingen dekoder, ingen bibliotek. Noen få linjer med C, Python eller Shell er nok til å lese og skrive.
- Unix-filosofi: PBM-verktøy er filtre. Man kobler dem sammen med pipe:
cat bild.pbm | pbmtopgm | ppmtojpeg > out.JPG. Over 330 programmer i Netpbm-pakken fungerer på denne måten. - Pedagogikk: Den som vil forstå bildebehandling (ikke bildredigering), bør ideelt sett begynne med PBM.
- Robust: Ingen ødelagt header, ingen korrupt chunk. Det er så lite som kan stå der inne at nesten ingenting kan gå galt. Og hvis en bit likevel går tapt, forblir bildet lesbart.
PBM-familien
PBM står ikke alene. I slutten av 1988 utvidet Poskanzer familien med PGM (Portable Gray Map, gråtoner, Magic Number P2/P5) og PPM (Portable Pixel Map, RGB-farge, P3/P6). Sammen danner de PNM: Portable Any Map. Senere kom PAM (P7) som en universell utvidelse.
PBM er grunnlaget og også den «radikaleste» representanten i familien, og gir bare to muligheter: lys på eller lys av – piksel der eller ikke. Ingen farge, ingen gjennomsiktighet, ingen gråtoner. Bare et svart-hvitt-bilde som kan leses direkte i kildekoden.
Pbmplus og Netpbm
Poskanzer vedlikeholdt Pbmplus frem til den siste utgivelsen i slutten av 1991. Etter det ble prosjektet ikke lenger vedlikeholdt. I 1993 oppstod Netpbm som en community-fork, i grunnen en ny innpakning av Pbmplus med feilrettinger og utvidelser fra utviklere over hele verden. Siden 1999 har Netpbm blitt vedlikeholdt av Bryan Henderson og er i dag inkludert i praktisk talt alle Linux-distribusjoner.
PBM som sådan er utdatert. E-postservere kan uten problemer håndtere JPG-er, PNG-er og også videoer. Den «fargerike» varianten ppm brukes imidlertid daglig, i pipes, på Linux-systemer. For PBM gjenstår den pedagogiske delen: det lar seg forklare på en fantastisk måte, forstå på en fantastisk måte og – så enkelt er PBM – forklare på rutepapir.
Kilder
Netpbm PBM-formatspesifikasjon
Netpbm-historie – en svært lesverdig artikkel om historien til pbm
Wiki: Jef Poskanzer
Konvertere, åpne og redigere PBM filer
Detaljer om PBM filer
- Programvare for åpning av PBM filer
- Programvare for redigering av PBM filer
- MIME-type for PBM
Ingen kommentarer