If-Koubou

Czy format PNG jest bezstratny, skoro ma parametr kompresji?

Czy format PNG jest bezstratny, skoro ma parametr kompresji? (Jak)

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 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 - poddziału Stack Exchange, społecznościowego forum z pytaniami i odpowiedziami.

Pytanie

Czytnik superużytkownika 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 on parametr kompresji, który wpływa na wizualną precyzję skompresowanego obrazu, to jak jest bezstratny PNG? Czy ktoś może mi to wyjaśnić? Czy zachowanie bezstratne występuje tylko wtedy, gdy ustawię poziom kompresji na 9?

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

Odpowiedź

Pomocnicy 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

Chociaż rozmiary plików są różne ze względu na różne poziomy 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.

Twórz pliki PNG

  • 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, aby go odkodować niż 0 (najniższy poziom kompresji) w tym przykładzie.

Porównaj rozmiar pliku

Dekoduj pliki PNG i pokaż hashy MD5

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

Poniżej znajduje się odpowiedź od jjlin:

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

Pomyśl o tym jak jakość kompresji lub poziom 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ę zmniejszone zwroty, to jest 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.