Дали форматът 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 Hashes
Тъй като и двете хешове са еднакви, можете да сте сигурни, че декодираните изходи (некомпресираните сурови файлове) са абсолютно еднакви.
Следван от отговора от jjlin:
PNG е без загуба. В този случай GIMP най-вероятно не използва най-добрия избор на формулировки.
Мислете за това като за качество на компресия или ниво на компресия. С по-ниска компресия, получавате по-голям файл, но това отнема по-малко време за производство, докато с по-висока компресия, получавате по-малък файл, който отнема повече време, за да произведе.
Обикновено получавате намаляваща възвръщаемост, т.е. не толкова намаляване на размера в сравнение с увеличаването на времето, необходимо за покачване до най-високите нива на компресия, но зависи от вас.
Имате ли какво да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други технологични потребители на Stack Exchange? Вижте пълната тема за дискусия тук.