Script-fu IV. část – Registrace skriptu do GIMPu
autor: Ene dne 31. 03. 2004
Po delší odmlce vám opět přinášíme pokračování seriálu o Script-Fu, skriptovacím jazyce pomocí něhož můžete zautomatizovat některé vaše činnosti v GIMPu. Pokud nevíte oč se jedná, přečtěte si první díl a pokud se vám zalíbí, čtěte dál(druhý i třetí). Pro ty kdo už si předchozí díly přečetli si v tom dnešním povíme něco o tom, jak vytvořit vlastní soubor se skriptem a jak říci GIMPu aby o něm věděl.
Procedurální databáze
A teď do práce. Ať chcete psát skripty pro jakékoliv účely, je dobré vědět kde najdete seznam všech dostupných funkcí a jejich parametrů. K tomuto slouží Prohlížeč databáze, který je v menu Rozš -> Prohlížeč DB v hlavním okně programu. Do této databáze je potřeba zaregistrovat každičký skript se kterým chceme v GIMPu pracovat a tedy i ten náš.

Obrázek č. 1 – Prohlížeč databáze obsahuje veškeré dostupné funkce GIMPu
Každá položka v tomto seznamu je identifikovaná svým názvem jako třeba file-png-save nebo gimp-image-scale atd. Ke každé funkci zde najdete veškeré informace, které budete potřebovat pro využití ve vašich budoucích skriptech. Kromě názvu, popisu a poznámek to bude hlavně část Vstup s vstupními parametry pro volání funkce, třeba jako rozměry pro změnu velikosti obrázku.
Struktura a registrace skriptu
Abychom náš skript do procedurální databáze dostali, povíme si něco o struktuře skriptu. Ten se totiž skládá ze dvou částí. Části registrační(říká GIMPu co je skript zač a kam ho má umístit) a části aktivní, která provádí samotnou činnost skriptu.
Registrační část
Registrační část skriptu poznáte hlavně podle klíčového slova (skript-fu-register). Parametry, které do této funkce zapíšete, pak budou mít vliv na údaje uváděné v Prohlížeči DB a také na umístění skriptu v hierarchii menu. Celý příkaz má tvar
(script-fu-register "název-skriptu" "umístění v menu <Toolbox> nebo <Image>" "Komentář ke skriptu Dokumentace ;-))" "Autor" "copyright" "datum vytvoření" "Typ obrázku pro který je skript určen(RGB,RGBA,GRAY)" SF-parametr_1 "název pole" "hodnota" SF-parametr_2 "název pole" "hodnota" )
K této funkci jen pár komentářů, pojmenování skriptu je dobré začínat textem, třeba, “script-fu-” aby jste se v databázi později vyznali a také musí odpovídat názvu funkce, která bude ze skriptu volána jako hlavní(viz Aktivní část). S volanou funkcí také souvisí počet počet parametrů SF-parametr_n. Bude jich zde uvedeno tolik, kolik požadujete vstupních proměnných a to ve stejném pořadí v jakém jsou tyto proměnné vypsané v definici hlavní funkce. Pomocí těchto parametrů pak GIMP při vytváření dialogového okna skriptu vytváří rozhraní se textovými políčky, šoupátky, výběrem barev… Všechny možnosti jak může tento parametr vypadat uvádí tabulka č. 1.
Parametr | K čemu slouží | Příklad použití |
SF-VALUE | Obyčejné textové pole pro zadání čísla nebo textu. Pro víceslovný defaultní text je potřeba jej vkládat i s uvozovkami typu “. | SF-VALUE “Poloměr” “64″ SF-VALUE “Text” ” “Víceslovný text” “ |
SF-COLOR | Výběr barvy, defaultní hodnota je v podobě seznamu hodnot RGB od 0 do 255. | SF-COLOR “Barva” ‘(156 13 5) |
SF-TOGGLE | Zaškrtávací políčko. TRUE/FALSE = | SF-TOGGLE “Zaškrtni mě” FALSE |
SF-IMAGE | Když má skript pracovat s určitým | SF-IMAGE “Vyber obrázek” 0 |
SF-DRAWABLE | Výběr obrázku s určením vrstvy, se kterou má skript pracovat. | SF-DRAWABLE “Vyber vrstvu” 0 |
TABULKA č.1 - Parametry pro SF-XXXX
Tento příkaz vlastně představuje celou registrační část skriptu. Kdykoliv na něj GIMP v nějakém souboru skriptu narazí, zpřístupní jej uživateli.

