Tutto su file PBM
Il PBM è probabilmente il formato immagine più semplice al mondo. È rappresentato solo da 0 e 1 e ogni numero corrisponde a un pixel. Le righe e le colonne nel testo determinano la posizione nell'immagine. In questo modo è possibile creare immagini anche con un editor di testo. È quasi come colorare un foglio a quadretti con una matita. Il PBM non supporta la compressione, i canali alfa né i colori. Nemmeno la scala di grigi. Può semplicemente disegnare un pixel (1) o non farlo (0).
TLDR:
I file PBM fanno parte di una famiglia di formati più ampia. Il formato e i suoi derivati sono ancora in uso, ma non sono particolarmente adatti alla condivisione e all'archiviazione a lungo termine. Sono di grandi dimensioni, sono supportati da pochi software, ma sono altamente flessibili e performanti. Chi trova un file PBM ha probabilmente tra le mani un prodotto intermedio o un'immagine creata a scopo didattico. Il formato PBM è infatti molto adatto alla visualizzazione ed è praticamente autoesplicativo.
La storia dei file PBM
Il PBM è stato inventato negli anni '80 da Jef Poskanzer, un programmatore di Berkeley che voleva risolvere un semplice problema: inviare immagini via e-mail. Negli anni '80, però, la posta elettronica non era ancora così sviluppata come oggi. Si potevano inviare in modo affidabile solo caratteri ASCII, mentre i file binari come le immagini spesso si danneggiavano durante il trasferimento. Con PBM, Poskanzer progettò quindi un formato immagine che risolvesse proprio questo problema.
La struttura tecnica
Un'immagine PBM nella sua variante Plain (P1) è composta esattamente da tre parti: il Magic Number, le dimensioni e i dati dei pixel veri e propri. È possibile inserire commenti opzionali, ad esempio relativi al contenuto.
| Componente | Esempio | Significato |
|---|---|---|
| Numero magico | P1 |
PBM Plain (variante ASCII) |
| Commento | # mein bild |
Opzionale, con # introdotto |
| Larghezza Altezza | 24 7 |
Dimensioni in pixel |
| Dati raster | 0 1 1 0 ... |
1 = nero, 0 = bianco |
L'esempio seguente mostra un'immagine completa tratta dalla documentazione:
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
(gli 0 sono rappresentati in modo leggermente più scuro solo per una migliore visualizzazione)
Tra gli zero e gli uno si riconosce chiaramente il testo FEEP. PBM corrisponde quindi all'ASCII binario ;).
Plain vs. Raw: P1 e P4
Poskanzer ha successivamente introdotto una variante binaria, rendendola l'output standard degli strumenti Netpbm. La variante Plain (P1) è stata la prima storicamente, ma è stata sostituita a causa del suo fabbisogno di spazio molto più elevato ("lavishly wasteful" – "estremamente dispendiosa").
| Caratteristica | Plain PBM (P1) |
Raw PBM (P4) |
|---|---|---|
| Dati pixel | Caratteri ASCII 0 e 1 |
bit, raggruppati a 8 per byte |
| Leggibile dall'uomo | Sì, completamente | Solo l'intestazione |
| Spazio di memoria per pixel | ~2 byte (carattere + spazio bianco) | 1/8 byte (1 bit) |
| Lunghezza massima della riga | Si consigliano 70 caratteri | Nessun limite |
| Immagini per file | Esattamente 1 | Possibili più immagini (dal luglio 2000) |
Oggi l'intera famiglia PBM, in particolare PPM, viene spesso utilizzata come formato intermedio. Nel caso d'uso più semplice e breve, esso vive solo in un pipe tra due programmi, quindi solo per il tempo di esecuzione stesso. Questo ci porta anche AI punti di forza del formato:
Punti di forza dei file PBM
- Nessuna dipendenza: nessun decodificatore, nessuna libreria. Bastano poche righe di C, Python o Shell per leggere e scrivere.
- Filosofia Unix: gli strumenti PBM sono filtri. Si collegano tra loro tramite pipe:
cat bild.pbm | pbmtopgm | ppmtojpeg > out.JPG. Oltre 330 programmi nel pacchetto Netpbm funzionano in questo modo. - Didattica: chi vuole capire l'elaborazione delle immagini (non l'editing delle immagini) dovrebbe idealmente iniziare con PBM.
- Robustezza: nessun header danneggiato, nessun chunk corrotto. Il contenuto è talmente ridotto che difficilmente qualcosa può andare storto. E se anche un bit dovesse andare perso, l'immagine rimane leggibile.
La famiglia PBM
PBM non è l'unico. Alla fine del 1988, Poskanzer ampliò la famiglia con PGM (Portable Gray Map, scala di grigi, numero magico P2/P5) e PPM (Portable Pixel Map, colore RGB, P3/P6). Insieme formano il PNM: Portable Any Map. Successivamente è arrivato anche il PAM (P7) come estensione universale.
PBM è il fondamento e anche il rappresentante più "radicale" della famiglia e offre solo due possibilità: luce accesa o spenta – pixel presente o assente. Nessun colore, nessuna trasparenza, nessuna scala di grigi. Solo un'immagine in bianco e nero leggibile direttamente nel codice sorgente.
Pbmplus e Netpbm
Poskanzer ha curato Pbmplus fino alla sua ultima pubblicazione alla fine del 1991. Successivamente il progetto non è stato più aggiornato. Nel 1993 è nato Netpbm come fork della comunità, fondamentalmente una riedizione di Pbmplus con correzioni di bug ed estensioni da parte di sviluppatori di tutto il mondo. Dal 1999 Netpbm è curato da Bryan Henderson ed è oggi incluso praticamente in ogni distribuzione Linux.
PBM in quanto tale è ormai superato. I server di posta elettronica sono in grado di gestire senza problemi file JPG, PNG e anche video. La variante "colorata" ppm viene tuttavia utilizzata quotidianamente, nei pipe, sui sistemi Linux. A PBM rimane la funzione educativa: è facile da spiegare, facile da comprendere e – PBM è così semplice – da illustrare su carta millimetrata.
Fonti
Netpbm Specifiche del formato PBM
Netpbm Storia – articolo molto interessante sulla storia di pbm
Wiki: Jef Poskanzer
Converti, apri e modifica i file PBM
Dettagli sui file PBM
- Software per l'apertura di file PBM
- Software per la modifica di file PBM
- Tipo MIME per PBM
Nessun commento