Przetwarzanie wsadowe plików graficznych na Linuksie

Stronę tą wyświetlono już: 222 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:

  • zmiana rozmiaru plików;
  • zmiana formatu pliku (np. z jpg na png);
  • tworzenie animacji gif.

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:

Listing 1
  1. 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
  2. {
  3. for (( i=$((${#1}-1)); i>-1; i--)) # od rozmiaru tekstu do -1 wykonuj
  4. do
  5. if [ "${1:$i:1}" = '.' ] # jeżeli na podanej pozycji jest szukany znak kropki to
  6. then
  7. echo $i; # wyświetlaj jej położenie
  8. return; # i koniec funkcji będzie
  9. fi
  10. done
  11. echo -1; # a jak nie zwróć -1
  12. }
  13. getFileName () # ta funkcja zwraca nazwę pliku (bez rozszerzenia)
  14. {
  15. filename=$(basename "$1"); # basename wywala ścieżkę do pliku, zostawia tylko nazwę z rozszerzeniem np. basename "home/folder/plik.png" zwróci "plik.png"
  16. extPos=$(haveExtension "$filename"); # tu pobieram położenie znaku rozszerzenia pliku
  17. echo ${filename:0:$extPos}; # a tu wyciągam nazwę i ją wyświetlam
  18. }
  19. mkdir folder # a tutaj tworzę folder dla grafik
  20. for i in *.png; # dla wszystkich plików png w bieżącej lokalizacji
  21. do
  22. echo "Przetwarzanie pliku: $i" # tutaj trochę o tym, który plik jest przetwarzany
  23. convert "$i" -quality 95 "folder/$(getFileName "$i").jpg" # konwertuję pliki.
  24. 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:

Listing 2
  1. mkdir folder
  2. for i in *.jpg;
  3. do
  4. echo "Przetwarzanie pliku: $i"
  5. convert "$i" -resize 400x400 "folder/$i"
  6. 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

Komentarze