3.4. Váš prvý Script-Fu

Nepotrebujete sa na chvíľu zastaviť a chytiť dych? Nie? Dobre, tak potom sa pustíme do štvrtej lekcie - váš prvý Script-Fu.

3.4.1. Tvorba skriptu Text Box

Jednou z mojich najčastejšie používaných operácií v GIMPe je tvorba textu pre webovú stránku, logá alebo niečo podobné. Na začiatku však nikdy presne neviete, s akým veľkým obrázkom máte začať. Neviete, koľko miesta si bude vyžadovať text s nastaveným typom a veľkosťou písma.

Majster v Script-Fu (ale aj študent) si rýchlo uvedomí, že tento problém je možné veľmi jednoducho vyriešiť a zaizovať pomocou Script-Fu.

Vytvoríme skript, ktorý pomenujeme Text Box. Skript vytvorí obrázok o veľkosti presne zodpovedajúcej textu. Text zadá používateľ. Aj výber písma, jeho veľkosť a farbu textu necháme na používateľa.

3.4.2. Úprava a uloženie skriptov

Až doteraz sme pracovali v konzole Script-Fu. Teraz však prejdeme na úpravu textových súborov skriptov.

Kde budete skripty ukladať je na vás. Ak máte prístupové práva do východzieho adresára skriptov, skripty môžete ukladať tam. Svoje skripty ukladám do osobného adresára skriptov, t. j. držím ich oddelene od skriptov dodávaných spolu s GIMPom.

V adresári .gimp-2.6, ktorý GIMP vytvoril vo vašom osobnom adresári, môžete nájsť adresár pod menom scripts. GIMP bude tento adresár (.gimp-2.6) aicky prehľadávať a skripty, ktoré v ňom nájde, pridá do databázy Script-Fu. Vaše vlastné skripty by ste preto mali umiestniť práve sem.

3.4.3. Úplné základy

Každý Script-Fu definuje prinajmenšom jednu funkciu, podľa ktorej skript funguje. Toto je miesto, kde sa najviac natrápite.

Každý skript musí byť naviac zaregistrovaný do databázy procedúr aby ste doň mohli vstupovať z GIMPu.

Najprv zadefinujeme hlavnú funkciu:

        (define (script-fu-text-box inText inFont inFontSize inTextColor))
      

Takto sme definovali novú funkciu, ktorú sme pomenovali script-fu-text-box. Obsahuje štyri parametre popisujúce nejaký text, písmo, veľkosť písma a jeho farbu. Funkcia je momentálne prázdna a teda nič nerobí. Zatiaľ je to v pohode. Nič nové, nič zložité.

3.4.4. Menné konvencie

Podľa konvencie Scheme, uprednostňujú sa malé písmená a pomlčky. Tejto konvencie som sa pridŕžal aj pri pomenovaní našej funkcie. Pri pomenovaní parametrov funkcie som sa však konvencie nedržal. Pre parametre a premenné rád používam popisné mená. Preto predpona „in“ pri parametroch mi naznačí, že parametre obsahujú hodnoty predávané skriptu, a nie, že sú skriptom vytvorené. Pre premenné definované vo vnútri skriptu používam predponu „the“.

V GIMPe je dobrým zvykom pomenovať funkcie skriptov podľa vzorca script-fu-menofunkcie. Je to výhodné, lebo v databáze procedúr všetky funkcie nájdete zoradené pod menom script-fu. Toto usporiadanie tiež pomáha odlíšiť funkcie od zásuvných modulov.

3.4.5. Registrácia funkcie

Teraz poďme funkciu v GIMPe registrovať. Robí sa to volaním funkcie script-fu-register. GIMP pri čítaní skriptu funkciu vykoná, čím sa skript zaregistruje do databázy procedúr. Túto funkciu môžete v skripte umiestniť ľubovoľne. Ja ju však dávam na koniec kódu.

