Terminal pogryzł człowieka: imgo
Jak skompresować na potrzeby sieci lub archiwizacji dużą liczbę obrazów? Za pomocą rzecz jasna terminal – to oczywiste, w tym cyklu nie pojawi się przecież żadne rozwiązanie które nie wymagałoby tekstowych manipulacji. Jednak tekstowych narzędzi do optymalizacji plików jpeg, png oraz gif powstało tak wiele, że ciężko wymienić je wszystkie jednym tchem. Pngout, pngrewrite, optipng, jpegtran, pngnq, defluff, cryopng, pngcrush. Uf, prawie. A teraz na drugim wdechu wymieniamy parametry, którymi możemy regulować pracę tych narzędzi. Otóż to. Zamiast pamiętać parametry do wszystkich tych programów, wystarczy zaznajomić się z niebanalnym skryptem imgo.
Zadaniem imgo jest uproszczenie naszych relacji z wymienionymi programami i zoptymalizowanie tak kluczowego elementu jak optymalizacja naszych zdjęć. Po co mielibyśmy poprawiać przechowywane na dysku kadry, grafiki i inne? Sama wizja zaoszczędzenia miejsca na nośniku nie już tak kusząca jak jeszcze parę lat temu, przed epoką terabajtowych dysków. Ale jeżeli planujemy przenieść np. na pendrive’ie 1000 zdjęć z wesela. Albo wysłać je w załączniku, wystawić na stronie. Szybko możemy policzyć, że zaoszczędzenie na takich zdjęciach 20 – 30% objętości całości, przyśpieszy kopiowania, wysyłanie, itp. I to jest już warte przemyślenia.
Aby przetestować imgo musi najpierw pobrać ten skrypt ze strony projektu. Sam skrypt wykonany jest w starym, dobrym Bashu i takiej powłoki będziemy potrzebowali, aby go uruchomić. Musimy również nadać mu stosowne uprawnienia:
sudo chmod a+x imgo
Zanim jednak ochoczo przystąpimy do optymalizowania naszych obrazów, kilka faktów. Imgo domyślnie próbuje dokonać kompresji bezstratnej. Im bardziej dołożymy mu opcji, tym mocniej może zaingerować w zawartość pliku. Do swojego działania imgo potrzebuje wspomnianych wcześniej narzędzi. Niestety, nie wszystkie znajdziemy w repozytorium. Te podstawowe to:
sudo apt-get install advancecomp libimage-exiftool-perl imagemagick optipng libjpeg-progs gifsicle pngnq tar unzip libpng-dev git
Kilku jak widać brakuje. Pngout, defluff, pngrewrite, cryopng są rozprowadzane w binarnej postaci i musimy sobie je pobrać samodzielnie, lub użyć skryptu instalacyjnego (dla Debiana/Ubuntu/Minta), który pobierze je i zainstaluje za nas. Skrypt znajdziemy na stronie projektu (na dole). Musimy go zapisać do pliku, nadać plikowi prawa a+x, uruchomić go – skrypt pobierze potrzebne programy, binarki oraz samego imgo. Całość zostanie zainstalowana w /usr/local/bin (o ile uruchomiliśmy skrypt z prawami roota).
Same opcje skryptu są proste i czytelne:
$ ./imgo -h imgo 0.8: Images Optimizer Git repo: https://github.com/imgo/imgo Usage: imgo [-params] [FILE] Options: -h | --help displays help -b | --brute brute mode, best compression, incompatible in IE6 -png optimize only PNG files -jpg optimize only JPEG files -gif optimize only GIF files -ico optimize only ICO files -a abbreviated information -e | --emulate emulation mode - files are not overwritten -m | --multipass multipass - image is processed several times -q | --quiet hides the whole bar, be quiet -V | --version displays version number -d | --diff displays diff info -s | --separate PNG divided into 2 files - the first with transparency, the second without -bkgd set bKGD chunk -bkgd#ff0000, only 6 digits format -rt Remove Transparency -nr Disable recursive search in subdirectories -png8a convert PNG24+Alpha to PNG8+palette transparency -v | --log display log -- end of options: only file names follow ---------- Examples: imgo somefile.png imgo somedir imgo -ie6 somefile.png imgo .
Czyli udajemy się do katalogu z naszymi zdjęciami i wywołujemy co najmniej polecenie „imgo .”. Program rekursywnie przeszuka obecną lokalizację w poszukiwaniu plików png, jpeg, gif, ico i spróbuje je zoptymalizować. Za pomocą opcji -png / -jpg / -gif / -ico możemy doprecyzować który format ma być przetwarzany. Opcja -b zapewni nam najlepsze wyniki, ale odbije się to na jakości plików (mocna kompresja stratna). Z kolei -e wyświetli tylko informacje o ewentualnych wynikach optymalizacji, -m spróbuje przetworzyć plik kilkukrotnie, -png8a zmieni 24bitową paletę kolorów pliku png na 8bitową (duży zysk na objętości) a z kolei -rt usunie z obrazów kanał alfa (przeźroczystość).
To całkiem sympatyczny skrypt pozwalający zaoszczędzić mnóstwo czasu. Problematyczne są jedynie zewnętrzne binarne narzędzia potrzebne do jego funkcjonowania. Ale na potrzeby skutecznego usprawniania obrazów png warto spróbować.
Chyląc czoło przed twórcami tego zacnego narzędzia, chciałbym nieśmiało przypomnieć, że istnieje przecież imagemagick. Fakt, że składnia imagemagicka jest trochę pokopana i trzeba poświęcić trochę czasu na naukę i eksperymenty, ale chyba jest ogólnie łatwiej, no i wiemy, co z naszymi zdjęciami robimy?
Używam od lat. Rzeczy typu zmiana rozmiaru + ostrzenie – nie ma lepszego narzędzia 🙂