Główna » jak » Czy format PNG jest bezstratny, skoro ma parametr kompresji?

    Czy format PNG jest bezstratny, skoro ma parametr kompresji?

    Format PNG ma być formatem bezstratnym, ale kiedy 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, opartego na społecznościach grupowania witryn 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 otrzymuję zachowanie bezstratne 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ź

    Dostawcy 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.

    Utwórz pliki PNG

    • Domyślnie ffmpeg używa -compression_level 100 dla wyjścia PNG.
    • Szybki, niechlujny test pokazał, że 100 (najwyższy poziom kompresji) zajęło około trzy razy dłużej, 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. Z mniejszą kompresją 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 tak duży spadek 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.