Autor: Mariusz Kołacz (rokko)
Strona autora: techformator.pl
Kontakt: m.kolacz(at)hotfix.pl
W ostatnich kilku miesiącach sporo czasu poświęciłem testowaniu oprogramowania do optymalizacji plików graficznych. Jedno z ciekawszych narzędzi zaprezentowałem w poradniku RIOT optymalizacja grafiki. W niniejszym artykule chciałbym przedstawić szerszemu gronu kilka dodatkowych programów, specjalizujących się w optymalizacji plików PNG. Nie są to narzędzia powszechnie znane, co nie oznacza, iż reprezentują wątpliwą skuteczność, wręcz przeciwnie, każde z nich zasługuje na szersze opisanie, albowiem rezultaty jakie można uzyskać są imponujące.
Wszystkie niżej przedstawione narzędzia to skrypty optymalizacyjne, zawierające zestawy instrukcji, wykorzystujące rozmaite zewnętrzne narzędzia, jak na przykład pngout czy optipng. Oczywiście każde z narzędzi można wywołać indywidualnie, w odniesieniu do konkretnego zdjęcia (grafiki). Skrypty mają za zadanie nie tylko scentralizować wszystkie narzędzia, w taki sposób, aby uzyskać jak największy poziom optymalizacji, lecz również znacząco uprościć proces i odciążyć użytkownika z konieczności ręcznego wykonywania komend optymalizacyjnych.
Kończąc ten krótki wstęp, chciałbym wystosować prośbę do czytelników, jeżeli jesteście w posiadaniu informacji o ciekawych narzędziach do optymalizacji grafiki w formacie PNG i chcielibyście podzielić się z innymi tą wiedzą, zawsze możecie uzupełnić niniejszy artykuł swoimi spostrzeżeniami w komentarzach.
Pngslim - doskonała optymalizacja PNG
Na pierwszy ogień idzie Pngslim. Jest to skrypt o dość skomplikowanej strukturze, przeznaczony głównie dla systemów z rodziny Windows. Prawidłowo funkcjonuje w systemach 32 bitowych zarówno pod XP jak i Windows Vista. Na Windows 7 nie miałem przyjemności testować go, podobnie jak na 64 bitowych systemach, lecz po pierwsze jest to skrypt BAT/CMD, i jako taki powinien poprawnie funkcjonować na każdym systemie z rodziny Windows, po drugie, jeżeli kompatybilność narzędzi używanych przez skrypt została zachowana, skrypt bez problemów powinien wykonać się nawet na 64 bitowych systemach.
Pngslim do optymalizacji grafiki wykorzystuje aż siedem różnych narzędzi:
- AdvanceCOMP Deflate Compression Utility (advdef.exe) - narzędzie skupia się na rekompresji pliku graficznego PNG, zachowując wewnętrzną strukturę pliku nietkniętą, tylko kompresowane bloki są modyfikowane. Do obróbki plików dużych rozmiarów wymagana jest spora ilość wolnej pamięci.
- Deflate Optimization Algorithm (deflopt.exe) - narzędzie optymalizujące pliki, w oparciu o algorytm Deflate.
- Advanced PNG Optimizer (optipng.exe) - program służy do rekompresji obrazu PNG, z zachowaniem pierwotnej jakości pliku. Program pozwala również na konwersję plików graficznych np. BMP, GIF, TIFF do formatu PNG (zoptymalizowanego).
- PngOptimizer (pngoptimizercl.exe) - kolejne darmowe narzędzie do optymalizacji plików PNG, pozwalające znacząco zredukować rozmiar pliku graficznego, bez utraty jego jakości.
- PNGOUT (pngout.exe) - najskuteczniejsze narzędzie spośród wszystkich zaprezentowanych tutaj. Pozwala znacząco zredukować rozmiar pliku PNG, nie pogarszając przy tym jakości zdjecia. Pngout bazuje na zmodyfikowanym algorytmie Deflate.
- Pngrewrite (pngrewrite.exe) - optymalizuje pliki PNG poprzez usunięcie nieużywanych palet, potrafi też umiejętnie zredukować ilość kolorów oraz zoptymalizować ustawienia przeźroczystości obrazka.
- Compression Library (zlib.dll) - zawiera zestaw instrukcji do kompresji różnego typu plików, w tym graficznych, zawiera implementację algorytmu Deflate.
Pngslim - jak zoptymalizować plik PNG?
Pobieramy Pngslim i rozpakowujemy do dowolnego folderu.
W folderze będzie dostępny plik pngslim.cmd, wystarczy jak przeciągniemy i upuścimy na nim wybrany plik z rozszerzeniem PNG. Otworzy się okno wiersza poleceń, w którym na żywo będzie można śledzić postęp optymalizacji.
Skrypt można dostosować do własnych potrzeb, domyślne ustawienia pozwalają zredukować wielkość grafiki, zwykle o około 10% - 30% w stosunku do oryginalnego obrazu. Nie jesteśmy jednak ograniczeni w tym zakresie, dzięki zmodyfikowaniu domyślnych wartości w pliku pngslim.cmd, będziemy w stanie uzyskać jeszcze lepsze rezultaty. Niestety wadą Pngslim jest fakt, że proces kompresji trwa bardzo długo, jednakże pliki wynikowe generowane przez ów narzędzie są zdecydowanie najmniejsze spośród wszystkich skryptów, jakie miałem przyjemność testować.
Ustawienia kompresji w Pngslim
Jak już wcześniej wspomniałem poprzez edycję pliku pngslim.cmd możemy ustalić własne ustawienia kompresji.
- Huff_Trials (15) - ilość kolejnych nieudanych prób ustawienia liczby bloków, warunkiem przerwania procesu jest brak zmniejszenia rozmiaru pliku w kolejnych próbach. W większości przypadków optymalna wartość to 15. Jeżeli chcemy przyśpieszyć proces kompresji pliku, możemy zmniejszyć wartość Huff_Trials do 2.
- Rand_Trials (100) - liczba prób z rondomizacją tabel Huffman'a. Wartość domyślna wynosząca 100 pozwala osiągnąć dobre efekty, jeżeli chcemy uzyskać kilka dodatkowych bajtów, możemy zwiększyć tę liczbę nawet do 1000. Jeżeli chcemy przyśpieszyć proces kompresji, zmniejszamy wartość Rand_Trials.
- LargeFileSize (66400) - rozmiar nieskompresowanego pliku w bajtach określający typ obrazu mały/duży, na tej podstawie determinowana jest szybkość przetwarzania obrazu. Domyślna wartość to 66400 bajtów co odpowiada grafice większej niż 128 na 128 pikseli.
Optymalizuj z Pngslim - jak dodać opcję do menu kontekstowego Windows?
Dodanie odpowiedniej opcji do menu kontekstowego pozwoli zapomnieć o klasycznej metodzie kompresji "przeciągnij i upuść", znacząco podwyższy komfort korzystania z narzędzia oraz umożliwi szybką optymalizację wybranych plików PNG. A zatem, w jaki sposób dodać opcję kompresji do menu kontekstowego?
- Przechodzimy do Opcji folderów, Start => Uruchom => control folders lub otwieramy eksplorator Windows i z menu Narzędzia wskazujemy interesującą Nas opcję.
- Przechodzimy na zakładkę Typy plików i szukamy rozszerzenia PNG.
- Po odszukaniu właściwego rozszerzenia zaznaczamy go i wybieramy przycisk Zaawansowane znajdujący się w dolnej części okna.
- W oknie edycji typu pliku klikamy Nowy
- Określamy nową akcję dla plików PNG, w polu Akcja wpisujemy Optymalizuj z Pngslim, następnie klikamy Przeglądaj i wskazujemy lokalizację pliku pngslim.cmd
- Po wykonaniu wszystkich czynności finalizujemy operację, klikamy OK => w oknie edycji również OK i na koniec Zamknij.
- Sprawdzamy efekty Naszej pracy, Klikamy prawym przyciskiem myszy na dowolnym pliku z rozszerzeniem PNG i patrzymy, czy w menu kontekstowym widnieje opcja "Optymalizuj z Pngslim", jeżeli tak wywołujemy ją. Jeżeli we wcześniejszym etapie prawidłowo wskazaliśmy element docelowy, czyli skrypt pngslim.cmd pojawi się znane Nam okno wiersza poleceń.
W przypadku chęci optymalizacji kilku obrazków jednocześnie, wystarczy, że zaznaczymy grupę plików PNG i wywołamy odpowiednią opcję z menu kontekstowego.
ScriptPNG - szybka i skuteczna optymalizacja plików graficznych
Kolejnym narzędziem jest francuskojęzyczny plik wsadowy ScriptPNG. Jak sama nazwa wskazuje, głównym celem skryptu jest optymalizacja plików PNG (8bit/24bit). Dodatkowym atutem narzędzia jest możliwość bezpośredniej konwersji obrazków w formatach BMP, GIF, TGA, PCX, TIF, TIFF, PNM, PBM, PGM do formatu PNG.
ScriptPNG do zmniejszenia rozmiaru pliku wykorzystuje kilka narzędzi zewnętrznych, takich jak optipng, pngout, pngnq, pngoptimizer, deflopt. W porównaniu do Pngslim, cechuje się zdecydowanie krótszym czasem optymalizacji, jest to zrozumiałe, ponieważ skrypt nie jest tak rozbudowany. Dzięki temu można uzyskać znaczne zmniejszenie rozmiaru plików wynikowych, w rozsądnym czasie. Oczywiście, uzyskane rezultaty nie są tak dobre jak w przypadku Pngslim, biorąc pod uwagę stosunek czasu do stopnia kompresji, ScriptPNG okazuje się interesującym narzędziem.
ScriptPNG - instrukcja optymalizacji
Pobieramy ScriptPNG i rozpakowujemy plik dowolnym programem do kompresji plików i folderów. Przechodzimy do folderu i uruchamiamy plik wykonywalny scriptpng.exe Otworzy się okno wiersza poleceń, z informacją o pomyślnym przekopiowaniu plików ScriptPNG.cmd oraz script-png.cmd do lokalizacji C:\Windows\system32. Należy pamiętać, iż kopiowanie przebiegnie prawidłowo tylko wtedy, gdy instalator zostanie uruchomiony z poziomu konta należącego do grupy Administratorzy.
Proces optymalizacji plików PNG przedstawia się następująco:
- Uruchamiamy wiersz poleceń, Start => Uruchom => cmd
- Przechodzimy do folderu, w którym znajdują się pliki w formacie PNG, cd /d "ścieżka_lokalizacji_plików_png"
- Wpisujemy polecenie scriptpng
- Otworzy się nowe okno wiersza poleceń, w którym to będą dostępne cztery opcje kompresji:
(1) Optimiser PNG sans pertes (rapide) - szybka optymalizacja, bez utraty jakości obrazu. Wykonywane sa tylko podstawowe operacje, jak usuwanie metadanych czy redukcja zbędnych palet.
(2) Optimiser PNG sans pertes (complet) - optymalizacja dokładna, nieco wolniejsza od pierwszej, dokonywane są podobne operacje jak przy szybkiej, jednakże aby maksymalnie zwiększyć stopień kompresji użyto dodatkowe metody optymalizacyjne.
(3) Convertir en PNG-8 sans diffusion - konwersja i/lub optymalizacja obrazu z wykorzystaniem algorytmu NeuQuant (automatyczny wybór ilości kolorów). Obrazy o większej głębi zostaną automatycznie prze-konwertowane do 8bit-PNG
(4) Convertir en PNG-8 avec diffusion Floyd-Steinberg - konwersja i/lub optymalizacja obrazu z wykorzystaniem algorytmu rozpraszania Floyda-Steinberga (automatyczna konwersja do 8bit-PNG).
- Wybieramy interesującą opcję, wciskamy 1, 2, 3 lub 4 i potwierdzamy wybór klawiszem ENTER.
- Rozpocznie się proces optymalizacji, po zakończeniu okno wiersza poleceń ScriptPNG zostanie automatycznie zamknięte.
PNG Monster - pogromca plików PNG
Wśród wszystkich testowanych narzędzi tylko PNG Monster posiada własny interfejs graficzny (GUI). Ma to duże znaczenie, w szczególności dla początkujących użytkowników, którzy często nie przepadają za konsolowymi aplikacjami.
Program działa na tych samych zasadach co Pngslim i ScriptPNG. Na plikach graficznych przeprowadzane są dziesiątki prób, przy wykorzystaniu zewnętrznych narzędzi, aż do osiągnięcia jak najmniejszego rozmiaru pliku wynikowego. PNG Monster do optymalizacji wykorzystuje znane Nam ze wcześniejszych opisów narzędzia, do których zaliczymy advpng, optipng, pngcrush, pngout, pngrewrite oraz bibliotekę zlib.
Interfejs aplikacji nie powala na kolana, dostarcza tylko podstawowych opcji, lecz z Naszego punktu widzenia, nie powinna liczyć się jakość interfejsu, ale efektywność programu, a ta jest zaskakująco wysoka i plasuje się na równi z omawianym wcześniej ScriptPNG.
Instrukcja optymalizacji plików graficznych w programie PNG Monster
Optymalizację rozpoczynamy od umieszczenia w folderze PNG Monster plików graficznych w formacie PNG. Ścieżkę dostępu do optymalizowanych plików (folder z plikami poddawanymi obróbce) możemy zmodyfikować po uruchomieniu programu (Source Directory). Kolejnym krokiem na drodze ku optymalizacji jest uruchomienie pliku wykonywalnego PNGMonster.exe i kliknięcie przycisku Run. Zaznaczenie opcji Loop (Very slow) spowoduje, iż każdy obraz zostanie poddany kilkukrotnym testom, kompresja wprawdzie będzie wolniejsza, lecz efekty mogą być znacznie lepsze.
W tym samym oknie, po ukończeniu procesu optymalizacji, pojawią się szczegółowe informacje na temat rozmiaru plików przed optymalizacją (łączny) i po optymalizacji oraz informacja o uzyskanym współczynniku kompresji. W przykładzie widzimy, że optymalizacji zostały poddane trzy pliki, których łączny rozmiar przed optymalizacją wyniósł 36272 bajtów (35,42 KB), dzięki zastosowaniu optymalizacji rozmiar zmniejszył się do 23876 bajtów (23.31 KB), tym samym zyskaliśmy 12396 bajtów (12.1 KB), a współczynnik kompresji wyniósł 65.82%.
Pngslim, ScriptPNG, PNG Monster - testy porównawcze
Zestaw obrazów testowych nie będzie egzotyczny, wykorzystam obrazki z tego artykułu. Każdy "surowy" plik był zapisywany w formacie PNG, w programie GIMP. Przed optymalizacją ujednolicono głębię kolorów wszystkich grafik do 8 bitów (256 kolorów). Podczas optymalizacji, aby wyeliminować straty przez mechanizm skalowania czasu pracy procesora ustawiono plan zasilania na maksymalna wydajność (skalowanie wyłączone, 100% mocy procesora). Komputer na którym dokonano testów to Acer Aspire 5710 z procesorem Intel Core 2 Duo T5500 1.66 GHz. Poniżej prezentuję wyniki testów.
W trzech z czterech przypadków widać wyraźnie przewagę Pngslim, pod względem uzyskanego stopnia kompresji, w jednym uzyskał nieznacznie gorszy rezultat, przegrywając z ScriptPNG. Należy podkreślić, że skrypt pracował na bardzo niskich wartościach Huff_Trials i Rand_Trials, co pozwoliło uzyskać w miarę rozsądne czasy kompresji, lecz znacząco obniżyło wartość Pngslim, albowiem narzędzie przy domyślnych ustawieniach potrafi uzyskać znacznie lepszy wynik. Niestety, zastosowanie domyślnych wartości Huff_Trials równego 15 oraz Rand_Trials wynoszącego 100, opatrzone jest dużym nakładem czasowym, nie każdy z Nas może sobie pozwolić na taki wydatek.
Pod względem efektywności kompresji najlepszy był ScriptPNG, który w stosunkowo niewielkim czasie potrafił uzyskać rezultaty zbliżone do Pngslim. Ostatni "czarny koń" PNG Monster okazał się najszybszym narzędziem w całej stawce, jednakże uzyskany stopień kompresji nie pozwolił mu konkurować z czołówką. Mimo to prezentuje się ciekawie, osoby które chcą szybko przygotować grafiki na swoją stronę internetową, na pewno nie zawiodą się na tym narzędziu.
Podsumowując, w kategorii najwyższy stopień kompresji, zwycięzcą testów został Pngslim, który pracując na najniższych obrotach pokonał konkurentów. W kategorii efektywność triumf należy do ScriptPNG, który w stosunkowo niedużym czasie potrafił uzyskać wysoki stopień kompresji.
Zaprezentowane testy w założeniu miały pokazać różnice pomiędzy poszczególnymi narzędziami. Zestaw testowy jest dość skąpy, lecz pozwala na zróżnicowanie wyników pod kątem czasu i stopnia kompresji. Mam nadzieję, że niniejszy artykuł pozwoli Wam wybrać właściwe narzędzie
Inne narzędzia do optymalizacji grafiki PNG, które nie znalazły się w opisie:
- Optimipng
- ShrinkPNG
- ImageMagick
Copyright © rokko
Wszystkie prawa zastrzeżone. Kopiowanie całości lub fragmentów niniejszego artykułu jest zabronione.