Allt om PBM-filer
PBM är förmodligen världens enklaste bildformat. Det består endast av 0 och 1, och varje siffra motsvarar en pixel. Rad- och kolumnangivelserna i texten bestämmer positionen i bilden. På så sätt kan man till och med skapa bilder med en textredigerare. Det är nästan precis som att färglägga rutpapper med en penna. PBM stöder varken komprimering, alfakanaler eller färger. Inte ens gråskalor. Det kan bara rita en pixel (1) eller inte (0).
TLDR:
PBM-filer ingår i en större formatfamilj. Formatet och dess syskon används fortfarande, men de är inte särskilt lämpliga för delning och långsiktig arkivering. De är stora, stöds av få program, men de är mycket flexibla och prestandastarka. Den som hittar en PBM-fil har troligen en mellanprodukt eller en bild som skapats för undervisningsändamål. PBM-formatet lämpar sig nämligen mycket väl för illustrationer, det är praktiskt taget självförklarande.
Historien om PBM-filerna
PBM uppfanns på 1980-talet av Jef Poskanzer, en programmerare från Berkeley som ville lösa ett enkelt problem: att skicka bilder via e-post. På 1980-talet var e-posten ännu inte så utvecklad som idag. Endast ASCII-tecken kunde skickas på ett tillförlitligt sätt, medan binära filer som bilder ofta förstördes under överföringen. Poskanzer utvecklade därför PBM, ett bildformat som löste just detta problem.
Den tekniska uppbyggnaden
En PBM-bild består i sin vanliga variant (P1) av exakt tre delar: magiskt tal, mått och själva bilddata. Valfritt kan kommentarer användas, t.ex. för innehållet.
| Beståndsdel | Exempel | Betydelse |
|---|---|---|
| Magiskt nummer | P1 |
Plain PBM (ASCII-variant) |
| Kommentar | # mein bild |
Valfritt, inleds med # inleds |
| Bredd Höjd | 24 7 |
Dimensioner i pixlar |
| Rasterdata | 0 1 1 0 ... |
1 = svart, 0 = vitt |
Följande exempel visar en komplett bild från 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:orna är något mörkare för att underlätta visualiseringen)
Mellan nollorna och ettorna kan man tydligt urskilja texten FEEP. PBM motsvarar alltså binär ASCII-kod ;).
Plain vs. Raw: P1 och P4
Poskanzer införde senare en binär variant och gjorde den till standardutdata för Netpbm-verktygen. Plain-varianten (P1) kom historiskt sett först, men ersattes på grund av sitt mycket större utrymmesbehov ("lavishly wasteful" – "extremt slösaktigt").
| Egenskap | Plain PBM (P1) |
Raw PBM (P4) |
|---|---|---|
| Pixeldata | ASCII-tecken 0 och 1 |
Bitar, packade 8 per byte |
| Läsbar för människor | Ja, fullständigt | Endast rubriken |
| Lagringsutrymme per pixel | ~2 byte (tecken + blanksteg) | 1/8 byte (1 bit) |
| Max. radlängd | 70 tecken rekommenderas | Ingen gräns |
| Bilder per fil | Exakt 1 | Flera möjliga (sedan juli 2000) |
Idag används hela PBM-familjen, särskilt PPM, ofta som mellanformat. I det enklaste och kortaste av alla användningsfall finns det bara i en pipe mellan två program, alltså endast under själva exekveringstiden. Detta leder oss också till formatets styrkor:
Styrkor hos PBM-filer
- Inga beroenden: ingen avkodare, inget bibliotek. Några rader C, Python eller Shell räcker för att läsa och skriva.
- Unix-filosofi: PBM-verktyg är filter. Man kopplar dem ihop med varandra:
cat bild.pbm | pbmtopgm | ppmtojpeg > out.JPG. Över 330 program i Netpbm-paketet fungerar på detta sätt. - Pedagogik: Den som vill förstå bildbehandling (inte bildredigering) bör helst börja med PBM.
- Robust: Ingen trasig header, ingen korrupt chunk. Det finns så lite information i filen att nästan ingenting kan gå fel. Och om en bit ändå skulle gå sönder förblir bilden läsbar.
PBM-familjen
PBM står inte ensam. I slutet av 1988 utökade Poskanzer familjen med PGM (Portable Gray Map, gråskala, Magic Number P2/P5) och PPM (Portable Pixel Map, RGB-färg, P3/P6). Tillsammans bildar de PNM: Portable Any Map. Senare tillkom PAM (P7) som en universell utökning.
PBM är grunden och även den ”radikaliska” representanten i familjen och ger bara två möjligheter: ljus på eller ljus av – pixel finns eller inte. Ingen färg, ingen transparens, inga gråskalor. Bara en svartvit bild som är direkt läsbar i källkoden.
Pbmplus och Netpbm
Poskanzer underhöll Pbmplus fram till dess sista utgåva i slutet av 1991. Därefter underhölls projektet inte längre. 1993 uppstod Netpbm som en community-fork, i grunden en ompaketering av Pbmplus med buggfixar och utökningar från utvecklare världen över. Sedan 1999 sköts Netpbm av Bryan Henderson och ingår idag i praktiskt taget varje Linux-distribution.
PBM som sådant har blivit föråldrat. E-postservrar kan utan problem hantera JPG- och PNG-filer samt videor. Den ”färgglada” varianten ppm används dock dagligen, i pipes, på Linux-system. För PBM återstår den pedagogiska delen: det går utmärkt att förklara, lätt att förstå och – så enkelt är PBM – att förklara på rutpapper.
Källor
Netpbm PBM-formatspecifikation
Netpbm Historia – mycket läsvärd artikel om pbm:s historia
Wiki: Jef Poskanzer
Konvertera, öppna och redigera PBM-filer
Uppgifter om PBM-filer
- Programvara för att öppna PBM-filer
- Programvara för att redigera PBM-filer
- MIME-typ för PBM
Inga kommentarer