Является ли формат PNG без потерь, поскольку он имеет параметр сжатия?

Формат PNG должен быть форматом без потерь, но когда вы сохраняете изображение как файл PNG, вам предлагается выбрать уровень сжатия. Означает ли это, что формат PNG на самом деле не без потерь? Сегодняшний пост с вопросами и ответами SuperUser поможет развеять путаницу для любопытного читателя.

Сегодняшняя сессия вопросов и ответов предоставлена ​​нам благодаря SuperUser - подразделению Stack Exchange, группы веб-сайтов вопросов и ответов, управляемой сообществом.

Вопрос

Программа чтения SuperUser pkout хочет знать, влияет ли выбранный уровень сжатия на качество изображения PNG:

Насколько я понимаю, файлы PNG используют сжатие без потерь. Однако, когда я использую редактор изображений, например GIMP, и пытаюсь сохранить изображение как файл PNG, он запрашивает уровень сжатия от 0 до 9.

Если у него есть параметр сжатия, который влияет на визуальную точность сжатого изображения, как тогда PNG без потерь? Может кто-нибудь объяснить мне это? Получаю ли я поведение без потерь, только когда устанавливаю уровень сжатия 9?

Есть ли разница в качестве изображения в зависимости от выбранного вами уровня сжатия?

Ответ

У участников SuperUser, LordNeckbeard и jjlin, есть ответ для нас. Во-первых, LordNeckbeard:

PNG сжат, но без потерь

Уровень сжатия - это компромисс между размером файла и скоростью кодирования / декодирования. Чтобы обобщить, можно сказать, что даже форматы без изображений, такие как FLAC, имеют схожие концепции.

Различные уровни сжатия, одинаковый декодированный вывод

Хотя размеры файлов различаются из-за разных уровней сжатия, фактический декодированный вывод будет идентичным. Вы можете сравнить хэши MD5 декодированных выходных данных с ffmpeg с помощью мультиплексора MD5. Лучше всего это показать на нескольких примерах.

Создание файлов PNG

  • По умолчанию ffmpeg будет использовать -compression_level 100 для вывода PNG.
  • Быстрый небрежный тест показал, что 100 (самый высокий уровень сжатия) потребовалось примерно в три раза дольше для кодирования и в пять раз дольше для декодирования, чем 0 (самый низкий уровень сжатия) в этом примере.

Сравнить размер файла

Декодирование файлов PNG и отображение хэшей MD5

Поскольку оба хэша одинаковы, вы можете быть уверены, что декодированные выходные данные (несжатые необработанные файлы) точно такие же.

Далее следует ответ от jjlin:

PNG без потерь. Скорее всего, в этом случае GIMP использует не лучший выбор формулировок.

Думайте об этом как о качестве сжатия или уровне сжатия . При меньшем сжатии вы получаете файл большего размера, но на его создание уходит меньше времени, тогда как при более высоком сжатии вы получаете файл меньшего размера, создание которого занимает больше времени.

Обычно вы получаете убывающую отдачу, то есть не такое сильное уменьшение размера по сравнению с увеличением времени, которое требуется при переходе к максимальному уровню сжатия, но это зависит от вас.

Есть что добавить к объяснению? Отключить звук в комментариях. Хотите узнать больше ответов от других технически подкованных пользователей Stack Exchange? Ознакомьтесь с полной веткой обсуждения здесь.