Przedwczoraj Google ogłosiło na blogu nowe narzędzie do kompresji JPEG o nazwie Guetzli, wydawane na wolnej licencji (Apache License). Ma dawać lepsze optycznie rezultaty przy mniejszym rozmiarze wynikowym (mowa nawet o 35% mniejszych plikach). Cena? Oczywiście czas kompresji.
Postanowiłem przetestować na szybko, co mogło by się zmienić, gdybym wykorzystał grafiki skompresowane przy pomocy Guetzli na blogu. W tym celu sięgnąłem po obrazki z backupu bloga i uruchomiłem program (domyślne opcje kompilacji, domyślne ustawienia jakości, czyli 90%) na moim laptopie (CPU: Intel(R) Core(TM) i3 CPU M 380 @ 2.53GHz). Zdziwiło mnie to, że aż przy 12 plikach nie udało się ukończyć działania – program zgłosił błąd:
Invalid input JPEG fileGuetzli processing failed
Udało się przetworzyć 66 plików, całość trwała prawie 17 minut (sic!). Czyli jest bardzo wolno. Kompresor wykorzystywał tylko jeden rdzeń CPU. Efekty są obiecujące, zarówno wizualne, jaki i objętościowe. Mimo, że algorytm jest zaprojektowany z myślą o działaniu na możliwie nieprzetworzonych obrazach wejściowych, a te na blogu raczej są już zoptymalizowane, to łączny rozmiar udało się zmniejszyć o 14% (z ok. 3,3 MB do ok. 2,8 MB).
Jeśli wezmą się za wykorzystanie i optymalizację duże firmy, a jest na to szansa po uwolnieniu programu, może to oznaczać mniej przesyłanych danych po sieci, czyli szybsze ładowanie się stron, widoczne zwłaszcza na komórkach. Chwilowo główną barierą jest czas działania, który wygląda na zależny bezpośrednio od wielkości pliku wejściowego.
Zrobiłem jeszcze jeden test – plik JPG bezpośrednio z aparatu, rozmiar 2560×1440, rozmiar wejściowy 1,2 MB. Po kompresji (trwającej kilka minut) brak zauważalnych zmian jakości, natomiast rozmiar zmniejszony aż o 50% (614 kB).
Niestety przy obecnej wydajności narzędzia to tylko ciekawostka. Od paru lat z powodzeniem używam jpeg-archive (które wymaga mozjpeg) i efekty są lepsze niż te zaprezentowane przez Google, przynajmniej w przypadku algorytmu smallfry. Niestety brak mi teorii żeby cokolwiek napisać na temat butteraugli i innych algorytmów do porównywania obrazów; tak czy siak ja nie jestem w stanie zauważyć strat gołym okiem.
Jeszcze jedna ciekawostka jakiś czas temu Dropbox opublikował swoje narzędzie do bezstratnej kompresji JPEGów, idealne do wykorzystania przy backupach. Łącząc oba, 7GB kolekcja zdjęć zajmuje po rekompresji jpeg-recompress i kompresji Leptonem poniżej 4GB.
@barthalion Zobaczymy. W przypadku stron o dużym ruchu (tu: obrazków) firmom typu Cloudflare może opłacać się optymalizować najczęściej serwowane obrazki. Opłacać może się to też ludziom, którzy nie płacą za prąd (dedyk, VPS), a posiadają strony internetowe. Ale tak, wydajność jest koszmarna. Liczę, że po uwolnieniu źródeł się to zmieni. Cloudflare miało już swój wkład w open source w tym zakresie…
Smallfry jest objęty patentami, więc zastosowania mogą być ograniczone. Poza tym, w artykule wspominają, że guetzli daje wg ludzi lepsze efekty przy tym samym, a nawet mniejszym rozmiarze pliku w stosunku do libjpeg.
Lepton (świetna sprawa do archiwizacji) niestety nie jest już używalny bezpośrednio przez przeglądarki (nie jest zgodny z jpeg), więc ciężko go uwzględniać w tym porównaniu.
W ogóle do archiwizacji nie stosowałbym chyba ani guetzli, ani smallfry – oba są stratne… Użycie jakiegoś bezstratnego optymalizatora JPG i ew. lepton, jeśli nie zależy na podglądzie. Jeśli ten ostatni jest potrzebny, to pewnie najprościej obejść generując jakieś małe miniaturki.
W ogóle po szybkim rozejrzeniu się po sofcie jestem zdziwiony, że ludzkość nie dorobiła się(?) jakiegoś stałego, testowego zestawu zdjęć. Co patrzę, to inne dane – a to jakieś zdjęcie losowe (github.com/danielgtaylor/jpeg-archive), a to jakieś zdjęcia z Wikipedii…
AFAIK źródła są dostępne na GitHubie. libjpeg to jedno, mozjpeg to drugie — cytując zresztą jeden z komentarzy: We didn’t do a full human rater study between guetzli and mozjpeg, but a few samples indicated that mozjpeg is closer to libjpeg than guetzli in human viewing.
Raczej nie przejmowałbym się tym, że oba są stratne. W obu przypadkach zakłada się, że straty związane z optymalizacją nie są widoczne przez człowieka i być może za 10 lat, gdy wszyscy będziemy mieć kosmiczne rozdzielczości ekranów w każdym urządzeniu, a moje zdjęcia będą zauważalnie gorsze, to popełnię harakiri. 😉
Ale fakt, brak zestawu testowego boli. Chociaż robiąc ślepą próbę po znajomych (jeszcze przed udostępnieniem Guetzliego), rzadko kiedy wskazywali oryginalny obraz w zestawieniu przy powiększeniu 100%.