← Powrót do bloga

Rekomendacje narzędzi do bezstratnej kompresji PNG: odróżnij „prawdziwą bezstratność” od „wyglądającej bezstratnej”

Przy wyszukiwaniu „kompresja PNG” narzędzia na pierwszym miejscu twierdzą, że są „bezstratne” i „nie zmieniają jakości”, ale wydajność może się różnić o setki procentów. Różnica nie leży w magicznych algorytmach, ale w tym, że termin „bezstratny” oznacza różne rzeczy. Ten artykuł wyjaśnia różnicę i…

Udostępnij

Wyszukując „kompresja PNG”, narzędzia na pierwszym miejscu twierdzą, że są „bezstratne” i „nie zmieniają jakości”, ale wydajność może się różnić o setki procentów.
Różnica nie leży w magicznych algorytmach, ale w tym, że termin „bezstratny” oznacza różne rzeczy.
Ten artykuł wyjaśnia różnicę i rekomenduje narzędzia dla różnych scenariuszy.


Najpierw odróżnij: dwa rodzaje „bezstratności”

Prawdziwa bezstratność: piksele się nie zmieniają

PNG to format bezstratny. Jego rozmiar zależy od dwóch czynników: w jaki sposób są ułożone dane pikseli i jak są skompresowane za pomocą Deflate oraz ile metadanych jest zawartych w pliku.

Prawdziwa kompresja bezstratna skupia się tylko na tych dwóch obszarach:

  • Zmiana na bardziej oszczędną metodę zapisu. Na przykład, jeśli w obrazku faktycznie użyto 200 kolorów, zmienia się na tryb palety; jeśli nie ma przezroczystości, usuwa się kanał Alpha; obrazy w skali szarości są zapisywane jako szarości.
  • Wypróbowanie lepszych filtrów i parametrów Deflate. Dla tych samych pikseli różne metody kodowania mogą drastycznie zmienić rozmiar. Narzędzia projektowe przy eksportowaniu PNG często nie starają się w pełni, co jest powodem braku dużych oszczędności.
  • Usunięcie metadanych. Informacje o oprogramowaniu do eksportu, znaczniki czasu, komentarze tekstowe, miniatury itp.

Po dekodowaniu kompresowanego obrazu piksele są dokładnie takie same jak w oryginale. Kosztem jest niewiele – można usunąć tylko „wodę” z powodu niedostatecznego kodowania.

„Wyglądająca bezstratna”: w rzeczywistości strataczna kwantyzacja

Narzędzia takie jak TinyPNG czy pngquant oszczędzają znacznie więcej, ponieważ robią coś innego: obniżają liczbę kolorów w obrazku PNG do poniżej 256 (kwantyzacja), a następnie stosują dithering, aby zmiany nie były widoczne dla oka.

Jest to strataczna metoda, piksele faktycznie się zmieniają. Działa świetnie dla większości ikon sieciowych i ilustracji, ale jeśli potrzebujesz „absolutnie niezmienionych pikseli” – np. wycinki UI muszą być zgodne z projektem, potrzebujesz dokładnego porównania pikselowego lub planujesz dalej edytować materiały – nie powinieneś jej używać.

Najprostszy sposób sprawdzenia, czy narzędzie jest prawdziwie bezstratne, to porównanie przed i po kompresji za pomocą ImageMagick
compare -metric AE oryginal.png skompresowane.png null:
Wyjście 0 oznacza, że żaden piksel się nie zmienił.


Rekomendacje narzędzi do prawdziwej bezstratnej kompresji PNG

Wiersz poleceń: oxipng (najlepszy wybór)

oxipng to bezstratny optymalizator PNG napisany w Rustu, można go uznać za nowoczesnego następcę znanego narzędzia OptiPNG:

  • Wiele wątków, szybkie, idealne do przetwarzania wsadowego.
  • -o 0 do -o 6 (oraz -o max) do regulacji siły kompresji. Wyższy poziom oznacza wolniejszą pracę i większe oszczędności.
  • Opcjonalnie --zopfli dla jeszcze większej kompresji, ale jest znacznie wolniejszy.
  • Squoosh używa właśnie oxipng dla kompresji bezstratnej PNG.

bash
brew install oxipng
oxipng -o 2 --strip safe -r ./images # rekursywne przetwarzanie katalogu, usuwa tylko metadane nie wpływające na wyświetlanie

Wiersz poleceń: zopflipng (dla ekstremalnej objętości)

Google zapewnia narzędzie używające algorytmu Zopfli do ponownego kompresowania Deflate. Zazwyczaj pozwala uzyskać nieco mniejszy rozmiar niż domyślne ustawienia oxipng, ale jest znacznie wolniejsze, a na dużych obrazkach może działać długo. Idealne dla „skompresuj raz, używaj długo” statycznych zasobów, takich jak logo stron internetowych lub wbudowane ikony aplikacji.

Wiersz poleceń: OptiPNG, pngcrush (klasyczne)

Obie te aplikacje są klasycznymi bezstratnymi optymalizatorami PNG, nadal spotykane w wielu łańcuchach narzędzi. Pod względem funkcji są już w większości wyparte przez oxipng, więc nie ma powodu, aby je wybierać w nowych projektach.

Strona WWW: Squoosh

Narzędzie online od Google. W trybie PNG wybierz koder OxiPNG jako bezstratny (uwaga, nie zaznaczaj „Reduce palette”, to opcja strataczna).

Zaletą jest brak konieczności instalowania i możliwość porównania w czasie rzeczywistym. Wadą jest to, że można przetwarzać tylko jeden plik na raz, a po pobraniu trzeba ręcznie zmienić nazwę i zastąpić oryginał. Idealne do sporadycznej kompresji kilku plików.

Interfejs graficzny dla Mac: ImageOptim

Darmowe, open-source'owe klasyczne narzędzie dla Maca. Wewnętrznie integruje oxipng, Zopfli, pngcrush i inne, starając się znaleźć najmniejszy wynik. Domyślnie działa w trybie bezstratnym (tryb strataczny wymaga ręcznego wyboru).

Ma dużą siłę kompresji, ale przy pełnym użyciu wszystkich optymalizatorów działa nieco wolno. Ponadto nadpisuje oryginalny plik, więc przed kompresją warto zrobić kopię zapasową.

Interfejs graficzny dla Mac: ImgZilla

ImgZilla to nasze narzędzie do kompresji obrazów macOS. Sposób jego obsługi PNG jest prosty:

  • Używa oxipng do prawdziwej bezstratnej kompresji. Poziom kompresji to 2 (tak jak w domyślnym Squoosh), zapewniający równowagę między szybkością a objętością. Piksele się nie zmieniają, można to zweryfikować powyższym poleceniem compare.
  • Nie stosuje kwantyzacji, nie zmniejsza palety, nie zmienia formatu ani wymiarów. Po kompresji plik pozostaje PNG.
  • Kompresja w miejscu: nazwa pliku i ścieżka są bez zmian, więc linki w kodzie czy dokumentach nie wymagają modyfikacji.
  • Wystarczy przeciągnąć cały folder: skanuje podkatalogi rekursywnie, pomija pliki ukryte i node_modules; obsługuje również JPG, GIF, WebP, HEIC, AVIF, SVG.
  • Oryginał domyślnie trafia do kosza, jeśli nie spodoba się, wystarczy prawym przyciskiem myszy „Przywróć”.
  • Nie wymusza kompresji, jeśli nie ma oszczędności: pliki o kompresji poniżej 0,4% oznaczone są jako „minimalny”, zostawiane w pierwotnym stanie, nie obciążają limitu darmowego.
  • Cała praca odbywa się lokalnie, pliki nie są wysyłane na serwery.

Warto wziąć pod uwagę dwie rzeczy:

  • Nie dąży do absolutnej minimalizacji objętości PNG. Poziom 2 jest znacznie szybszy niż -o max lub Zopfli, choć może oznaczać mniejsze oszczędności w procentach. Jeśli potrzebujesz „wypchnąć logo do ostatniego bajta”, lepszym wyborem będzie zopflipng lub ImageOptim.
  • Domyślnie usuwa wszystkie metadane z pliku PNG, w tym profile kolorów. Dla zwykłych obrazków sRGB nie ma wpływu; jednak jeśli obrazek zawiera rozszerzone profile kolorów, takie jak Display P3 (częste przy zrzutach ekranu Maca czy eksportach z programów projektowych), ich usunięcie może nieco zmienić kolory w oprogramowaniu zarządzającym kolorami. Dla obrazków wymagających ścisłej zgodności kolorystycznej, można w ustawieniach włączyć „Zachowaj informacje EXIF”, a metadane pozostaną bez zmian.

Tabela podsumowująca

Narzędzie Typ Prawdziwa bezstratność Wsadowe Dla kogo
oxipng wiersz poleceń ✅ ✅ programiści, procesy budowania
zopflipng wiersz poleceń ✅ wymaga skryptu ekstremalna objętość, bez tempa
OptiPNG / pngcrush wiersz poleceń ✅ ✅ stare projekty
Squoosh strona WWW ✅ (OxiPNG, bez redukcji palety) ❌ jedno na raz sporadyczna kompresja
ImageOptim aplikacja Mac ✅ (domyślnie) ✅ Mac użytkujący, maksymalna siła
ImgZilla aplikacja Mac ✅ ✅ przeciągnięcie folderu wsadowa kompresja, brak zmian ścieżki, możliwość cofnięcia
TinyPNG / pngquant strona WWW / wiersz poleceń ❌ strataczna kwantyzacja zależnie od wersji akceptacja straty, wyższa kompresja

Jak wybrać

  • Tylko wymagaj niezmienności pikseli, gotów/a używać wiersza poleceń: oxipng, wstaw do skryptu budowania, raz na zawsze.
  • Chcesz skompresować pojedynczy plik do absolutnej minimum: zopflipng.
  • Interfejs graficzny i wsadowe przetwarzanie na Macu: ImageOptim daje większą siłę kompresji; ImgZilla jest szybszy, pozwala odzyskać oryginał z kosza i obsługuje inne formaty.
  • Akceptujesz delikatną stratę, chcesz mniejszy rozmiar: TinyPNG / pngquant, ale pamiętaj, że to już nie jest bezstratne.

Na koniec jedna uwaga: ile można oszczędzić dzięki kompresji bezstratnej, zależy od tego, jak został wyeksportowany oryginalny plik PNG. Narzędzia projektowe lub stare pliki PNG mogą mieć dużo „wody”. Jeśli plik był już zoptymalizowany, dalsza kompresja nie pomoże – jeśli narzędzie pokazuje „minimalny”, oznacza to, że jest już w dobrej formie, a problemem nie jest narzędzie.

ImgZilla obecnie wspiera tylko macOS (12.3 i nowsze), dostępny w Mac App Store. Wersja darmowa pozwala na 10 kompresji dziennie, zliczane są tylko pomyślne próby – wystarczy przeciągnąć folder pełen PNG i sprawdzić poleceniem compare, czy piksele rzeczywiście się nie zmieniły.

Chcesz mniejsze i szybsze obrazy?

Pobierz ImgZilla i kompresuj lokalnie — Twoje obrazy nigdy nie opuszczają Maca.