O formato PNG não tem perdas, visto que tem um parâmetro de compactação?

O formato PNG deve ser um formato sem perdas, mas quando você salva uma imagem como um arquivo PNG, é solicitado que você escolha um nível de compactação. Isso significa que o formato PNG não é, na verdade, sem perdas, afinal? A postagem de hoje com perguntas e respostas sobre o superusuário ajuda a esclarecer a confusão para um leitor curioso.

A sessão de perguntas e respostas de hoje chega até nós como cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas voltado para a comunidade.

A questão

O leitor de superusuário pkout quer saber se a qualidade de uma imagem PNG é afetada pelo nível de compressão escolhido:

Pelo que entendi, os arquivos PNG usam compactação sem perdas. No entanto, quando estou usando um editor de imagens como o Gimp e tento salvar uma imagem como um arquivo PNG, ele pede um nível de compactação entre 0 e 9.

Se ele tem um parâmetro de compressão que afeta a precisão visual da imagem comprimida, como o PNG é sem perdas? Alguém pode explicar isso para mim? Obtenho um comportamento sem perdas apenas quando defino o nível de compressão para 9?

Existe uma diferença na qualidade da imagem dependendo do nível de compressão que você escolher?

A resposta

Os contribuidores SuperUser LordNeckbeard e jjlin têm a resposta para nós. Primeiro, LordNeckbeard:

PNG é compactado, mas sem perdas

O nível de compactação é uma compensação entre o tamanho do arquivo e a velocidade de codificação / decodificação. Para generalizar excessivamente, até mesmo formatos que não sejam de imagem, como FLAC, têm conceitos semelhantes.

Diferentes níveis de compressão, mesma saída decodificada

Embora os tamanhos dos arquivos sejam diferentes devido aos diferentes níveis de compressão, a saída decodificada real será idêntica. Você pode comparar os hashes MD5 das saídas decodificadas com o ffmpeg usando o muxer MD5. Isso é melhor mostrado com alguns exemplos.

Criar arquivos PNG

  • Por padrão, o ffmpeg usará -compression_level 100 para saída PNG.
  • Um teste rápido e desleixado mostrou que 100 (o nível de compressão mais alto) demorou cerca de três vezes mais para codificar e cinco vezes mais para decodificar do que 0 (o nível de compressão mais baixo) neste exemplo.

Comparar o tamanho do arquivo

Decodifique os arquivos PNG e mostre os hashes MD5

Como os dois hashes são iguais, você pode ter certeza de que as saídas decodificadas (os arquivos raw descompactados) são exatamente as mesmas.

Seguido pela resposta de jjlin:

PNG não tem perdas. O GIMP provavelmente não está usando a melhor escolha de texto neste caso.

Pense nisso como qualidade de compressão ou nível de compressão. Com compactação mais baixa, você obtém um arquivo maior, mas leva menos tempo para produzir, enquanto com compactação mais alta, você obtém um arquivo menor que leva mais tempo para produzir.

Normalmente, você obtém retornos decrescentes, ou seja, não tanto diminuição no tamanho em comparação com o aumento no tempo que leva para atingir os níveis de compressão mais altos, mas é com você.

Tem algo a acrescentar à explicação? Som desligado nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui.


$config[zx-auto] not found$config[zx-overlay] not found