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
ruda.090.jpg 122K
ruda.080.jpg 91K
ruda.070.jpg 73K
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:
- wrzuć załączony plik do folderu
wp-content/plugins
, a potem włącz wtyczkę - wrzuć załączony plik do folderu
wp-content/mu-plugins
- dołącz kod do pliku
functions.php
aktualnie używanego motywu
Łukasz Więcek - myDIY.pl
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
Marcin
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ą.
Łukasz Więcek - myDIY.pl
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).
Marcin
A to fakt.
Szymon
Stare obrazki można potraktować wtyczką Regenerate Thumbnails :).
techformator
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.
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?
Rafał
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ę.
Marcin Pietrzak
@Rafał: jpg jest formatem stratnym _zawsze_ nawet jak jakość ustawisz na „120%” to i tak będziesz miał stratę informacji.