Skip to content

Czy format PNG jest bezstratny, ponieważ ma parametr kompresji?

27 de lipiec de 2021
how is the png format lossless since it has a compression parameter 00

Format PNG ma być formatem bezstratnym, ale gdy zapisujesz obraz jako plik PNG, zostaniesz poproszony o wybranie poziomu kompresji. Czy to oznacza, że ​​format PNG wcale nie jest bezstratny? Dzisiejszy post z pytaniami i odpowiedziami dla SuperUser pomaga wyjaśnić zamieszanie dla ciekawskiego czytelnika.

Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser — pododdziału Stack Exchange, społecznościowej grupy witryn internetowych z pytaniami i odpowiedziami.

Pytanie

Czytnik SuperUser pkout chce wiedzieć, czy wybrany poziom kompresji ma wpływ na jakość obrazu PNG:

Jak rozumiem, pliki PNG używają kompresji bezstratnej. Jednak gdy używam edytora obrazów, takiego jak Gimp, i próbuję zapisać obraz jako plik PNG, prosi o poziom kompresji w zakresie od 0 do 9.

Jeśli ma parametr kompresji, który wpływa na wizualną precyzję skompresowanego obrazu, w jaki sposób PNG jest bezstratny? Czy ktoś może mi to wyjaśnić? Czy uzyskam bezstratne zachowanie tylko wtedy, gdy ustawię poziom kompresji na 9?

Czy jest różnica w jakości obrazu w zależności od wybranego poziomu kompresji?

Odpowiedź

Współtwórcy SuperUser, LordNeckbeard i jjlin, mają dla nas odpowiedź. Po pierwsze, LordNeckbeard:

PNG jest skompresowany, ale bezstratny

Poziom kompresji to kompromis między rozmiarem pliku a szybkością kodowania/dekodowania. Aby nadmiernie uogólnić, nawet formaty bez obrazu, takie jak FLAC, mają podobne koncepcje.

Różne poziomy kompresji, ten sam dekodowany sygnał wyjściowy

Chociaż rozmiary plików różnią się ze względu na różne poziomy kompresji, rzeczywisty dekodowany sygnał wyjściowy będzie identyczny. Możesz porównać Skróty MD5 dekodowanych wyjść za pomocą ffmpeg przy użyciu Muxer MD5. Najlepiej widać to na kilku przykładach.

Utwórz pliki PNG File

1627368508 932 Czy format PNG jest bezstratny poniewaz ma parametr kompresji

  • Domyślnie ffmpeg użyje -compression_level 100 dla wyjścia PNG.
  • Szybki, niechlujny test wykazał, że kodowanie 100 (najwyższy poziom kompresji) trwało około trzy razy dłużej, a dekodowanie pięć razy dłużej niż 0 (najniższy poziom kompresji) w tym przykładzie.

Porównaj rozmiar pliku

1627368508 946 Czy format PNG jest bezstratny poniewaz ma parametr kompresji

Odkoduj pliki PNG i pokaż skróty MD5

1627368508 257 Czy format PNG jest bezstratny poniewaz ma parametr kompresji

Ponieważ oba skróty są takie same, możesz mieć pewność, że dekodowane dane wyjściowe (nieskompresowane pliki raw) są dokładnie takie same.

Następnie odpowiedź od jjlin:

PNG jest bezstratny. GIMP najprawdopodobniej nie używa najlepszego doboru sformułowań w tym przypadku.

Pomyśl o tym jako jakość kompresji lub poziom kompresji. Przy niższej kompresji otrzymujesz większy plik, ale jego wytworzenie zajmuje mniej czasu, podczas gdy przy wyższej kompresji otrzymujesz mniejszy plik, którego produkcja trwa dłużej.

Zazwyczaj otrzymujesz malejące zwroty, tj. nie tak duże zmniejszenie rozmiaru w porównaniu z wydłużeniem czasu, jaki zajmuje przejście do najwyższych poziomów kompresji, ale to zależy od Ciebie.

Masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych doświadczonych technologicznie użytkowników Stack Exchange? Sprawdź pełny wątek dyskusji tutaj.

Czy ten post był pomocny?