Alles over PBM bestanden
PBM is waarschijnlijk het eenvoudigste afbeeldingsformaat ter wereld. Het bestaat alleen uit 0-en en 1-en, waarbij elk cijfer overeenkomt met een pixel. De rij en kolom in de tekst bepalen de positie in de afbeelding. Zo kun je zelfs afbeeldingen maken met een teksteditor. Bijna net alsof je met een potlood ruitjespapier inkleurt. PBM ondersteunt geen compressie, geen alfakanalen en geen kleuren. Zelfs geen grijstinten. Het kan alleen maar een pixel tekenen (1) of juist niet (0).
TLDR:
PBM-bestanden maken deel uit van een grotere familie van bestandsformaten. Het formaat en de verwante formaten worden momenteel nog steeds gebruikt, maar ze zijn niet bijzonder geschikt om te delen of voor permanente archivering. Ze zijn groot, worden door weinig software daadwerkelijk ondersteund, maar ze zijn zeer flexibel en prestatiegericht. Wie een PBM-bestand vindt, heeft waarschijnlijk een tussenproduct of een voor onderwijsdoeleinden gemaakte afbeelding in handen. Het PBM-formaat is namelijk zeer geschikt voor illustratieve doeleinden; het spreekt praktisch voor zich.
De geschiedenis van PBM-bestanden
PBM werd in de jaren 80 uitgevonden door Jef Poskanzer, een programmeur uit Berkeley die een eenvoudig probleem wilde oplossen: afbeeldingen via e-mail versturen. In de jaren 80 was e-mail nog niet zo ver ontwikkeld als vandaag. Alleen ASCII-tekens konden betrouwbaar worden verzonden; binaire bestanden zoals afbeeldingen raakten onderweg vaak beschadigd. Poskanzer ontwierp met PBM dus een afbeeldingsformaat dat precies dit probleem oploste.
De technische opbouw
Een PBM-afbeelding bestaat in zijn Plain-variant (P1) uit precies drie delen: het Magic Number, de afmetingen en de eigenlijke pixelgegevens. Optioneel kunnen opmerkingen worden gebruikt, bijvoorbeeld voor de inhoud.
| Onderdeel | Voorbeeld | Betekenis |
|---|---|---|
| Magic Number | P1 |
Plain PBM (ASCII-variant) |
| Opmerking | # mein bild |
Optioneel, ingeleid door # ingeleid |
| Breedte Hoogte | 24 7 |
Afmetingen in pixels |
| Rastergegevens | 0 1 1 0 ... |
1 = zwart, 0 = wit |
Het volgende voorbeeld toont een volledige afbeelding uit de documentatie:
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'en zijn alleen iets donkerder weergegeven voor een betere visualisatie)
Tussen de nullen en enen is duidelijk de tekst FEEP te herkennen. PBM komt dus overeen met binaire ASCII ;).
Plain vs. Raw: P1 en P4
Poskanzer heeft later een binaire variant geïntroduceerd en deze tot de standaarduitvoer van de Netpbm-tools gemaakt. De Plain-variant (P1) kwam historisch gezien eerst, maar werd vervangen vanwege de veel grotere benodigde opslagruimte ("lavishly wasteful" – "extreem verspillend").
| Eigenschap | Plain PBM (P1) |
Raw PBM (P4) |
|---|---|---|
| Pixelgegevens | ASCII-tekens 0 en 1 |
bits, 8 per byte verpakt |
| Leesbaar voor mensen | Ja, volledig | Alleen de header |
| Opslagruimte per pixel | ~2 bytes (teken + witruimte) | 1/8 byte (1 bit) |
| Max. regellengte | 70 tekens aanbevolen | Geen limiet |
| Afbeeldingen per bestand | Precies 1 | Meerdere mogelijk (sinds juli 2000) |
Tegenwoordig wordt de hele PBM-familie, en met name PPM, vaak als tussenformaat gebruikt. In het eenvoudigste en kortste van alle toepassingsgevallen bestaat het alleen in een pipe tussen twee programma's, dus alleen voor de uitvoeringstijd zelf. Daarmee komen we ook bij de sterke punten van het formaat:
Sterke punten van PBM-bestanden
- Geen afhankelijkheden: geen decoder, geen bibliotheek. Een paar regels C, Python of Shell zijn voldoende om te lezen en te schrijven.
- Unix-filosofie: PBM-tools zijn filters. Je koppelt ze aan elkaar:
cat bild.pbm | pbmtopgm | ppmtojpeg > out.JPG. Meer dan 330 programma's in het Netpbm-pakket werken op deze manier. - Pedagogiek: wie beeldverwerking (niet beeldbewerking) wil begrijpen, begint idealiter met PBM.
- Robuust: geen kapotte header, geen beschadigde chunk. Er staat zo weinig in dat er nauwelijks iets mis kan gaan. En mocht er toch een bit omvallen, dan blijft de afbeelding leesbaar.
De PBM-familie
PBM staat niet alleen. Eind 1988 breidde Poskanzer de familie uit met PGM (Portable Gray Map, grijstinten, Magic Number P2/P5) en PPM (Portable Pixel Map, RGB-kleur, P3/P6). Samen vormen ze PNM: Portable Any Map. Later kwam er nog PAM (P7) erbij als universele uitbreiding.
PBM is de basis en ook de "meest radicale" vertegenwoordiger van de familie en biedt slechts twee mogelijkheden: licht aan of licht uit – pixel aanwezig of niet. Geen kleur, geen transparantie, geen grijstinten. Alleen een zwart-witbeeld dat direct in de broncode leesbaar is.
Pbmplus en Netpbm
Poskanzer onderhield Pbmplus tot aan de laatste release eind 1991. Daarna werd het project niet meer onderhouden. In 1993 ontstond Netpbm als community-fork, in feite een herverpakking van Pbmplus met bugfixes en uitbreidingen van ontwikkelaars wereldwijd. Sinds 1999 wordt Netpbm onderhouden door Bryan Henderson en is het tegenwoordig in vrijwel elke Linux-distributie opgenomen.
PBM als zodanig is achterhaald. Mailservers kunnen probleemloos overweg met JPG's, PNG's en zelfs video's. De "kleurrijke" variant ppm wordt echter dagelijks gebruikt, in pipes, op Linux-systemen. Voor PBM blijft het educatieve aspect over: het laat zich prachtig uitleggen, prachtig begrijpen en – zo eenvoudig is PBM – op ruitjespapier uitleggen.
Bronnen
Netpbm PBM-formaatspecificatie
Netpbm Geschiedenis – zeer lezenswaardig artikel over de geschiedenis van pbm
Wiki: Jef Poskanzer
Converteren, openen en bewerken van PBM bestanden
Details over PBM bestanden
- Software voor het openen van PBM bestanden
- Software voor het bewerken van PBM bestanden
- MIME-type voor PBM
Geen reacties