O que é um arquivo PBM?
Um arquivo Portable Bitmap é um formato raster da família Netpbm para imagens monocromáticas. Cada pixel tem um de dois valores, representados por uma codificação textual ou binária deliberadamente simples.
Como funcionam os arquivos PBM
PBM é o formato de dois níveis da família Netpbm, ao lado de PGM (escala de cinza) e PPM. PNM é o nome coletivo desses três, e PAM é um quarto formato, mais geral. Uma imagem PBM consiste em um cabeçalho ASCII curto seguido por uma matriz de pixels: um número mágico de dois caracteres, a largura e a altura como números decimais separados por espaços em branco e, depois, as linhas de cima para baixo, cada uma da esquerda para a direita. PBM não tem um campo de valor máximo, que PGM acrescenta após a altura. Antes da matriz de pixels, o texto de um # até o fim da linha é um comentário. A forma bruta empacota pixels em bytes, enquanto a forma textual, mais antiga, escreve cada pixel como um 1 ou 0 em ASCII. Imagens mais complexas precisam de PGM, PPM, PAM ou outro formato.
Informações essenciais
- Identifique a variante pelos dois primeiros bytes, não pelo sufixo:
P4é a forma binária com bits empacotados (bruta) eP1é a forma ASCII (textual). O sufixo convencional é.pbm, mas.pnmtambém é usado para PBM, PGM e PPM, e nenhum tipo de mídia está registrado na IANA (image/x-portable-bitmapé o valor convencional). Verifique se sua biblioteca lê ambas as variantes: a documentação do Pillow diz que ele escreve as formas brutas e lê arquivos textuais deP1aP3somente a partir da versão 9.2.0. - No PBM bruto, cada linha é empacotada com 8 pixels por byte, começando pelo bit mais significativo, e o último byte da linha é preenchido com bits de valor irrelevante. Portanto, uma linha ocupa, em bytes, a largura dividida por 8, arredondada para cima, e um leitor que trata a matriz de pixels como um único fluxo contínuo de bits desalinha todas as linhas após a primeira sempre que a largura não é múltipla de 8. Exatamente um caractere de espaço em branco separa a altura da matriz de pixels.
- Um
1armazenado representa preto e um0representa branco, o inverso de PGM, em que zero é preto e o valor máximo é branco, e de uma imagem PAM com tipo de tuplaBLACKANDWHITE, que usa 0 para preto e 1 para branco. O código que mapeia os bits PBM armazenados diretamente para valores de luminosidade ou amostras PAM precisa invertê-los. Uma biblioteca de decodificação pode já ter feito isso: Pillow transforma um 1 armazenado em 0 e um 0 armazenado em 255, então verifique o que sua biblioteca retorna antes de inverter novamente. - As duas variantes diferem em mais do que a codificação. Um arquivo textual contém exatamente uma imagem, não tem bits de preenchimento, ignora espaços em branco dentro da matriz de pixels e deve limitar as linhas a 70 caracteres. Um arquivo bruto pode conter várias imagens consecutivas, algo permitido pela especificação desde julho de 2000, e ela observa que a maioria das ferramentas ainda lê apenas a primeira. Para obter a maior compatibilidade possível, a especificação recomenda escrever
P4, uma quebra de linha, a largura e a altura separadas por um espaço, uma quebra de linha e uma única matriz de pixels.
Quando os arquivos PBM são importantes
Use PBM como formato intermediário para dados de dois níveis, como máscaras binárias transferidas entre ferramentas de imagem. A especificação do Netpbm o descreve como um intermediário que não leva a eficiência em conta e diz que não é um formato que normalmente se usaria para armazenar ou transmitir um arquivo. Ele não pode representar escala de cinza, cor ou transparência parcial sem conversão para outro formato.
Como a Transloadit ajuda com arquivos PBM
A tabela de formatos de imagem da Transloadit lista PBM como um formato que seus Robots baseados em ImageMagick, incluindo /image/resize, podem ler e escrever, e o parâmetro format desse Robot aceita qualquer formato que a tabela marque como disponível para escrita.
A tabela não informa se a saída PBM é escrita na variante bruta ou textual, então verifique o número mágico da saída se a próxima ferramenta precisar de uma delas.
Explore os formatos de arquivo e os recursos de compressão da Transloadit
Fontes
- Netpbm: especificação do formato PBM (estrutura, subconjunto mínimo, PBM textual, tipo de mídia, compatibilidade)
- Netpbm: PNM, o nome coletivo de PBM, PGM e PPM
- Netpbm: especificação do formato PGM (valor máximo, zero representa preto)
- Netpbm: especificação do formato PAM (tipo de tupla BLACKANDWHITE, planos de opacidade)
- Manual do Pillow: seção PPM (suporte à leitura e escrita de PBM, PGM e PPM por versão)
- Código-fonte do Pillow: PpmImagePlugin.py (decodificação de PBM com bits invertidos)
- Issue #860 do Pillow: não é possível identificar o arquivo de imagem ao abrir arquivos .pbm, .pgm e .ppm em ASCII