Nasleduje výpis registrácie tejto funkcie (Všetky parametre tejto funkcie vysvetlím za chvíľku):

  (script-fu-register
    "script-fu-text-box"                        ;meno funkcie
    "Text Box"                                  ;meno popisu
    "Creates a simple text box, sized to fit\
      around the user's choice of text,\
      font, font size, and color."              ;popis
    "Michael Terry"                             ;autor
    "copyright 1997, Michael Terry;\
      2009, the GIMP Documentation Team"        ;copyright
    "October 27, 1997"                          ;dátum vzniku
    ""                     ;typ obrázku s ktorým skript pracuje
    SF-STRING      "Text:"         "Text Box"   ;premenná reťazca
    SF-FONT        "Font:"         "Charter"    ;premenná písma
    SF-ADJUSTMENT  "Font size"     '(50 1 1000 1 10 0 1)
                                                ; tlačidlo
    SF-COLOR       "Color:"        '(0 0 0)     ;premenná farby
  )
  (script-fu-menu-register "script-fu-text-box" "<Image>/File/Create/Text")
      

Ak tieto funkcie uložíte do osobného adresára skriptov ako textový súbor s príponou .scm, potom vyberiete položky Filters (Filtre)Script-FuRefresh Scripts, tento nový skript sa objaví pod položkami File (Súbor)CreateTextText Box.

Ak tento skript spustíte, samozrejme, že nevykoná vôbec nič, ale aspoň uvidíte výzvy vytvorené pri registrácii skriptu (viac informácií o tom, čo sme urobili, vysvetlíme v ďalšom texte).

Nakoniec, ak otvoríte Prehliadač procedúr (Procedure Browser) ( HelpProcedure Browser), zistíte, že náš skript sa objaví v databáze.

3.4.6. Jednotlivé kroky registrácie skriptu

Aby bol náš skript v GIMPe zaregistrovaný, vyvoláme funkciu script-fu-register, zadáme sedem povinných parametrov, pridáme parametre nášho skriptu spolu s popisom a štandardnými hodnotami pre každý parameter.

Povinné parametre

  • Meno funkcie, ktorú sme definovali. Je to funkcia, ktorá sa volá pri spustení skriptu (vstupný bod nášho skriptu). Keďže môžeme definovať viac funkcií v rámci rovnakého súboru, meno funkcie je dôležité. GIMP musí vedieť, ktorú z funkcií má volať. V našom prípade sme definovali a registrovali len jednu funkciu, text-box.

  • Umiestnenie v ponukách, kde bude skript vložený. Presné umiestnenie skriptu sa zapisuje podobne ako cesta k súboru v Unixe. Koreňom cesty je ponuka obrázka ako <Image>.[6].

    Ak váš skript nefunguje na existujúcom obrázku (ale vytvára nový obrázok, tak ako to bude robiť skript Text Box), budete ho musieť umiestniť do ponuky okna obrázka. Skript budete môcť aktivovať prostredníctvom hlavnej ponuky, kliknutím na pravé tlačidlo myši v okne obrázka, kliknutím na symbol tlačidla ponuky v ľavom hornom rohu okna obrázka, alebo stlačením klávesuF10.

    Ak chcete aby váš skript pracoval na upravovanom obrázku, budete ho musieť vložiť do ponuky okna obrázka. Zvyšok cesty ukazuje na zoznamy ponúk, ponuky a podponuky. Náš skript Text Box sme uložili do položky Text ponuky Create v položke File (Súbor).[7] (File (Súbor)CreateTextText Box).

    Možno ste si všimli, že keď sme začínali, podponuka Text sa v ponuke Script-Fu nenachádzala. GIMP ju vytvoril aicky. Robí tak vždy, keď konkrétna ponuka dovtedy neexistovala.

  • Popis skriptu, ktorý sa zobrazuje v Prehliadači procedúr.

  • Vaše meno (meno autora skriptu).

  • Copyright informácie o autorských právach.

  • Dátum, kedy bol skript napísaný alebo kedy bol naposledy revidovaný.

  • Typ obrázkov, s ktorými skript vie pracovať. Môže to byť niektorý z nasledujúcich typov: RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA. Ale typ nemusí byť zadaný. V našom príklade obrázok vytvárame, takže typ obrázka nemusíme definovať.

Obrázok 13.4. Ponuka nášho skriptu

Ponuka nášho skriptu.

