Przetwarzanie wsadowe plików graficznych na Linuksie

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2693 razy

Instalacja imagemagic

Do wykonywania operacji na plikach graficznych w trybie konsolowym potrzeby jest pakiet imageMagic. Umożliwia on wykonywanie szeregu działań na plikach graficznych takich jak:

Instalacja tego pakietu pod Linux-em jest banalnie proste, wystarczy bowiem w konsolowej linii poleceń wpisać:

sudo apt-get install imagemagic

by po chwili lub po dwóch cieszyć się niezmiernie z zainstalowanego pakietu.

Skrypt wsadowej konwersji plików z jednego formatu na drugi

Postanowiłem sobie stworzyć mały skrypt, który przekonwertuje pliki z formatu png na jpg. Co by zbyt długo nie przynudzać skrypt wygląda następująco:

haveExtension () # ta funkcja zwraca położenie pierwszego napotkanego znaku kropki (licząc od tyłu), jeżeli nie znajdzie takiego znaku to wyświetla -1 { for (( i=$((${#1}-1)); i>-1; i--)) # od rozmiaru tekstu do -1 wykonuj do if [ "${1:$i:1}" = '.' ] # jeżeli na podanej pozycji jest szukany znak kropki to then echo $i; # wyświetlaj jej położenie return; # i koniec funkcji będzie fi done echo -1; # a jak nie zwróć -1 } getFileName () # ta funkcja zwraca nazwę pliku (bez rozszerzenia) { filename=$(basename "$1"); # basename wywala ścieżkę do pliku, zostawia tylko nazwę z rozszerzeniem np. basename "home/folder/plik.png" zwróci "plik.png" extPos=$(haveExtension "$filename"); # tu pobieram położenie znaku rozszerzenia pliku echo ${filename:0:$extPos}; # a tu wyciągam nazwę i ją wyświetlam } mkdir folder # a tutaj tworzę folder dla grafik for i in *.png; # dla wszystkich plików png w bieżącej lokalizacji do echo "Przetwarzanie pliku: $i" # tutaj trochę o tym, który plik jest przetwarzany convert "$i" -quality 95 "folder/$(getFileName "$i").jpg" # konwertuję pliki. done

W powyższym kodzie załączone zostały dwie funkcje napisane przeze mnie, albowiem nie ma w systemie Linux funkcji, które umożliwiałyby wyciągnięcie samej nazwy pliku z pominięciem rozszerzenia a taką nazwę niestety ja muszę wyciągnąć. Tak więc funkcja haveExtension jest odpowiedzialna za pozyskiwanie informacji o położeniu znaku separatora rozszerzenia pliku, natomiast funkcja getFileName jest odpowiedzialna za zwrócenie nazwy pliku.

Uwaga! Powyższy skrypt tworzy folder o nazwie folder a następnie zapisuje w nim pliki o nazwach odpowiadających konwertowanym plikom + rozszerzenie. Z tego względu należy roztropnie się z nim obchodzić, a co za tym idzie autor tegoż skryptu nie bierze żadnej odpowiedzialności za efekt jego działania. Innymi słowy korzystaj do woli ale na własną odpowiedzialność.

Przyjrzeć się warto również linijce 26 powyższego skryptu, gdzie znajduje się wywołanie programu convert z odpowiednimi parametrami. Pierwszy z nich to nazwa konwertowanego pliku, drugi -quality pozwala ustawić poziom kompresji (dla plików jpg), która w tym przypadku wynosi 95%. Ostatni parametr to ścieżka, nazwa i rozszerzenie nowo utworzonego pliku jpg.

Skrypt zmieniający rozmiary plików

Za pomocą convert można również tworzyć pomniejszone wersje plików graficznych. Oto poniżej zamieszczam prosty przykład:

mkdir folder for i in *.jpg; do echo "Przetwarzanie pliku: $i" convert "$i" -resize 400x400 "folder/$i" done

Powyższy skrypt utworzy (jeżeli ten już nie istnieje) folder o nazwie folder a następnie przekonwertuje wszystkie pliki znajdujące się w bieżącej lokalizacji i zapisze je z tą samą nazwą i rozszerzeniem w wcześniej utworzonym folderze.

Warto przyjrzeć się nieco bliżej samemu parametrowi -resize, po którym podane zostały wymiary obszaru, do którego zostaną (z zachowaniem proporcji) zmienione pliki. Możliwe jest zamiast 400x400 podanie 400x400! a wtedy program dokładnie dopasowałby wymiary wszystkich obrazów, tak aby miały one szerokość i wysokość taką, jaka została podana.

Uruchamianie powyższych skryptów

W celu uruchomienia powyższych skryptów konieczne jest utworzenie odpowiedniego pliku z rozszerzeniem sh np. o nazwie convertImage.sh, zapisaniu i uruchomieniu w następujący sposób:

bash ./convertImage.sh
Strony powiązane
strony powiązane
  1. imagemagic.org - strona domowa projektu imageMagic