Image magick dostarcza cały zestaw konsolowych programów przydatnych do obróbki zdjęć. Dziś zaszła potrzeba przerobienia całej masy fotek z kilkunastu katalogów. Chciałem przeskalować zdjęcia do rozmiaru 400×400 i zachować oryginalne źródła, więc posłużyłem się programem convert.
Aby przerobić zdjęcia jpg z bieżącego katalogu i wrzucić je do podkatalogu thumbs wystarczy jedna linijka w terminalu:
for i in `ls *.jpg`; do convert -resize 400x400 -quality 85 $i thumbs/$i; done
Jeśli obrazek jest mniejszy niż 400×400, to zostanie powiększony zachowując proporcje tak aby zmieścił się w kwadracie o boku 400. Aby nie powiększać mniejszych obrazków należy użyć opcji ‚>’ (szczegóły tutaj).
W moim przypadku zdjęcia były pogrupowane datami. Katalog źródłowy zawierał podkatalogi (nazwa podkatalogu była datą, np „2008-12-13”) w których dopiero były właściwe zdjęcia. Chciałem zachować grupowanie. Aby wykonać kopię danych zawierającą również takie same podkatalogi napisałem prosty skrypt:
#!/bin/bash SOURCEDIR=/katalog/zrodlowy/ DESTDIR=/katalog/docelowy/ cd $SOURCEDIR for k in `ls -l | egrep '^d'|awk '{print $8}'`; do echo "katalog: $k" cd $k mkdir $DESTDIR$k for i in `ls *.jpg 2>/dev/null`; do convert -resize 400x400 -quality 85 $i $DESTDIR$k/$i; done cd .. done
Pierwsza linijka for zawiera fragment, który służy do otrzymania listy samych podkatalogów. Dzięki temu tylko podkatalogi są konwertowane, a pliki z głównego katalogu pomijane. Mała uwaga: program niestety nie sprawdza się w przypadku gdy nazwy zawierają spacje.
Aby automatycznie obrócić zdjęcia na podstawie danych EXIF należy do convert dodać opcję -auto-orient