V našom kurze môžeme pokračovať. Vytvorenému skriptu pridáme nejaké tie črevá, t. j. funkcionalitu.
V predchádzajúcej lekcii sme vytvorili prázdnu funkciu a registrovali sme ju v GIMPe. V tejto lekcii pridáme skriptu funkčnosť: chceme, aby vytvoril nový obrázok, pridal do neho používateľom zadaný text a zmenil veľkosť obrázka tak, aby rozmerovo vyhovoval textu.
Hneď, ako sa naučíte nastaviť premenné, definovať funkcie a pristupovať k položkám zoznamu, zvyšok je už hračka. Všetko, čo budete musieť urobiť je zoznámiť sa s funkciami dostupnými v databáze procedúr GIMPu a tieto funkcie priamo volať. Štartujte prehliadač Časť 12.7, „Prehliadač Procedúr“, začíname čarovať.
Najprv vytvoríme nový obrázok. Vytvoríme novú premennú theImage
, nastavíme ju na výsledok volania vstavanej funkcie GIMPu <c1>gimp-image-new</c1>.
Ako vidíte v prehliadači procedúr, funkcia gimp-image-new
vyžaduje tri parametre: šírku, výšku a typ obrázka. Vytvoríme obrázok 10x10 RGB, neskôr veľkosť obrázka upravíme podľa veľkosti zadaného textu. Šírku a výšku obrázka uložíme do premenných, pretože s nimi budeme pracovať v skripte neskôr.
(define (script-fu-text-box inText inFont inFontSize inTextColor)) (let* ( ; definujeme lokálne premenné ; vytvorime nový obrázok: (theImageWidth 10) (theImageHeight 10) (theImage (car (gimp-image-new theImageWidth theImageHeight RGB ) ) ) (theText) ; deklarácia textu ; vytvoríme neskôr
Poznámka: pre typ obrázka sme nastavili hodnotu RGB
. Mohli by sme použiť aj 0
, ale kód je s hodnotou RGB čitateľnejší.
Môžete si všimnúť, že pracujeme s hlavičkou výsledku volania funkcie. Môže sa to zdať čudné, keďže nám databáza jasne hovorí, že funkcia vracia jednu jedinú hodnotu: ID nanovo vytvoreného obrázka. Avšak všetky funkcie GIMPu vracajú zoznam, aj keď obsahujú iba jednu položku. Takže musíme pracovať s hlavičkou zoznamu.
Teraz, keď máme obrázok vytvorený, potrebujeme do neho pridať vrstvu. Vrstvu vytvoríme pomocou funkcie gimp-layer-new
, pridáme jej ID obrázka, ktorý sme práve vytvorili. (Odteraz už nemusíme vypisovať kompletnú funkciu, ale zapíšeme iba riadky, ktoré do nej pridáme. Kompletný skript môžete vidieť tu.) Keďže sme už deklarovali všetky lokálne premenné, ktoré použijeme, uzatvoríme zátvorky označujúce deklaráciu premenných:
; vytvorí novú vrstvu v obrázku: (theLayer (car (gimp-layer-new theImage theImageWidth theImageHeight RGB-IMAGE "layer 1" 100 NORMAL ) ) ) ) ;koniec lokálnych premenných
Akonáhle máme novú vrstvu, musíme ju k obrázku pridať:
(gimp-image-add-layer theImage theLayer 0)
A teraz, len tak pre srandu, pozrime sa na plody našej práce vykonanej do tohto miesta. Pridajme nasledujúci riadok ktorým zobrazíme nový, prázdny obrázok:
(gimp-display-new theImage)
Projekt uložíte výberom položiek
→ → . Spustite skript, mal by sa zobraziť nový obrázok. Tento obrázok bude pravdepodobne obsahovať množstvo balastu (náhodné farby), ktorý sme zatiaľ nevymazali. Prídeme k tomu zachvíľu.Pokračujeme odstránením riadku, ktorým sme zobrazili nový obrázok (alebo ho uzavrime ako komentár za bodkočiarkou (;
)).
Pred samotným zadaním textu do obrázku musíme nastaviť farby pozadia a popredia. Takto sa text objaví vo farbe definovanej používateľom. Použijeme pritom funkcie gimp-context-set-back/foreground:
(gimp-context-set-background '(255 255 255) ) (gimp-context-set-foreground inTextColor)
Farby máme nastavené správne, poďme teraz vyčistiť balast v obrázku. Obrázok vyplníme farbou pozadia:
(gimp-drawable-fill theLayer BACKGROUND-FILL)
Teraz, keď sme obrázok vyčistili, môžeme sa pustiť do pridávania textu:
(set! theText (car (gimp-text-fontname theImage theLayer 0 0 inText 0 TRUE inFontSize PIXELS "Sans") ) )
Hoci funkcia vyzerá na prvý pohľad zložito, je celkom priamočiara. Stačí sledovať jej parametre zadávané do prehliadača DB. V podstate vytvárame novú textovú vrstvu a pridávame ju do premennej theText
.
Teraz, keď máme text, môžeme sa zamerať na úpravu veľkosti obrázka na základe veľkosti textu. Zoberme hodnoty šírky a výšky a zmeňme veľkosť obrázka a jeho vrstiev:
(set! theImageWidth (car (gimp-drawable-width theText) ) ) (set! theImageHeight (car (gimp-drawable-height theText) ) ) (gimp-image-resize theImage theImageWidth theImageHeight 0 0) (gimp-layer-resize theLayer theImageWidth theImageHeight 0 0)
Ak ste ako ja, pravdepodobne sa čudujete, ako líši kresliaca plocha (drawable) a vrstva. Rozdiel medzi nimi spočíva v tom, že kým kresliaca plocha (drawable) predstavuje všetko, na čo sa dá kresliť, t. j. vrátane vrstiev, ale aj kanálov, masiek vrstiev, výberov atď., vrstva je len bližšie špecifikovaný typ kresliacej plochy. Vo väčšine prípadov tento rozdiel nie je dôležitý.
Pripravený obrázok si môžeme prezrieť opätovným pridaním riadka zobrazenia:
(gimp-display-new theImage)
Svoj výtvor uložte, databázu znovu načítajte a svoj prvý skript spustite!
Ak sa pokúsite neuložený obrázok zavrieť, GIMP sa vás opýta, či vytvorený obrázok nechcete najprv uložiť. Vytvorený obrázok je zatiaľ označený ako nečistý (dirty) alebo neuložený. V prípade nášho skriptu je to skôr na obtiaž. Veď sme si iba testovali beh skriptu a vo výslednom obrázku sme nič nepridávali ani nemenili. Okrem toho je práca na skripte ľahko reprodukovateľná. Z toho dôvodu je príznak nečistoty zbytočný a môžeme ho odstrániť.
Príznak nečistoty môžeme ľahko odstrániť pridaním riadku:
(gimp-image-clean-all theImage)
Počítadlo nečistoty sa nastaví na 0 a tým je obrázok prevedený na „čistý“.
Je len na vás, či tento riadok pridáte alebo nie. Ja ho používam v skriptoch, pomocou ktorých tvorím nové, jednoduché obrázky. Tak ako je to v prípade tohto skriptu. Ak je váš skript komplikovaný alebo pracuje s existujúcim obrázkom, túto funkciu pravdepodobne nebudete chcieť použiť.