Tudo sobre arquivos PBM
O PBM é provavelmente o formato de imagem mais simples do mundo. É representado apenas por 0 e 1, e cada número corresponde a um pixel. As linhas e colunas no texto determinam a posição na imagem. Assim, é possível criar imagens até mesmo com um editor de texto. É quase como se estivéssemos a colorir papel quadriculado com um lápis. O PBM não suporta compressão, canais alfa nem cores. Nem sequer tons de cinzento. Ele só consegue desenhar um pixel (1) ou não (0).
TLDR:
Os ficheiros PBM fazem parte de uma família de formatos mais ampla. O formato e os seus derivados ainda são utilizados atualmente, mas não são particularmente adequados para partilha e arquivo permanente. São grandes, são suportados por poucos programas, mas são altamente flexíveis e têm um bom desempenho. Quem encontrar um ficheiro PBM provavelmente tem nas mãos um produto intermédio ou uma imagem criada para fins didáticos. Isto porque o formato PBM é muito adequado para visualização, sendo praticamente autoexplicativo.
A história dos ficheiros PBM
O PBM foi inventado na década de 1980 por Jef Poskanzer, um programador de Berkeley que pretendia resolver um problema simples: enviar imagens por e-mail. Ora, na década de 1980, o e-mail ainda não estava tão desenvolvido como hoje. Apenas os caracteres ASCII podiam ser enviados de forma fiável; os ficheiros binários, como as imagens, ficavam frequentemente danificados durante a transmissão. Com o PBM, Poskanzer concebeu assim um formato de imagem que resolvia exatamente esse problema.
A estrutura técnica
Uma imagem PBM, na sua variante simples (P1), é composta por exatamente três partes: o número mágico, as dimensões e os dados de píxeis propriamente ditos. Opcionalmente, podem ser utilizados comentários, por exemplo, para o conteúdo.
| Componente | Exemplo | Significado |
|---|---|---|
| Número mágico | P1 |
PBM simples (variante ASCII) |
| Comentário | # mein bild |
Opcional, com # introduzido |
| Largura Altura | 24 7 |
Dimensões em pixels |
| Dados de raster | 0 1 1 0 ... |
1 = preto, 0 = branco |
O exemplo seguinte mostra uma imagem completa retirada da documentação:
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
(os 0 são apresentados ligeiramente mais escuros apenas para facilitar a visualização)
Entre os zeros e os uns, é claramente possível reconhecer o texto FEEP. PBM corresponde, portanto, ao ASCII binário ;).
Plain vs. Raw: P1 e P4
Poskanzer introduziu posteriormente uma variante binária e tornou-a a saída padrão das ferramentas Netpbm. A variante Plain (P1) surgiu historicamente primeiro, mas foi substituída devido à sua necessidade de espaço muito maior («lavishly wasteful» — «extremamente desperdiçadora»).
| Característica | Plain PBM (P1) |
Raw PBM (P4) |
|---|---|---|
| Dados de píxeis | Caracteres ASCII 0 e 1 |
Bits, agrupados em 8 por byte |
| Legível por humanos | Sim, na íntegra | Apenas o cabeçalho |
| Espaço de memória por pixel | ~2 bytes (caracteres + espaços em branco) | 1/8 byte (1 bit) |
| Comprimento máximo da linha | Recomenda-se 70 caracteres | Sem limite |
| Imagens por ficheiro | Exatamente 1 | Várias possíveis (desde julho de 2000) |
Hoje em dia, toda a família PBM, em particular o PPM, é frequentemente utilizada como formato intermédio. No caso de aplicação mais simples e breve, existe apenas num canal entre dois programas, ou seja, apenas durante o próprio tempo de execução. Isto leva-nos também aos pontos fortes do formato:
Pontos fortes dos ficheiros PBM
- Sem dependências: sem descodificador, sem biblioteca. Bastam algumas linhas de C, Python ou Shell para ler e escrever.
- Filosofia Unix: as ferramentas PBM são filtros. São encadeadas entre si:
cat bild.pbm | pbmtopgm | ppmtojpeg > out.JPG. Mais de 330 programas no pacote Netpbm funcionam assim. - Pedagogia: quem quiser compreender o processamento de imagens (não a edição de imagens) deve, idealmente, começar pelo PBM.
- Robusto: sem cabeçalhos danificados, sem blocos corrompidos. O conteúdo é tão reduzido que dificilmente algo pode correr mal. E, mesmo que um bit falhe, a imagem permanece legível.
A família PBM
O PBM não está sozinho. No final de 1988, Poskanzer expandiu a família com o PGM (Portable Gray Map, tons de cinza, número mágico P2/P5) e PPM (Portable Pixel Map, cor RGB, P3/P6). Juntos, formam o PNM: Portable Any Map. Mais tarde, surgiu ainda o PAM (P7) como extensão universal.
O PBM é a base e também o representante «mais radical» da família, oferecendo apenas duas possibilidades: luz acesa ou luz apagada — pixel presente ou ausente. Sem cor, sem transparência, sem tons de cinza. Apenas uma imagem a preto e branco legível diretamente no código-fonte.
Pbmplus e Netpbm
Poskanzer manteve o Pbmplus até à sua última publicação, no final de 1991. Depois disso, o projeto deixou de ser mantido. Em 1993, surgiu o Netpbm como um fork da comunidade, basicamente uma reedição do Pbmplus com correções de bugs e extensões de programadores de todo o mundo. Desde 1999, o Netpbm é mantido por Bryan Henderson e está hoje incluído em praticamente todas as distribuições Linux.
O PBM, enquanto tal, ficou ultrapassado. Os servidores de e-mail conseguem lidar sem problemas com JPGs, PNGs e até vídeos. A variante «colorida» ppm, porém, é utilizada diariamente, em pipes, em sistemas Linux. Ao PBM resta a parte educativa: é maravilhosamente fácil de explicar, maravilhosamente fácil de compreender e — tão simples é o PBM — de explicar em papel quadriculado.
Fontes
Netpbm Especificação do formato PBM
Netpbm História – artigo muito interessante sobre a história do pbm
Wiki: Jef Poskanzer
Converta, abra e edite arquivos PBM
Detalhes sobre arquivos PBM
- Software para abrir arquivos PBM
- Software para editar arquivos PBM
- Tipos MIME para PBM
Sem comentários