Dávkové zpracování obrázků v GIMPu

8. 1. 2010 10:48 (aktualizováno) Aleš Láník

Určitě jste často proklínali GIMP, že neobsahuje možnost dávkově zpracovat množinu obrázků pomocí jednoduchého klikátka, kde by si člověk jednoduše vybral, které pluginy a v jakém pořadí chce na obrázek aplikovat.

Po frustrujícím hledání jste, nejspíše stejně jako já, zjistili, že existuje něco jako script-fu a python-fu a přepínač -b v konzolovém režimu GIMPu.

Ti odvážnější z vás se ještě určitě podívali na demonstrační příklady k tomuto dávkovému režimu a k jazyku script-fu a se zděšením zjistili :-) , že scrip-fu jako by z oka vypadl lispu.

V následujícím textu popíšu jak v tomto jazyce udělat jednoduché dávkové zpracování. Zde si dovolím malou odbočku, tento text nepíšu abych obohatil studnici poznání českého internetu, nýbrž jsem veden vlastní bolestnou zkušeností, která mě jasně říká, že tyto nabyté informace zapomenu nejpozději po dopsání následujícího textu.

Dávkový režim GIMPu

Dávkový režim GIMPu funguje velice jednoduše a vyvolává se přepínačem -b a jako argument přijímá řetězec uvozený do uvozovek s příkazy GIMPu. Pro dávkové zpracování je ještě vhodné gimp spustit s přepínačem -i, jenž způsobí, že se vám nezobrazí GUI. Popřípadě můžete použít ještě přepínače -d (nenačtou se přechody, vzory atd.. ) a -f (nebudou se načítat fonty).

Definice funkce

V našem příkladě budeme konstruovat funkci, která ze všech vstupních obrázků udělá obrázky bezešvé (seamless – obrázky které navazují samy na sebe a dají se proto použít jako textury).

Nazveme ji třeba seamless-batch a bude přijímat pouze jeden parametr a to specifikaci vstupních souborů klasickým regulárním výrazem (např. /home/user/textures/*.jpg).

Definice funkce probíhá pomocí příkazu define a jako parametr příjímá seznam, kde na první pozici je jméno funkce a dalšími prvky seznamu jsou parametry funkce.

Takže v našem případě to bude (define (seamless-batch pattern))

Samotný obsah skriptu podrobněji popisovat nebudu, raději uvedu komentovaný příklad.

Výsledný skript

Následující script pojmenujeme seamless-batch.scm a nakopírujeme do  ~/.gimp/script/

1 ;funkce vytvari bezsve obrazky 2 ;param pattern je specifikace vstupnich souboru napr. /home/user/img-data/*.png 3 (define (seamless-batch pattern) 4    ;vyber souboru dle zadaneho patternu 5    (let* ((filelist (cadr (file-glob pattern 1)))) 6           ;iterace nad vsemi soubory 7           (while (not (null? filelist))( 8             ;nastaveni promenych filename, image a drawable 9             let* ( 10               ;nacteni nazvu souboru ze seznamu 11               (filename (car filelist)) 12               ;nacteni obrazku do GIMPU 13               (image (car (gimp-file-load RUN-NONINTERACTIVE filename filename))) 14               ;ziskani drawable z obrazku 15               (drawable (car (gimp-image-get-active-layer image))) 16            ) 17            ;vykonani prvniho pluginu 18            (plug-in-make-seamless RUN-NONINTERACTIVE image drawable ) 19            ;ulozeni zpet do souboru 20            (gimp-file-save RUN-NONINTERACTIVE image drawable filename filename) 21            (gimp-image-delete image) 22         ) 23         ;odmazani prvni polozky ze seznamu 24         (set! filelist (cdr filelist)) 25      ) 26   ) 27)

Jistě vám není jasné jak získat seznam funkcí a jejich parametrů. Lze ho získat jednoduše skrze python-fu consoli Filtry->python-fu->Console->Browse.

Volání z konzole

Mno a na konec nám jen zbývá skript spustit z konzole.

gimp -i -b '(seamless-batch "*.ppm")' -b '(gimp-quit 0)'

A to je konec přátelé.

Sdílet