Dlaczego ludzie używają obrazów JPG?

17

Wszędzie widzę obrazy JPG. Ale dlaczego?

Pliki PNG mają nieprzezroczystość, podczas gdy pliki JPG nie. Próbowałem wyeksportować niektóre obrazy do PNG i JPG, aby porównać rozmiar, i oba albo pasują do siebie, albo PNG jest mniejszy (w zależności od obrazu oczywiście).

wprowadź opis zdjęcia tutaj

To jest obraz JPG o wymiarach 512 x 512, z napisem „JPG”

wprowadź opis zdjęcia tutaj

I to jest obraz PNG 512x512 z napisem „PNG”.

JPG miał 31,7 kb, a PNG 25,9 kb

Co więc daje?

JediBurrell
źródło
3
Powinieneś także wiedzieć, że .png jest bezstratny, podczas gdy .jpg nie. Tak więc .png lepiej nadaje się do obrazów źródłowych, a .jpg bardziej nadaje się do publikacji.
Nikt
1
@ Nikt PNG nie może być stratny ani bezstratny. W zależności od sposobu wyeksportowania.
DA01
8
Do Twojej wiadomości, rzadko używasz JPG do grafiki liniowej, podobnie jak przykłady, które tu wykorzystujesz. Opierając się wyłącznie na tych przykładach, nie używałbyś JPG. Gdyby to były zdjęcia, zdasz sobie sprawę, że masz zupełnie inne wyniki.
DA01
7
Naprawdę nie mogę uwierzyć, że to pytanie przetrwało dłużej niż 10 sekund.
zwykły ubranie
2
@ DA01 PNG nigdy nie jest stratny, ale możesz z powodzeniem manipulować obrazem przed wyeksportowaniem go do PNG, aby go zmniejszyć. Specyfikacja PNG nic o tym nie wie.
Nikt

Odpowiedzi:

35

Ponieważ są znacznie lepsze w kompresji zdjęć o dużej liczbie kolorów i nieregularnych kształtach, takich jak zdjęcia.

Czy próbowałeś tego samego epxeriment, co zrobiłeś, ale potem ze zdjęciem? .Png najprawdopodobniej będzie zauważalnie większy niż jakikolwiek .jpg, niezależnie od współczynnika kompresji .jpg.

Przykład:

obraz png
.png obraz, 110 tys

JPEG w 100 jakości
.jpg w 100% jakości, 63 tys

JPEG w jakości 30
.jpg przy 30% jakości, marne 9k

Jeśli przyjrzysz się uważnie, zobaczysz pewne artefakty na 30% jakości pliku .jpg, ale głównie dlatego, że twarda krawędź żarówki na gładkim zielonym tle nie nadaje się zbyt dobrze algorytmowi kompresji. Możesz mieć regularne zdjęcia zmniejszone nawet do 10 lub 5% jakości bez żadnych strat, które zauważysz na pierwszy rzut oka.

Vincent
źródło
3
FWIW: Po zoptymalizowaniu PNG ma 34 KB bez zauważalnej straty.
Mario
Wow, nigdy tego nie wiedziałem. Próbowałem przekonwertować zrobione przeze mnie zdjęcie do formatu PNG i zmieniło się z 550 tys. Na 2933 tys. Czy wiesz, co sprawia, że ​​tak jest?
JediBurrell
10
@JediBurrell kompresja PNG jest zawsze bezstratna (AFAIK), podczas gdy kompresja JPG ostatecznie upuści informacje o obrazie. W twoim przypadku już skompresowany plik JPG, chociaż dobrze wyglądający obraz, będzie zawierał krawędzie wokół każdego segmentu (skompresowane małe kwadraty, które składają się na obraz JPG), a PNG zbiera te artefakty, aby nie zostały utracone. Dlatego twój PNG jest znacznie większy niż oryginalny JPG. Ponowna kompresja pliku JPG za pomocą JPG wielokrotnie pogorszy to - efekt nazywa się „blokowaniem meta”.
Jay Versluis,
2
@JediBurrell Jeśli interesują Cię szczegóły techniczne i matematyczne, możesz obejrzeć ten film przez Computerphile.
Paul Manta
2
„gładkie zielone tło nie nadaje się zbyt dobrze do algorytmu kompresji”: wręcz przeciwnie, gradienty są bardzo dobrze reprezentowane przez JPEG, a twarde krawędzie nie, wytwarzając w pobliżu artefakty. Dla ciekawskich przeczytaj o Fourierze przekształcającym sygnał kwadratowy.
Lloeki,
13

JPEG ma wsparcie ze strony przemysłu fotograficznego i wyprzedza PNG o około kilkadziesiąt lat, podczas gdy PNG został zaprojektowany jako zamiennik dla GIF, który był raczej gorliwie chroniony przez CompuServe. Ludzie zostali pozwani za używanie GIF-ów na swoich stronach internetowych, na przykład po prostu dlatego, że nie używali programu licencjonowanego przez CompuServe do robienia tych obrazów.

Od samego początku JPEG zaprojektowano tak, aby odzyskać trochę miejsca, zmniejszając pliki kosztem doskonałej jakości pikseli. Nawet ustawienie Q na 100 spowoduje drobne, w większości niewidoczne artefakty - uszkodzenie zostanie wykonane, a za każdym razem, gdy plik zostanie zmodyfikowany i zapisany, wystąpią dalsze uszkodzenia. Jednak, jeśli nie zrobisz tego wiele razy, prawdopodobnie nigdy nie zauważysz efektu, chyba że zaczniesz go szukać.

