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

    Дали форматът 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? Вижте пълната тема за дискусия тук.