Posiadam kilka stron, na których aż roi się od różnego rodzaju zdjęć, screenów itp. Odkąd prowadzę jedną z nich, gdzieś od 2010 roku zebrało się na niej ponad 10 000 zdjęć. Zdjęć które nie tak łatwo pobrać na lokalny komputer, gdyż w sumie zajmują ponad 4GB, więc kopiowanie ich przez FTP byłoby dość czasochłonne. Oczywiście można je spakować i pobrać paczkę, ale później i tak trzeba je wrzucić z powrotem na serwer i nadpisać nimi stare pliki.
Tu może zdarzyć się wszystko, a najczęściej spotyka mnie niespodzianka w postaci nieoczekiwanych zmian w uprawnieniach, a i sam WordPress nie ułatwia mi tego zadania. Ktoś może powiedzieć „Użyj wtyczki skoro masz WordPressa”, ale jakoś nie przekonuje mnie to rozwiązanie, gdyż większość z nich nie pozwala mi kontrolować wszystkiego czego bym chciał. Najgorsze jest to, że wśród tych 10 000 zdjęć znajdą się i takie, które zajmują po 8MB – tylko po co mi takie, to nie serwis z tapetami, a strona o grach internetowych.
Plus jest taki, że posiadam dostęp przez SSH do swojego VPS’a i tutaj wszyscy, którzy nie mają takich dostępów proszeni są o odstąpienie od czytania dalszej części artykułu, gdyż prezentowana przeze mnie metoda głównie opiera się na komendach, które należy wpisywać w konsoli.
Dodatkowo przy tej metodzie kompresja zdjęć w formacie JPEG będzie całkowicie bezstratna, nie stracimy na jakości, ale zyskamy miejsce na dysku plus strona zawierająca wszystkie zoptymalizowane zdjęcia będzie z pewnością ładowała się znacznie szybciej niż przed zmianą.
Oczywiście korzystając z jpegoptim, bo tym się dziś zajmiemy, możemy wykonać stratną kompresję, którą polecam użytkownikom mającym ograniczony budżet na utrzymanie serwera albo ograniczony na nim transfer.
To co, macie dostęp do swoich serwerów przez SSH? Korzystacie z linuxa? Jeśli nie to polecam program Putty, który pozwoli Wam się połączyć z serwerem poprzez SSH.
Na samym początku zainstalujmy u siebie jpegoptim, dla serwerów z Ubuntu bądź Debianem użyjemy komendy:
sudo apt-get install jpegoptim
A teraz przechodzimy do folderu, w którym mamy zdjęcia jakie chcemy zoptymalizować. Gdy już tam się znajdziemy to wybieramy zdjęcie, ja tutaj nazwę je foto.jpg i wpisujemy komendę:
jpegoptim foto.jpg
W wyniku otrzymuje:
foto.jpg 24bit JFIF [OK] 7306 --> 6759 bytes (7.49%), optimized
Pamiętajcie jednak, że wynikowy obrazek nadpisze wcześniejszy. Co więcej, jeśli jpegoptim nie będzie w stanie zoptymalizować obrazka bezstratnie to pominie jego nadpisywanie.
jpegoptim -v foto.jpg
foto.jpg 24bit JFIF [OK] 6759 --> 6759 bytes (0.00%), skipped
Jeśli chcemy, aby program nie nadpisywał starego zdjęcia to musimy podać mu lokalizacje, w której chcemy zapisać zmodyfikowany obraz dopisując do opcji -d:
jpegoptim -d ./skompresowane foto.jpg
Zoptymalizowane obrazy trafią do folderu skompresowane.
Możemy także uniknąć modyfikacji czasu (daty) utworzenia (edycji) pliku korzystając z opcji -p, dzięki czemu skompresowany pliczek będzie miał taką samą datę jak oryginał.
jpegoptim -d ./ skompresowane -p foto.jpg
Ale po co bawić się tak z pojedynczymi obrazami? Wybieramy folder, gdzie znajduje się ponad 400 plików z rozszerzeniem jpg i trzeba je zoptymalizować za jedym zamachem. Nic prostszego, będąc właśnie w takim folderze wpisujemy:
jpegoptim -d ./ skompresowane -p *.jpg
* sprawi, że wszystkie pliki w danym folderze z rozszerzeniem jpg zostaną skompresowane i zoptymalizowane, a następnie pojawią się w folderze skompresowane.
Stratna kompresja JPEG
Tak jak wspomniałem wcześniej, niekiedy aby zyskać jeszcze więcej miejsca na dysku jak i zaoszczędzić na transferze danych, potrzebna będzie nam kompresja stratna, gdzie tracimy nieco na jakości, ale niekoniecznie na tyle dużo, aby zmiany były widoczne dla przeciętnego zjadacza chleba, choć graficy z pewnością zauważą spadek jakości na takich zdjęciach, ale nie tworzymy ich przecież dla nich.
W tym przypadku używamy w komendzie opcji -m<maksymalna-jakość>, gdzie parametr w <> oznacza stopień od 0 do 100, gdzie zero to najwyższa jakość a 100 najniższa – wiem, wydawałoby się, że powinno być na odwrót, ale nie jest.
jpegoptim -m50 foto.jpg
foto.jpg 24bit JFIF [OK] 7306 --> 2654 bytes (63.67%), optimized
Widzicie, zaoszczędziliśmy ponad 60% miejsca kosztem jakości obrazu. W efekcie nie stracił on tak naprawdę wizualnie niczego, albo ja jestem ślepy – mój wzrok nie odczuł zbyt wielkich zmian na optymalizowanym zdjęciu.
W tym przypadku możemy również masowo optymalizować tak obrazy w danej lokalizacji, wystarczy nazwę pliku zamienić na *:
jpegoptim -m50 *.jpg
I czekamy, przy większej ilości plików zajmuje to znacznie więcej czasu, ale wszystko dzieje się bez dalszej, naszej ingerencji.
Na koniec dodam jedynie, że mając na serwerze obrazy zajmujące 4 589 MB w wyniku bezstratenej optymalizacji tą metodą zaoszczędziłem 297MB, może to i mało, ale jakbym chociaż zmniejszył ich jakość o załóżmy 20% to już różnica byłaby zapewne dwukrotna jak nie większa.
Teraz wyobraźcie sobie jak bardzo odciążacie swoją stronę zoptymalizowanymi zdjęciami, jak dużo oszczędzacie miejsca na dysku i o ile mniej transferu witryna pożera mniej każdego miesiąca.
Bezstratnie, i tak nic nie zastąpi ręcznej optymalizacji najbardziej obciążonych miejsc.
Zgadza nie zawsze łatwo dostrzec różnice, tutaj jest przedstawiony rozkład kompresji i wpływ na zdjęcie.
http://regex.info/blog/lightroom-goodies/jpeg-quality
Jeszcze więcej byś zyskał optymalizując schematy do png
Dla użytku komercyjnego wystarczy Xnview/kreator eksportu.
Powodzenia z optymalizacją ręczną przy większej ilości obrazów;)