30Aug

Czy format PNG jest bezstratny, skoro ma parametr kompresji?

click fraud protection

how-is-the-png-format-lossless-since-it-has-a-compression-parameter-00

Format PNG ma być formatem bezstratnym, ale gdy zapiszesz obraz jako plik PNG, zostaniesz poproszony o wybranie poziomu kompresji. Czy to oznacza, że ​​format PNG w rzeczywistości nie jest bezstratny? Dzisiejszy post SuperUser Q & A pomaga wyjaśnić zamieszanie dla ciekawskiego czytelnika.

Dzisiejsze pytanie &Sesja odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, opartego na społecznościach grupy Q & A.

Pytanie Pkout czytnika

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

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

Jeśli ma parametr kompresji, który wpływa na wizualną dokładność skompresowanego plikuobraz, jak wtedy bezstratny PNG?Czy ktoś może mi to wyjaśnić?Czy zachowanie bezstratne występuje tylko wtedy, gdy ustawię poziom kompresji na 9?

instagram viewer

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

Odpowiedź Odpowiedzi

SuperUser LordNeckbeard i Jjlin mają dla nas odpowiedź.Po pierwsze, LordNeckbeard:

PNG jest skompresowany, ale bezstratny

Poziom kompresji jest kompromisem między rozmiarem pliku a prędkością kodowania / dekodowania. Aby nadmiernie uogólnić, nawet formaty nie będące obrazami, takie jak FLAC, mają podobne koncepcje.

Różne poziomy kompresji, ten sam zakodowany wynik

Mimo że rozmiary plików są różne z powodu różnych poziomów kompresji, rzeczywiste zdekodowane dane wyjściowe będą identyczne. Możesz porównać skróty MD5 dekodowanych wyników z ffmpeg przy użyciu muxera MD5.Najlepiej widać to z kilkoma przykładami.

Utwórz pliki PNG

how-is-the-png-format-lossless-since-it-has-a-compression-parameter-01

  • Domyślnie ffmpeg użyje -compression_level 100 dla wyjścia PNG.
  • Szybki, niechlujny test pokazał, że 100( najwyższy poziom kompresji) zajęło około trzykrotnie więcej czasu, aby zakodować i pięć razy dłużej do odkodowania niż 0( najniższy poziom kompresji) w tym przykładzie.

Porównaj rozmiar pliku

how-is-the-png-format-lossless-since-it-has-a-compression-parameter-02

Dekoduj pliki PNG i pokaż skróty MD5

how-is-the-png-format-lossless-since-it-has-a-compression-parameter-03

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

Następnie odpowiedź od jjlin:

PNG jest bezstratny. GIMP najprawdopodobniej nie używa najlepszego wyboru sformułowania w tym przypadku.

Pomyśl o tym jako o jako kompresji lub o kompresji .Przy niższej kompresji dostajesz większy plik, ale zajmuje mniej czasu, a przy wyższej kompresji dostajesz mniejszy plik, który zajmuje więcej czasu.

Zwykle uzyskuje się malejące zyski, tj. Nie tyle zmniejszenie rozmiaru w porównaniu ze wzrostem czasu, jaki zajmuje przejście do najwyższych poziomów kompresji, ale to zależy od ciebie.

Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.