É possível recuperar o nível de compressão de uma imagem png?

2

No meu projeto, lidamos com imagens PNG. Para criar (codificar) e ler (decodificar) png nós usamos libpng. A partir da libpng é possível especificar o nível de compressão usando png_set_compression_level() , e efetivamente podemos ver algumas mudanças no tamanho das imagens que nos fazem pensar que a compressão foi feita corretamente.

Mas, para testá-lo de forma adequada e confiável, eu preciso (e teria esperado, por coerência) uma função png_get_compression_level() que informa qual nível de compactação foi usado para criar esse arquivo png específico. Infelizmente este não é o caso.

Existe uma maneira de obter essa informação da imagem PNG (se possível via libpng é melhor, mas também de qualquer outra forma seria bom o suficiente para mim)?

    
por San Mosy 15.09.2016 / 17:36

2 respostas

0

experimente o ExifTool. Eu ainda não tenho.

link

localize a sintaxe do PNG para tags

download, nenhuma instalação necessária para a operação da linha de comando link extrair leia ajuda

executa o exiftool a partir do shell do cmd com tags e nome de arquivo

    O procedimento
  • pode depender da versão do arquivo no formato PNG, portanto, leia os detalhes da ajuda do comando (extensivo)
por 15.09.2016 / 17:46
0

De acordo com a especificação zlib ( RFC-1950 ), o zlib datastream dentro de um arquivo PNG contém dois Sinalizador "FLEVEL":

 FLEVEL (Compression level)
 These flags are available for use by specific compression
 methods.  The "deflate" method (CM = 8) sets these flags as
 follows:

    0 - compressor used fastest algorithm [levels 0, 1]
    1 - compressor used fast algorithm    [levels 2-5]
    2 - compressor used default algorithm [level 6]
    3 - compressor used maximum compression, slowest algorithm [levels 7-9]

pngcheck verifica o FLEVEL e relata isso da seguinte forma:

pngcheck -v rose.png
[...]
chunk IDAT at offset 0x00073, length 6742
  zlib: deflated, 16K window, maximum compression

Embora não seja possível distinguir entre todos os 10 níveis de compressão possíveis, pode ser a base para criar uma função libpng png_get_compression_level () que, pelo menos, informa algo.

    
por 16.09.2016 / 14:15