Pri písaní skriptov budete chcieť, aby používatelia mali možnosť vrátiť späť chybné kroky. Toto sa dá docieliť veľmi ľahko. Slúžia na to funkcie gimp-undo-push-group-start
a gimp-undo-push-group-end
, ktoré dáte pred a za kód, ktorý manipuluje s obrázkom. Môžete si ich predstaviť ako párovú značku, ktorá GIMP informuje o tom, kedy začať a kedy skončiť zaznamenávanie manipulácie s obrázkom.
Ak začínate vytvárať celkom nový obrázok, použitie týchto funkcií nemá prakticky žiadny význam. Nemeníte totiž existujúci obrázok. Naopak, ak meníte už existujúci obrázok, tieto funkcie by ste mali použiť.
Ak sú tieto funkcie použité, vrátenie zmien je pre skript bezproblémové.
Teraz, keď už máme celkom šikovný skript na tvorbu textových rámikov, pridajme mu ešte dve ďalšie vlastnosti:
-
Momentálne je veľkosť obrázka nastavená tak, že okolo textu nie je priestor pre nič. Ani pre tieň alebo nejaké efekty (aj keď mnohé skripty v prípade potreby obrázok automaticky zväčšia). Urobme teda ešte jednu vec. Okolo textu pridajme trochu miesta. Veľkosť tohto priestoru nechajme na používateľa, nech si zvolí priestor v percentách z veľkosti výsledného textu.
-
Tento skript sa bude dať veľmi ľahko využiť aj v iných skriptoch pracujúcich s textom. Rozšírme ho teda tak, aby vracal obrázok a vrstvy, ktoré môžu ostatné skripty volať. Ich volaním sa budú dať aplikovať na iné obrázky a vrstvy, ktoré vytvoríme.
Aby používateľ mohol zadať množstvo voľného priestoru okolo textu, našej funkcii pridáme parameter a funkciu registrácie:
(define (script-fu-text-box inTest inFont inFontSize inTextColor inBufferAmount)
(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
(theBuffer) ;added
(theLayer
(car
(gimp-layer-new
theImage
theImageWidth
theImageHeight
RGB-IMAGE
"layer 1"
100
NORMAL
)
)
)
) ;koniec lokálnych premenných
[Code here]
)
(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 SF-ADJUSTMENT "Buffer amount" '(35 0 100 1 10 1 0) ;posuvník ) (script-fu-menu-register "script-fu-text-box" "<Image>/Font/Create/Text")
Kód budeme pridávať na dvoch miestach: hneď pred zmenou obrázka a na koniec skriptu (na vrátenie nového obrázka, vrstvy a textu).
Akonáhle získame šírku a výšku textu, tieto hodnoty budeme musieť zväčšiť na základe priestoru zadaného používateľom. Kontrolu zadaných údajov nebudeme vykonávať. Nie je to životne dôležité. Nie je dôvod kontrolovať, či používateľ zadal hodnoty v rozsahu 0-100%, alebo či zadal napr. „200%“. Môžeme mu to umožniť.
(set! theBuffer (* theImageHeight (/ inBufferAmount 100) ) ) (set! theImageHeight (+ theImageHeight theBuffer theBuffer) ) (set! theImageWidth (+ theImageWidth theBuffer theBuffer) )
Všetko, o čo sa tu snažíme, je nastaviť voľný priestor okolo textu na základe šírky a výšky zadaného textu a pridať k nemu dvakrát toľko priestoru. (Dvakrát toľko priestoru pridáme ku každému rozmeru, keďže voľný priestor musí byť pridaný na každej strane textu.)
Teraz, keď sme obrázok zväčšili o voľný priestor okolo textu, musíme text v obrázku vycentrovať. Urobíme to posunom textu v súradniciach (x, y) (theBuffer
, theBuffer
). Za miesto, kde sa v kóde mení veľkosť vrstvy a obrázka, pridáme nasledujúci riadok:
(gimp-layer-set-offsets theText theBuffer theBuffer)
Pokračujte v práci, skript uložte, znovu načítajte databázu a skript spustite.
Ostáva už len vrátiť obrázok, vrstvu a textovú vrstvu. Po zobrazení obrázka pridáme nasledujúci riadok:
(list theImage theLayer theText)
Toto je posledný riadok našej funkcie, ktorý tento zoznam sprístupní ostatným skriptom. Tie ho môžu ďalej použiť.
Aby náš skript mohli použiť iné skripty musíme napísať niečo takéto:
(set! theResult (script-fu-text-box "Ľubovoľný text" "Charter" "30" '(0 0 0) "35" ) ) (gimp-image-flatten (car theResult))
Blahoželám! Ste na dobrej ceste k zisku čierneho opasku v Script-Fu.