2

В моем проекте мы имеем дело с изображениями PNG. Для создания (кодирования) и чтения (декодирования) изображений png мы используем libpng. Из libpng можно указать уровень сжатия, используя png_set_compression_level() , и эффективно мы можем увидеть некоторые изменения в размере изображений, которые заставляют нас думать, что сжатие было сделано правильно.

Но для того, чтобы правильно и надежно протестировать его, мне нужна (и я ожидал бы, для согласованности) png_get_compression_level() которая сообщает вам, какой уровень сжатия использовался для создания этого конкретного файла png. К сожалению, это не случай.

Есть ли способ получить эту информацию из png-образа (если это возможно через libpng, то лучше, но для меня будет достаточно другого способа)?

2 ответа2

0

попробуй ExifTool. Я еще не.

http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/index.html

найти синтаксис PNG для тегов

загрузить, установка не требуется для работы с командной строкой http://www.sno.phy.queensu.ca/~phil/exiftool/ извлечь справку по чтению

запустить exiftool из оболочки cmd с тегами и именем файла

  • Процедура может зависеть от версии файла формата PNG, поэтому прочтите подробности справки по команде (подробно)
0

Согласно спецификации zlib (RFC-1950) поток данных zlib в файле PNG содержит двухразрядный флаг "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 проверяет FLEVEL и сообщает об этом так:

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

Хотя это не будет различать все 10 возможных уровней сжатия, оно может послужить основой для создания функции libpng png_get_compression_level(), которая по крайней мере скажет вам кое-что.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .