Наставимо са нашом обуком и додајмо неку функционалност нашој скрипти.
In the previous lesson, we created an empty function and registered it with GIMP. In this lesson, we want to provide functionality to our script — we want to create a new image, add the user's text to it and resize the image to fit the text exactly.
Once you know how to set variables, define functions and access list members, the rest is all downhill — all you need to do is familiarize yourself with the functions available in GIMP's procedural database and call those functions directly. Open the Одељак 12.9, „Прегледач процедура“.
Почнимо тако што ћемо направити нову слику. Направићемо нову променљиву, theImage, постављену на резултат позивања GIMP-ове уграђене функције gimp-image-new.
As you can see from the DB Browser, the function
gimp-image-new takes three parameters — the
image's width, height and the type of image. Because we'll
later resize the image to fit the text, we'll make a 10×10 pixels
RGB
image. We'll store the image's width and sizes in some
variables, too, as we'll refer to and manipulate them later in
the script.
(define (script-fu-text-box inText inFont inFontSize inTextColor)
(let*
(
; дефинисање локалних променљивих
; прављење нове слике:
(theImageWidth 10)
(theImageHeight 10)
(theImage (car
(gimp-image-new
theImageWidth
theImageHeight
RGB
)
)
)
(theText) ;декларација за текст
;који ћемо касније направити
Напомена: Користили смо вредност RGB да наведемо да је слика RGB слика. Могли смо користити и 0, али је RGB описније када погледамо код.
You should also notice that we took the head of the result of the function call. This may seem strange, because the database explicitly tells us that it returns only one value — the ID of the newly created image. However, all GIMP functions return a list, even if there is only one element in the list, so we need to get the head of the list.
Сада када имамо слику, треба јој додати слој. Позваћемо функцију gimp-layer-new да направимо слој, прослеђујући ИД слике коју смо управо направили. (Од сада, уместо навођења целе функције, наводићемо само линије које јој додајемо. Целу скрипту можете видети овде.) Пошто смо већ декларисали све локалне променљиве које ћемо користити, такође ћемо затворити заграде које означавају крај наших декларација променљивих:
;прављење новог слоја за слику:
(theLayer
(car
(gimp-layer-new
theImage
"layer 1"
theImageWidth
theImageHeight
RGB-IMAGE
100
LAYER-MODE-NORMAL
)
)
)
) ;крај локалних променљивих
Када имамо нови слој, треба да га додамо слици:
(gimp-image-insert-layer theImage theLayer 0 0)
Сада, чисто забаве ради, погледајмо плодове нашег рада до ове тачке и додајмо ову линију да прикажемо нову, празну слику:
(gimp-display-new theImage)
Сачувајте свој рад, поново покрените GIMP, покрените скрипту и требало би да се појави нова слика. Вероватно ће садржати „ђубре“ (насумичне боје), јер је нисмо обрисали. Тиме ћемо се позабавити за тренутак.
Само напред и уклоните линију за приказ слике (или је коментаришите са (;) као првим знаком у линији).
Пре него што додамо текст на слику, треба да поставимо боје позадине и предњег плана тако да се текст појави у боји коју је корисник навео. Користићемо функције gimp-context-set-back/foreground:
(gimp-context-set-background '(255 255 255) )
(gimp-context-set-foreground inTextColor)
Када су боје исправно постављене, хајде сада да очистимо смеће које се тренутно налази у слици тако што ћемо попунити цртеж бојом позадине:
(gimp-drawable-fill theLayer FILL-BACKGROUND)
Када је слика очишћена, спремни смо да додамо мало текста:
(set! theText
(car
(gimp-text-font
theImage theLayer
0 0
inText
0
TRUE
inFontSize
inFont)
)
)
Иако је то дугачак позив функције, прилично је једноставан ако прођете кроз параметре док гледате унос функције у Прегледнику БП. У основи, правимо нови текстуални слој и додељујемо га променљивој theText.
Сада када имамо текст, можемо да узмемо његову ширину и висину и променимо величину слике и слоја слике према величини текста:
(set! theImageWidth (car (gimp-drawable-get-width theText) ) )
(set! theImageHeight (car (gimp-drawable-get-height theText) ) )
(gimp-image-resize theImage theImageWidth theImageHeight 0 0)
(gimp-layer-resize theLayer theImageWidth theImageHeight 0 0)
Ако сте попут мене, вероватно се питате шта је то цртеж у поређењу са слојем. Разлика између њих је у томе што је цртеж било шта у чему се може цртати, укључујући слојеве, али и канале, маске слојева, избор итд; слој је специфичнија верзија цртежа. У већини случајева, ова разлика није важна.
Када је слика спремна, сада можемо поново да додамо нашу линију за приказ:
(gimp-display-new theImage)
Сачувајте свој рад, поново покрените ГИМП и покрените своју прву скрипту!
If you try to close the image created without first saving the file, GIMP will ask you if you want to save your work before you close the image. It asks this because the image is marked as dirty, or unsaved. In the case of our script, this is a nuisance for the times when we simply give it a test run and don't add or change anything in the resulting image — that is, our work is easily reproducible in such a simple script, so it makes sense to get rid of this dirty flag.
Да бисмо то урадили, можемо да обришемо ознаку измењености након приказивања слике:
(gimp-image-clean-all theImage)
Ово ће поставити број измена на 0, чинећи да изгледа као „чиста“ слика.
Да ли ћете додати ову линију или не, ствар је личног укуса. Ја је користим у скриптама које праве нове слике, где су резултати безначајни, као у овом случају. Ако је ваша скрипта веома компликована, или ако ради на постојећој слици, вероватно нећете желети да користите ову функцију.