A principal motivação para o formato PNG foi criar um substituto para o GIF que não fosse apenas gratuito, mas também uma melhoria em relação a ele essencialmente em todos os aspectos. Como resultado, a compactação PNG é totalmente sem perdas - ou seja, os dados da imagem original podem ser reconstruídos exatamente, pouco a pouco - assim como no GIF e na maioria das formas de TIFF.
O PNG usa um processo de compactação de dois estágios:
- Pré-compactação: filtragem (previsão)
- Compactação: DEFLATE (consulte wikipedia )
A etapa de pré-compressão é chamada de filtragem, que é um método de transformar reversivelmente os dados da imagem para que o mecanismo principal de compactação possa operar com mais eficiência.
Como um exemplo simples, considere uma sequência de bytes aumentando uniformemente de 1 a 255:
1, 2, 3, 4, 5, .... 255
Como não há repetição na sequência, ela é muito ruim ou não é muito difícil. Mas uma modificação trivial da sequência - a saber, deixando o primeiro byte sozinho, mas substituindo cada byte subseqüente pela diferença entre ele e seu antecessor - transforma a seqüência em um conjunto extremamente compressível:
1, 1, 1, 1, 1, .... 1
A transformação acima é sem perdas, já que nenhum byte foi omitido e é totalmente reversível.
O tamanho compactado desta série será muito reduzido, mas a série original ainda pode
ser perfeitamente reconstituído.
Os dados de imagem reais raramente são perfeitos, mas a filtragem melhora a compactação em imagens em tons de cinza e truecolor, e também pode ajudar em algumas imagens de paleta. O PNG suporta cinco tipos de filtros e um codificador pode optar por usar um filtro diferente para cada linha de pixels na imagem:
Oalgoritmofuncionaembytes,masparapixelsgrandes(porexemplo,RGBde24bitsouRGBAde64bits)somentebytescorrespondentessãocomparados,oquesignificaqueoscomponentesvermelhosdascoresdepixelsãomanipuladosseparadamentedoscomponentesdepixelverdeeazul.
Paraescolheromelhorfiltroparacadalinha,umcodificadorprecisariatestartodasascombinaçõespossíveis.Issoéclaramenteimpossível,jáqueatéumaimagemde20linhasexigiriatestesdemaisde95trilhõesdecombinações,emque"testar" envolveria a filtragem e a compactação da imagem inteira.
Os níveis de compactação são normalmente definidos como números entre 0 (nenhum) e 9 (melhor).
Referem-se a compensações entre velocidade e tamanho e relacionam-se com quantas combinações
de filtros de linha devem ser tentados. Não há padrões quanto a esses níveis de compressão,
Assim, todo editor de imagens pode ter seus próprios algoritmos sobre quantos filtros tentar quando
otimizar o tamanho da imagem.
Nível de compactação 0 significa que os filtros não são usados, o que é rápido, mas é um desperdício.
Níveis mais altos significam que mais e mais combinações são experimentadas em linhas de imagem e somente as melhores
os que são retidos.
Eu diria que a abordagem mais simples para a melhor compactação é testar incrementalmente cada linha com cada filtro, salvar o menor resultado e repetir para a próxima linha. Isso equivale a filtrar e compactar toda a imagem cinco vezes, o que pode ser um trade-off razoável para uma imagem que será transmitida e decodificada muitas vezes. Menores valores de compressão farão menos, a critério
do desenvolvedor da ferramenta.
Além dos filtros, o nível de compactação também pode afetar o nível de compactação zlib
que é um número entre 0 (sem deflação) e 9 (deflação máxima). Como o 0-9 especificado
os níveis afetam o uso de filtros, que são o principal recurso de otimização do PNG,
ainda depende do desenvolvedor da ferramenta.
A conclusão é que o PNG tem um parâmetro de compactação que pode reduzir significativamente o tamanho do arquivo, tudo sem a perda de um único pixel.
Fontes:
Gráficos de rede portátil da Wikipedia
documentação de documentação Capítulo 9 - Compressão e filtragem