3.4.7. Registrácia parametrov skriptu

Po zadaní povinných parametrov musíte zadať aj parametre, ktoré vyžaduje náš skript. Pri zapisovaní týchto parametrov musíme uviesť aj o aké typy sa jedná. Toto je dôležité pre dialógové okno ktoré sa otvorí, keď používateľ vyberie náš skript. Musíme zadať aj východziu hodnotu.

Táto časť registračného procesu má nasledovný formát:

Typ parametra

Popis

Príklad

SF-IMAGE

Ak váš skript pracuje na otvorenom obrázku, toto je prvý parameter, ktorý nasleduje za povinnými parametrami. V tomto parametre GIMP predá referencie obrázku.

3

SF-DRAWABLE

Ak váš skript pracuje na otvorenom obrázku, toto by mal byť druhý parameter po parametre SF-IMAGE. Zodpovedá aktívnej vrstve. V tomto parametre GIMP predá referencie aktívnej vrstve.

17

SF-VALUE

Akceptuje čísla a reťazce. Majte na pamäti, že úvodzovky pre implicitný text musíte vynechať, takže je lepšie použiť SF-STRING.

42

SF-STRING

Akceptuje reťazce.

"Ľubovoľný text"

SF-COLOR

Popisuje farbu, ktorá sa vyžaduje v tomto parametre.

'(0 102 255)

SF-TOGGLE

Zobrazuje sa začiarkavacie políčko a prijíma booleansku hodnotu.

TRUE alebo FALSE

3.4.8.  Parameter Script-Fu API[8]

[Note] Poznámka

Okrem uvedených parametrov existuje ešte niekoľko typov pre interaktívny režim. Každý z nich vytvorí widget v kontrolnom dialógu. V testovacom skripte dodávaných so zdrojovým kódom GIMPu plug-ins/script-fu/scripts/test-sphere.scm nájdete zoznam týchto parametrov s popisom a príkladmi.

Typ parametra

Popis

SF-ADJUSTMENT

Vytvorí widget na prispôsobenie v dialógovom okne.

SF-ADJUSTMENT "label" '(value lower upper step_inc page_inc digits type)

Widget zoznamu argumentov
ElementPopis
"label"Vypísaný text pred widgetom.
valueHodnota vypísaná pred spustením.
lower / upperDolná alebo horná hodnota (rozsah výberu).
step_incHodnota zvýšenia alebo zníženia.
page_incZvýšenie alebo zníženie pomocou klávesov.
digitsČísla za čiarkou (decimálna časť).
Type (Typ)Jeden z: SF-SLIDER alebo 0, SF-SPINNER alebo 1

SF-COLOR

V dialógovom okne vytvára tlačidlo výberu farieb.

SF-COLOR "label" '(red green blue)

alebo

SF-COLOR "label" "color"

Widget zoznamu argumentov
ElementPopis
"label"Vypísaný text pred widgetom.
Red (Červená); Green (Zelená); Blue (Modrá)Zoznam troch hodnôt pre červený, zelenú a modrú zložku.
Color (Farba)Farba v CSS zápise.

SF-FONT

V dialógovom okne vytvára pomôcku výberu typu písma. Vracia názov písma ako reťazec. Existujú dve nové procedúry, ktoré uľahčujú použitie tohto parametra:

(gimp-text-fontname image drawable x-pos y-pos text border antialias size unit font)

(gimp-text-get-extents-fontname text size unit font)

kde font predstavuje meno typu písma, ktorý dostanete. Veľkosť špecifikovaná v názve písma je v tichosti ignorovaná. Použitá je iba pri prepínači písma. Preto po výzve nastavte hodnotu na rozumnú veľkosť (24 pixlov je dobrá voľba).

SF-FONT "label" "fontname"

Widget zoznamu argumentov
ElementPopis
"label"Vypísaný text pred widgetom.
"fontname"Meno východzieho písma.

SF-BRUSH

V kontrolnom dialógu vytvorí widget. Widget pozostáva z oblasti náhľadu (po jeho stlačení sa zobrazí náhľad) a tlačidla s popisom „...“. Po stlačení tlačidla sa objaví dialógové okno v ktorom môžete vybrať štetce. Môžete tu upravovať aj každú z charakteristík štetcov.

