3.5. Pridanie funkcionality skriptu

V našom kurze môžeme pokračovať. Vytvorenému skriptu pridáme nejaké tie črevá, t. j. funkcionalitu.

3.5.1. Tvorba nového obrázka

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.

3.5.2. Pridanie novej vrstvy do obrázku

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 Filters (Filtre)Script-FuRefresh Scripts (Znovunačítať skripty). 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.

3.5.3. Pridanie textu

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!

3.5.4. Vyčistenie obrázku

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ť.