Z drugiej strony PNG jest całkowicie bezstratny. Każdy piksel jest wiernie odtwarzany za każdym razem, bez względu na to, ile razy plik jest modyfikowany i zapisywany. Istnieje jednak limit tego, jak dobrze można kompresować dane bez utraty, chociaż PNG stosuje kilka sztuczek, aby spakować jak najwięcej informacji do jak najmniejszej liczby bajtów danych. JPEG wysokiej jakości będzie prawdopodobnie mniej więcej tego samego rozmiaru co PNG bez optymalizacji lub nawet większy. Gdy PNG zaczyna optymalizować, powiedzmy, za pomocą filtrów lub dostosowując rozmiary okien, plik staje się mniejszy bez strat, podczas gdy JPEG musi zacząć odrzucać informacje wizualne, aby nadążyć.

Dlaczego więc używany jest JPEG? W końcu jest ogólnie gorszy pod względem wierności i miejsca do przechowywania. Głównym powodem jest oczywiście to, że jest to standard branżowy i ma bardzo szerokie poparcie. Praktycznie każdy aparat na świecie używa formatu RAW (dosłownie dane surowe) lub JPEG. W tych aparatach wbudowane są sprzętowe procesory danych, które kompresują dane JPEG tak szybko, jak to możliwe itp.

Przekonasz się, że jest to ten sam powód, dla którego GIF wciąż jest wszędzie. Większość programów obsługuje GIF, podczas gdy PNG ma mniejsze wsparcie w starszych programach (np. Starsze wersje Internet Explorera wymagały wtyczki do wyświetlania plików PNG). Mimo że ma kiepską obsługę kolorów, obsługuje animacje, coś czego nie robi PNG (istnieje podobny format pliku, APNG, który nigdy nie odbierał tak jak PNG). GIF nadal pozostaje mistrzem animowanych obrazów, ponieważ jest to jedyny format pliku, który może to zrobić przy szerokim wsparciu.

Koszt zmiany z JPEG na PNG byłby niemożliwy z perspektywy sprzętu. Aparaty będą wymagały na przykład zbudowania nowych procesorów do obsługi szybkiej kompresji PNG, ponieważ są teraz zakodowane na stałe do obsługi JPEG. Stare aparaty byłyby bezwartościowe, ponieważ trzeba by było kupić nowy z wbudowanym układem PNG. Oznaczałoby to również, że musiałbyś przekonać producenta do przestrzegania standardów branżowych i rozpocząć produkcję takich urządzeń, co oznacza, że ​​musiałoby być wystarczające zapotrzebowanie, aby to uzasadnić, a takie aparaty byłyby początkowo droższe niż ich oparte na JPEG odpowiedniki. Bardzo trudno jest zmienić branżę.

phyrfox
źródło
PNG jest potencjalnie bezstratny. Oprogramowanie zapisujące może zdecydować się na utratę trudnych danych w celu uzyskania lepszego formatu do kompresji. Waveletowa natura jpeg uniemożliwia jej utratę.
joojaa
@joojaa Czy można wykonać kopię zapasową stwierdzenia, że ​​kompresja PNG „może spowodować utratę trudnych danych”?
CJ Dennis,
@joojaa JPEG używa kompresji DCT, a nie falkowej. Być może myślisz o JPEG 2000.
bcrist
7
Rozumiem, że redukcja kolorów następuje przed przekazaniem obrazu do kodeka PNG. Tylko dlatego, że format jest zdolny do przechowywania i tak już stratnych danych, nie powoduje ich utraty. Zmiana 32-bitowego obrazu RGB z obrazem Alpha na 1-bitowy obraz czarno-biały spowoduje utratę dużej ilości danych, ale nie robi to PNG. Zmniejszenie głębi kolorów jest konwersja stratna, nie stratnej kompresji .
CJ Dennis
2
To mój błąd DCT. Chodzi mi o to, że chociaż PNG jest bezstratny, nie wszystkie optymalizatory PNG są! Zatem nie wiedząc, co wykorzystałeś, nie wiesz, czy proces był stratny, czy nie. Pytanie o nielosowość nie jest tak proste, jak się wydaje. Tak jak zmiany głębi kolorów mają miejsce przed zapisaniem, optymalizatory PNG mogą zmieniać obrazy w inny sposób przed zapisaniem, co zmniejsza zajmowane miejsce. @JCDennis Te crunchers istnieją po prostu zobacz ich strony manual.
joojaa
7

Nie wspominając o szczegółach, jest sposób działania tych algorytmów kompresji. JPEG jest kierowane bezpośrednio na zdjęcia, na których nie zauważono niewielkich zmian koloru pikseli. PNG jest bardziej ukierunkowany na sfabrykowane obrazy, które zawierają duże obszary jednego koloru, przy czym kompresja jest w pełni wykorzystywana, jak na przykładzie ogromnego, całkowicie białego zdjęcia z czystym czarnym napisem. Jeśli zrobisz to samo zdjęcie i umieścisz równomiernie białe tło z białego na szary w poprzek obrazu na bok, rozmiar png drastycznie wzrośnie, a jpg prawdopodobnie nie zmieni się zbytnio. Zrobiłem kodowanie około 10 lat temu bezpośrednio przy użyciu obu tych formatów, aby zdekompresować te typy plików na bmps. JPEG jest bardzo wyrafinowany i złożony. PNG jest bardzo prosty i naprawdę skuteczny tylko na niektórych zdjęciach, na których kolor nie zmienia się w poziomych liniach

Ryan
źródło
1
Czy rzeczywiście tego próbowałeś? PNG nie jest zwykłym kodowaniem długości i jest o wiele bardziej wyrafinowany niż sugerujesz. Wykorzystuje algorytm adaptacyjny i skutecznie kompresuje zarówno obszary pełne, jak i powtarzające się wzorce.
z7sg