SF-BRUSH "Brush" '("Circle (03)" 100 44 0)

Zobrazí dialógové okno s prednastavenými hodnotami štetca :Circle (03) opacity 100 spacing 44 a paint mode of Normal (value 0).

Ak tieto hodnoty zostanú nezmenené, prejdu do funkcie ako parametre v podobe: '("Circle (03)" 100 44 0).

SF-PATTERN

V kontrolnom dialógu vytvorí widget. Widget pozostáva z oblasti náhľadu (po jeho stlačení sa zobrazí náhľad) a tlačidla s popisom „...“. Stlačením tlačidla otvoríte dialógové okno, kde môžete vzorky zmeniť.

SF-PATTERN "Pattern" "Maple Leaves"

Po zavolaní skriptu sa vráti hodnota, ktorá predstavuje reťazec obsahujúci názov vzorky. Ak výber ostane bez zmeny, reťazec obsahuje meno "Maple Leaves".

SF-GRADIENT

V kontrolnom dialógu vytvorí widget. Widget obsahuje tlačidlo s náhľadom zvoleného prechodu.

Po stlačení tlačidla sa zobrazí dialógové okno výberu prechodu.

SF-GRADIENT "Gradient" "Deep Sea"

Vrátená hodnota po zavolaní skriptu predstavuje reťazec s menom prechodu. Ak výber ostane nezmenený, reťazec obsahuje meno prechodu "Deep Sea".

SF-PALETTE

V kontrolnom dialógu vytvorí widget. Widget obsahuje tlačidlo s meno vybranej palety.

Po stlačení tlačidla sa zobrazí dialógové okno výberu paliet.

SF-PALETTE "Palette" "Named Colors"

Po zavolaní skriptu sa vráti hodnota, ktorá predstavuje reťazec s menom palety. Ak sa výber nezmenil, reťazec bude obsahovať "Named Colors".

SF-FILENAME

V kontrolnom dialógu vytvorí widget. Widget pozostáva z tlačidla s menom súboru.

Po stlačení tlačidla sa zobrazí dialógové okno výberu súboru.

SF-FILENAME "label" (string-append "" gimp-data-directory "/scripts/beavis.jpg")

Po zavolaní skriptu sa vráti hodnota, ktorá predstavuje reťazec s menom súboru.

SF-DIRNAME

Použiteľné iba v interaktívnom režime. Podobá sa na SF-FILENAME, ale vytvorený widget umožňuje vybrať namiesto súboru adresár.

SF-DIRNAME "label" "/var/tmp/images"

Po zavolaní skriptu sa vráti hodnota, ktorá predstavuje reťazec s menom adresára.

SF-OPTION

V kontrolnom dialógu vytvorí widget. Widget predstavuje okno so zoznamom možností.

Prvá položka v zozname predstavuje východziu možnosť.

SF-OPTION "label" '("option1" "option2")

Po zavolaní skriptu sa vráti hodnota, ktorá predstavuje číslo zvolenej možnosti. Prvá možnosť sa počíta ako 0.

SF-ENUM

V kontrolnom dialógu vytvorí widget. Widget predstavuje okno zobrazujúce enum hodnoty pre daný typ. Musí to byť meno registrovanej enum bez predpony „GIMP“. Druhý parameter popisuje východziu hodnotu.

SF-ENUM "Interpolation" '("InterpolationType" "linear")

Po zavolaní skriptu sa vráti hodnota, ktorá zodpovedá zvolenej enum hodnote.



[6] Pred verziou 2.6 ste <Panel s nástrojmi> mohli použiť. Novšie verzie však Panel s nástrojmi neobsahuje ponuky, takže ho nepoužívajte.

[7] Originál napísaný Mike-om uvádza, že vstupné pole pre ponuky máte vložiť do ponúk Script-Fu v Xtns ponukách pre Panel s nástrojmi. Od verzie 2.6 boli ponuky s Panelu s nástrojmi odstránené a presunuté do okna obrázka.

[8] This section is not part of the original tutorial.