06 grudnia 2007
Tworzenie miniaturek z linii poleceń
Już wspominałem o tym w moim starym blogu, ale skoro ten blog ma zawierać głównie wpisy o tematyce technicznej, postanowiłem go umieścić również tutaj.
Czasami trzeba szybko zmniejszyć dużą ilość zdjęć, żeby np. umieścić je w galerii internetowej. Pod Linuxem jest na to prosty sposób. Wszystko czego potrzebujemy to pakiet ImageMagick.
Zakładam że będą pomniejszane wszystkie zdjęcia w formacie jpg z bieżącego katalogu.
W linii poleceń wystarczy wpisać: find . -maxdepth 1 -name '*.jpg' -exec convert {} -resize 800x800 {} ';' No i co to robi? Polecenie find wyszukuje w bieżącym katalogu wszystkie pliki o rozszerzeniu .jpg i wykonuje polecenie convert (z pakietu ImageMagick). Nawiasy "{}" oznaczają nazwę znalezionego pliku. Powyższe polecenie nadpisze oryginalne zdjęcia zmniejszonymi. Jeżeli chcemy uniknąć nadpisania, to można to zrobić np. tak find . -maxdepth 1 -name '*.jpg' -exec convert {} -resize 800x800 'min/{}' ';' Spowoduje to zapisanie miniaturek do katalogu min, który jest podkatalogiem bieżącego katalogu. Oczywiście "min" trzeba wcześniej utworzyć.
Jeżeli chcemy uniknąć nadpisania oryginalnych plików i zapisać miniaturki w bieżącym katalogu, można dodać prefiks przed nazwą miniatury: find * -maxdepth 1 -name '*.jpg' -exec convert {} -resize 800x800 "min"{} ';' Czemu akurat 800x800? Polecenie convert pomniejsza zdjęcia proporcjonalnie, więc jeżeli szerokość jest większa od wysokości to zmniejszy do rozdzielczości 800x..., a jeżeli jest odwrotnie to do rozdzielczości ...x800. Jeżeli nie chcemy zmniejszać wszystkich zdjęć do tego samego rozmiaru, tylko proporcjonalnie, to można użyć procentów, np. zamiast 800x800, 50%x50%. Opcja maxdepth określa ile poziomów podkatalogów ma być przeszukiwanych. Dla wartości 1 przeszukiwany jest tylko bieżący katalog.
W zasadzie powyższe przykłady prezentują cząstkę możliwości zarówno polecenia convert jak i find. Używając tego drugiego w analogiczny sposób można robić wiele innych rzeczy, np. przekonwertować wiele plików wav na mp3 przy użyciu lame.
ImageMagick jest wyposażony w narzędzie mogrify, które może pomniejszyć wiele zdjęć wg podanego filtra, więc te nieco długie powyższe przykłady, można zapisać krócej: mogrify -resize 800x800 *.jpg Mogrify nadpisuje oryginały, więc jeżeli nie chcemy ich utracić, trzeba pracować na kopiach.
3 komentarze
Polecam jednak formę "linuksem".
Poza tym łatwiej chyba tak (przy założeniu, że korzystamy z basha jako powłoki):
for plik in ./*.jpg;
do
polecenie $plik;
done
Jakoś nie przekonuje mnie że łatwiej. Składnia find nie jest jakoś super skomplikowana. Zależy co kto woli.