Када правите скрипту, желите да својим корисницима пружите могућност да опозову своје радње у случају да направе грешку. Ово се лако постиже позивањем функција gimp-image-undo-group-start и gimp-image-undo-group-end око кода који мења слику. Можете их посматрати као упарене наредбе које обавештавају Гимп када да започне и заустави снимање измена на слици, како би се те измене касније могле опозвати.
Ако правите потпуно нову слику, нема смисла користити ове функције јер не мењате постојећу слику. Међутим, када мењате постојећу слику, сигурно ћете желети да користите ове функције.
Поништавање скрипте ради скоро беспрекорно када се користе ове функције.
Сада када имамо веома корисну скрипту за прављење текстуалних оквира, додајмо јој две могућности:
Currently, the image is resized to fit exactly around the text — there's no room for anything, like drop shadows or special effects (even though many scripts will automatically resize the image as necessary). Let's add a buffer around the text, and even let the user specify how much buffer to add as a percentage of the size of the resultant text.
Ова скрипта би се лако могла користити у другим скриптама које раде са текстом. Проширимо је тако да враћа слику и слојеве, како би друге скрипте могле да позову ову скрипту и користе слику и слојеве које направимо.
Да бисмо омогућили кориснику да одреди количину празног простора, додаћемо параметар нашој функцији и функцији за регистрацију:
(define (script-fu-text-box inTest inFont inFontSize inTextColor inBufferAmount)
(let*
(
; define our local variables
; create a new image:
(theImageWidth 10)
(theImageHeight 10)
(theImage (car
(gimp-image-new
theImageWidth
theImageHeight
RGB
)
)
)
(theText) ;a declaration for the text
;we create later
(theBuffer) ;added
(theLayer
(car
(gimp-layer-new
theImage
"layer 1"
theImageWidth
theImageHeight
RGB-IMAGE
100
LAYER-MODE-NORMAL
)
)
)
) ;end of our local variables
[Code here]
)
(script-fu-register
"script-fu-text-box" ;function name
"Text Box" ;menu label
"Creates a simple text box, sized to fit\
around the user's choice of text,\
font, font size, and color." ;description
"Michael Terry" ;author
"copyright 1997, Michael Terry;\
2009, the GIMP Documentation Team" ;copyright notice
"October 27, 1997" ;date created
"" ;image type that the script works on
SF-STRING "Text" "Text Box" ;a string variable
SF-FONT "Font" "Charter" ;a font variable
SF-ADJUSTMENT "Font size" '(50 1 1000 1 10 0 1)
;a spin-button
SF-COLOR "Color" '(0 0 0) ;color variable
SF-ADJUSTMENT "Buffer amount" '(35 0 100 1 10 1 0)
;a slider
)
(script-fu-menu-register "script-fu-text-box" "<Image>/Filters/Tutorial")
Додаћемо код на два места: непосредно пре промене величине слике, и на крају скрипте (како бисмо вратили нову слику, слој и текст).
Након што добијемо висину и ширину текста, морамо променити ове вредности на основу количине празног простора коју је корисник навео. Нећемо вршити никакву проверу грешака како бисмо се уверили да је у опсегу од 0-100% јер то није критично, и зато што нема разлога зашто корисник не би могао да унесе вредност као што је „200“ као проценат простора који се додаје.
(set! theBuffer (* theImageHeight (/ inBufferAmount 100) ) )
(set! theImageHeight (+ theImageHeight theBuffer theBuffer) )
(set! theImageWidth (+ theImageWidth theBuffer theBuffer) )
Све што овде радимо је подешавање празног простора на основу висине текста, и његово додавање два пута и на висину и на ширину наше нове слике. (Додајемо га два пута за обе димензије јер простор треба додати са обе стране текста.)
Сада када смо променили величину слике како бисмо омогућили празан простор, морамо да центрирамо текст унутар слике. То се ради померањем на (x, y) координате (theBuffer, theBuffer). Додао сам ову линију након промене величине слоја и слике:
(gimp-layer-set-offsets theText theBuffer theBuffer)
Само напред, сачувајте своју скрипту и испробајте је након поновног покретања Гимпа.
Све што је преостало да урадимо јесте да вратимо нашу слику, слој и текстуални слој. Након приказивања слике, додајемо ову линију:
(list theImage theLayer theText)
Ово је последња линија функције, чиме овај списак постаје доступан другим скриптама које желе да га користе.
Да бисмо користили нашу нову скрипту за текстуалне оквире у другој скрипти, могли бисмо да напишемо нешто попут следећег:
(set! theResult (script-fu-text-box
"Some text"
"Charter" "30"
'(0 0 0)
"35"
)
)
(gimp-image-flatten (car theResult))
Честитамо, на путу сте ка свом црном појасу у Скрипт-фуу!