/ / Дали форматът PNG е без загуба, тъй като има параметър на компресия?

PNG форматът е без загуба, тъй като има компресионен параметър?

как-е-на-PNG формат без загуби--тъй-то-е-а-компресия-параметър-00

Предполага се, че форматът PNG е без загубаформат, но когато запазвате изображение като PNG файл, ще бъдете помолени да изберете ниво на компресия. Това означава ли, че PNG форматът всъщност не е без загуби? Днешната публикация на SuperUser Q&A помага да се изчисти объркването на любопитен читател.

Днешната сесия „Въпроси и отговори“ идва при нас от любезното съдействие на SuperUser - подразделение на Stack Exchange, общностно групиране на Q&A уебсайтове.

Въпроса

Superkser четец pkout иска да знае дали качеството на изображение в PNG се влияе от избраното ниво на компресия:

Както го разбирам, PNG файловете използват без загубикомпресия. Когато обаче използвам редактор на изображения, като Gimp и се опитвам да запазя изображение като PNG файл, той изисква ниво на компресия в диапазон от 0 до 9.

Ако има параметър на компресия, който влияевизуалната прецизност на компресираното изображение, как PNG не губи тогава? Може ли някой да ми обясни това? Получавам ли поведение без загуби само когато настроя нивото на компресия на 9?

Има ли разлика в качеството на изображението в зависимост от степента на компресия, която сте избрали?

Отговорът

Отговорниците за SuperUser LordNeckbeard и jjlin имат отговор за нас. Първо, LordNeckbeard:

PNG е компресиран, но без загуба

Нивото на компресия е компромис между размера на файла и скоростта на кодиране / декодиране. За прекалено генерализиране дори формати без изображения като FLAC имат подобни понятия.

Различни нива на компресия, един и същ декодиран изход

Въпреки че размерите на файловете са различни порадиразлични нива на компресия, действителният декодиран изход ще бъде идентичен. Можете да сравните хешовете на MD5 на декодираните изходи с ffmpeg, като използвате MD5 муксера. Това е най-добре показано с някои примери.

Създайте PNG файлове

как-е-на-PNG формат без загуби--тъй-то-е-а-компресия-параметър-01

  • По подразбиране ffmpeg ще използва -compression_level 100 за изход PNG.
  • Бърз, полов тест показа, че 100 (най-високото ниво на компресия) отне приблизително три пъти по-дълго време за кодиране и пет пъти по-дълго за декодиране от 0 (най-ниското ниво на компресия) в този пример.

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

как-е-на-PNG формат без загуби--тъй-то-е-а-компресия-параметър-02

Дешифрирайте PNG файловете и покажете MD5 хеши

как-е-на-PNG формат без загуби--тъй-то-е-а-компресия-параметър-03

Тъй като и двата хеша са еднакви, можете да сте сигурни, че декодираните изходи (некомпресираните сурови файлове) са абсолютно еднакви.

Следван от отговора от jjlin:

PNG е без загуби. GIMP най-вероятно не използва най-добрия избор на формулировки в този случай.

Мислете за това качество на компресията или ниво на компресия, С по-ниска компресия получавате по-голям файл, но отнема по-малко време, докато при по-голяма компресия получавате по-малък файл, който отнема повече време.

Обикновено получавате намаляваща възвръщаемост, т.е. не толкова намаляване на размера в сравнение с увеличаването на времето, което отнема при достигане на най-високите нива на компресия, но зависи от вас.


Имате какво да добавите към обяснението? Озвучете в коментарите. Искате ли да прочетете повече отговори от други потребители на Stack Exchange, работещи в технологиите? Вижте цялата дискусионна тема тук.