Obrázek č. 2. – Ukázka variant parametru SF-XXXX.
Aktivní část skriptu
V této funkci se Překvapivě tato funkce dělá to co vyplývá z jejího názvu – registruje funkci v GIMPu. Proměnná skript-fu-nazev označuje jméno hlavní funkce skriptu. Hlavní proto, že skript může mít i více definovaných funkcí pomocí klíčového slova (define ), které pak lze uvnitř hlavní funkce využívat(zpřehlednění kódu.
Příklad struktury skriptu:
;Nejake krindy pindy o skriptu jako uvodni komentar, licence, autor atd… ;Registrační část (script-fu-register “script-fu-nazev” ;jméno funkce “<Toolbox>/Xtns/Script-Fu/kam/umistit” ;pozice v menu ;(<Toolbox> znamená hlavni menu programu, <Image> zase menu v obrázku “Text popisující funkci a jednotlivé vstupní proměnné” ;popiska skriptu “cornelius” ; autor “copyleft 2003 cornelius” ; copyright “Mar 2003″ ; datum vytvoreni “” ; typ obrazku na kterem se ma pracovat ;definice vstupních poli pro zadání proměnných(ve stejném pořadí jako proměnné). SF-VALUE “Cislo” “5″) ; Název políčka a hodnota v něm SF-VALUE “Text” ” ” Ahoj Světe ” ” ; Název políčka a hodnota v něm ) ;Aktivní část. (define (script-fu-nazev seznam lokalnich promennych) (let* ( ;definice promennych pro skript ) ;Výpis jednotlivých kroků skriptu ; Zatím nic ) )
První skript
Ale dost bylo teorie. Dnes začneme s prvním skriptem, který nebude nic dělat a v příštím díle mu funkcionalitu přidáme. Naším cílem bude jednoduché vyplněné kolečko. Naučíte se na něm jak si vytvořit pracovní plochu pro vaše výtvory. Až budeme mít hotové kolečko, zkusíme nápis(skript jen mírně upravíme), pak si vysvětlíme zase něco dalšího z teorie a už se vrhneme na skripty co upraví aktivní obrázek. Tak hurá do toho. Otevřete si váš oblíbený textový editor(typu Gedit, Poznámkový blok, SciTE, VIm a podobně) a vytvořte si nový soubor.
Začneme nejdříve s registrací skriptu. Podle horního schématu si připravíme registrační funkci:
(script-fu-register "script-fu-kruh" ; jmeno funkce "<Toolbox>/Xtns/Script-Fu/Pokusy/Kruh" ;pozice v menu "Kresli kruh" ; popiska "cornelius" ;autor "(c) 2004 Cornelius" ; copyright "Mar 2004" ; datum vytvoreni "" ;typ obrazku na kterem se ma pracovat ;nasleduji promenne a definice vstupnich poli pro jejich zadani. SF-VALUE "Radius" "32" ; Nazev policka a hodnota v nem )
Naše funkce se bude jmenovat script-fu-kruh, bude umístěna v menu Rozš. > Script-fu > Pokusy a jediným jejím vstupním parametrem bude proměnná Radius(tedy poloměr našeho budoucího kolečka.
Když tento text uložíte jako kruh.scm do vašeho adresáře ~/.gimp-1.2/scripts a zaktualizujete(Rozš > Script-Fu > Zaktulizovat) si seznam skriptů, měli by jste jej nalézt v menu i v prohlížeči databáze. Výsledek uvidíte hned po spuštění. (Všimněte si že místo “Radius” je zde “Poloměr” - GIMP provedl nahrazení podle nastaveného jazyka ;-) ).

Obrázek č. 3. – Spuštěný skript.
Když stisknete tlačítko OK, obdržíte pouze chybovou hlášku protože funkci script-fu-kruh nemáme nadefinovanou. Připište tedy další část skriptu:
define (script-fu-kruh rad_prumer)
(let*
(
(obrazek (car (gimp-image-new rad_prumer rad_prumer RGB)))
(pozadi (car (gimp-layer-new obrazek rad_prumer rad_prumer RGB_IMAGE
"Pozadi_vrstva" 100 NORMAL)))
)
)
Tímto jste definovali základní data pro funkci script-fu-kruh. Na prvním řádku říkáte, jakou funkci definujete a jaké bude mít vstupní parametry(rad_prumer). Hodnoty se těmto parametrům přižazují automaticky podle pořadí hodnot definovaných pomocí SF-VALUE v registrační části skriptu. Když jej uložíte s pustíte, ještě stále nic neudělá, tedy nic viditelného. Normálně bych teď skončil a nechal vás ať si zkoušíte další týden co se vám zlíbí, ale to by nemělo smysl. Proto půjdeme dál. Předchozí text obsahuje příkaz let*. Tím definujeme lokální proměnné identifikující a vytvářející
obrázek(gimp-image-new) a vrstvu pozadi(gimp-layer-new), se kterými budeme pracovat.
Tímto postupem jsme si vytvořili obrázek a samostatnou vrstvu, teď je obě spojíme do jednoho celku, k tomu slouží příkaz (gimp-image-add-layer obrazek pozadi 0), kterým vrstvu “pozadi” přidáte do obrázku “obrazek” na pozici 0, tedy jako nejnižší vrstvu. Příkaz zapište mezi poslední a předposlední závorku skriptu, tedy za konec funkce let*. Nyní už zbývá jen výsledek zobrazit pomocí příkazu (gimp-display-new obrazek). Výsledek bude vypadat asi jako na obrázku č. 4.

Obrázek č. 4. – I já hlava sklerotická, vždyť my zapomněli obrázek vymazat!
Abychom dostali čistý obrázek(vyplněný barvou pozadí), je nutné pře příkaz zobrazení obrázku přidat ještě příkaz (gimp-edit-clear pozadi), kterým vrstvu pozadí vymažeme na barvu pozadí. A obrázek pak bude tak čistý, jako by byl vypraný v ….. :))
Pro dnešek toho už necháme ať toho nemáte po tak dlouhé době moc a příští týden se těším na počtenou u pokračování(tedy jestli se stihnu naučit všechno, co jsem tu dnes “odvykládal” :-) ) Vy si můžete dnesní výtvor stáhnout
p.s.: dneska to máte bez domácí úlohy, ale příště už si něco vymyslím :-) A nebo ne, najděte si za domácí úkol v Prohlížeči databáze funkci,která získá aktuální barvu pozadí a popředí. Budeme je příště potřebovat a aspoň si hledání funkcí a jejich proměnných procvičíte.
01.04.2004 22:17 at 22:17
Možná by bylo dobrý prozradit, že pro použití v konzoli, je potřeba na místo image psát číslo co vracící funkce (gimp-image-list). Ať můžete v klidu testovat, co která funkce provede..
Jinak díky za pěknej seriálek..
05.09.2008 22:05 at 22:05
Bezva seriál - díky za něj.