O formato
ppm é usado para armazenamento de imagens coloridas, que podem ser salvas tanto em arquivos com o padrão ASCII quanto arquivos com o padrão binário. É um formato pouco usado hoje em dia, devido ao fato de ser ineficiente por possuir redundância de informação no armazenamento, além de conter tons de cores que o olho humano não consegue diferenciar.
Então qual a utilidade do formato? O ponto central da questão é, ele é muito fácil na questão de acesso e manipulação, sendo uma excelente opção para entender o funcionamento de filtro em imagens, ou até mesmo a criação e teste de filtros ou efeitos próprios. A maioria dos leitores de imagens padrões do
Linux suportam este tipo de imagem, o mesmo serve para Mac OS, porém testes não foram feitos para o sistema operacional Windows ou sistemas móveis.
O padrão de um arquivo ppm é o seguinte (cada número representa uma linha):
- Dois caracteres de identificação do tipo de arquivo.
- Largura e altura (necessariamente nesta ordem!), sendo ambas um número inteiro, representando pixeis e separadas por espaço.
- O valor máximo de cada cor, representado por um número inteiro. O mesmo deverá ser maior que 0 até 255 (inclusive).
- O valor para cada cor do plano RGB, sendo o menor valor possível 0 e o maior valor o número definido na linha anterior.
Características explicadas:
1. A família de imagens no formato ppm contém mais dois irmãos por assim dizer. O formato pbm e o formato pgm, qual não é a finalidade deste artigo esclarecer como funcionam, mas pode ser encontrada uma breve introdução no seguinte link:
Por esse motivo a primeira linha contém o arquivo de o tipo de imagem a ser lido. O tipo que nos interessa é o "P3". Sendo que ambos são usados para a manipulação de imagens coloridas a partir da junção de três tons, RGB (red, green, blue). Para a obtenção de uma cor final, podemos ler praticamente qualquer arquivo, já que sempre segue-se o mesmo padrão.
2. Larguras e alturas devem ser dadas na respectiva ordem, sempre representadas por inteiros. Lembrando que pelo fato de o arquivo manter redundância no formato, não fazendo como JPG e outros formatos que comprimem a imagem, quanto maior a dimensão, maior será o espaço ocupado no disco.
3. O valor máximo que cada tom poderá assumir, sendo que este valor serve igualmente para os três tons (vermelho, verde, azul), e nunca deve ser menor que 1 ou maior que 255. Sendo que o 0 (zero) representa a cor em seu tom mais forte, e o 255 representa em seu tom mais claro, ou seja, quando as três forem zero o resultado será a cor preta, quando forem 255 o resultado será a cor branca, o intermédio disso dará a cor correspondente ao tom ou tons dominantes.
4. O resto do arquivo é preenchida pela imagem em si. O arquivo lê um valor inteiro de cada vez, juntando de três em três valores para formar um pixel, por isso o arquivo pode conter tanto um pixel por linha (três inteiros), ou um tom por linha (um inteiro). Podem também ser estabelecidos outros padrões para facilitar a leitura, o único pré-requisito é o armazenamento separado de cada tom.
PS - Arquivos do tipo ppm podem também conter comentários, que se iniciam por #, e faz com que o leitor de imagem ignore a linha. Porém essa ideia será abstraída para diminuir a complexidade do código, mas não existe nenhum segredo na forma de faze-lo, tudo que precisamos é detectar o primeiro caractere de cada linha e quando o # for encontrado, ler um string.
Abaixo estão duas imagens em ppm, para que possa ver como funciona o padrão o indicado é a imagem 1, para acompanhar as próximas páginas e conseguir ver os efeitos sendo aplicados o recomendado é a imagem 2.
Fontes: