Zmniejszanie obrazków w WordPress

Szymon w we wpisie Prosty sposób na zmniejszenie rozmiaru plików graficznych w WordPressie podał sposób na zmniejszenie obrazków używanych przez WordPress.

Moim zdaniem podany sposób jest przerostem formy nad treścią, a dodatkowo, na co Szymon zwraca uwagę, trzeba jakieś zewnętrzne regulaminy akceptować :D

Chciałem podać bardzo prosty przykład kodu, który potrafi mocno zmniejszyć pliki graficzne typu JPEG używane w treści, które to przy zapisywaniu mogą mieć różny stopień kompresji. Oczywiście ten ostatni należy tak dobrać tak, żeby grafika nie była zbyt brzydka.

Rozwiązanie opiera na się na filtrze jpeg_quality, który określa stopień kompresji i który możemy umieścić w swoim szablonie, co oznacza, że działa tylko na te obrazki, którym zmieniamy rozmiar.

add_action( 'init', 'iworks_init' );
function iworks_init()
{
    add_filter( 'jpeg_quality', create_function( '', 'return 80;' ) );
}

Oczywistą wadą jest to że będzie to działać dla nowo ładowanych obrazków.

Przygotowałem plik który ma różne stopnie kompresji i co za tym idzie różne rozmiary.

plik kompresja rozmiar zysk względem 100%
ruda.100.jpg 100% 230K 0
ruda.090.jpg 90% 122K 46%
ruda.080.jpg 80% 91K 60%
ruda.070.jpg 70% 73K 68%

Proszę zauważyć, że minimalna utrata jakości 100->90 daje oszczędność wielkości pliku na poziomie 46%.

ruda.100.jpg 230K
100

ruda.090.jpg 122K
90

ruda.080.jpg 91K
80

ruda.070.jpg 73K
70

Jak widać, w tym przypadku nie ma prawie różnicy, ale na zdjęciach z dużą liczbą szczegółów mogą pojawić się brzydkie artefakty, więc tak jak wcześniej pisałem, trzeba to dobrać do swoich potrzeb.

Jak użyć podany kod?

Masz 3 rozwiązania:

  1. wrzuć załączony plik do folderu wp-content/plugins, a potem włącz wtyczkę
  2. wrzuć załączony plik do folderu wp-content/mu-plugins
  3. dołącz kod do pliku functions.php aktualnie używanego motywu

Poprzedni

WordPress: modyfikacja ekranu logowania

Następne

WordPress: domyślne linkowanie mediów

9 komentarzy

  1. Cytując z WPNinja:

    „Jednym z nich jest Smush.it – narzędzie online ze stajni Yahoo, które przeprowadza optymalizację bez jakichkolwiek zmian w wyglądzie czy strat na jakości.”

    Może ten serwis w jakiś sposób analizuje przesyłane zdjęcia i dynamicznie dobiera stopień kompresji, żeby nie było widocznych strat jakości?

    PS – W Chromie pod Windowsem coś Ci się rozjechało: http://screen.więcek.pl/2011-11-04_143502.png

  2. Optymalizacja bez strat jest niemożliwa. Matematyki oszukać się nie da. Algorytmów używanych do kompresji też się nie wybiera. Są pewne metody optymalizowania, które nie są z biblioteki GD dostępne, ale nadal strata jakości jest zawsze ceną.

  3. Tak, ale chodzi mi o coś innego. To tak, jak z kompresją mp3 – możesz hurtowo zripować płytkę z identycznymi parametrami, a możesz zrobić dynamiczny bitrate, który pozwoli Ci uzyskać mniejszy objętościowo plik, w którym NIE USŁYSZYSZ pogorszenia jakości (co nie wyklucza tego, że w rzeczywistości plik jest gorszej jakości – po prostu ludzkie ucho nie usłyszy różnicy).

  4. Stare obrazki można potraktować wtyczką Regenerate Thumbnails :).

  5. Zdziwisz się bo do typowych zrzutów ekranu lepszym formatem jest PNG. JPG to przeżytek, jeśli chcemy maksymalnie zmniejszyć rozmiar zdjęcia (wagę) należy bezwzględnie użyć PNG, ale przyznam że przedstawiony sposób całkiem ciekawy.

  6. Pawel Nowak

    Przyda się szczególnie fotografom (bloggerom), bo jak ktoś używa np. max 200×200 [px] miniatur i to jeszcze nie zdjęć tylko rysunków to czy ich optymalizacja ma sens?

  7. Z wpisu widać, że kompresja na poziomie 90% jest praktycznie bezstratna. Jpeg to najlepsze rozszerzenie do kompresji zdjęć z dużą liczbą szczegółów, bije png czy gif na głowę.

    • @Rafał: jpg jest formatem stratnym _zawsze_ nawet jak jakość ustawisz na „120%” to i tak będziesz miał stratę informacji.

Oparte na WordPress & Theme by Anders Norén