Наставимо са нашом обуком и додајмо неку функционалност нашој скрипти.
У претходној лекцији смо направили празну функцију и регистровали је у GIMP-у. У овој лекцији желимо да пружимо функционалност нашој скрипти — желимо да направимо нову слику, додамо јој кориснички текст и променимо величину слике тако да се тачно уклапа са текстом.
Када научите како да постављате променљиве, дефинишете функције и приступате члановима листе, остатак је лак — све што треба да урадите је да се упознате са функцијама доступним у GIMP-овој процедуралној бази података и да директно позивате те функције. Отворите Одељак 12.10, „Прегледач процедура“.
Почнимо тако што ћемо направити нову слику. Направићемо нову променљиву, theImage, постављену на резултат позивања GIMP-ове уграђене функције gimp-image-new.
Као што можете видети у прегледачу базе података, функција gimp-image-new узима три параметра — ширину, висину и врсту слике. Пошто ћемо касније променити величину слике да одговара тексту, направићемо RGB слику величине 10×10 пиксела. Такође ћемо сачувати ширину и величину слике у неким променљивим, јер ћемо их касније користити и обрађивати у скрипти.
(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 описније када погледамо код.
Такође треба да приметите да смо узели почетак резултата позива функције. Ово може изгледати чудно, јер нам база података изричито каже да она враћа само једну вредност — ИД новостворене слике. Међутим, све GIMP функције враћају листу, чак и ако у листи постоји само један елемент, па морамо да узмемо почетак листе.
Сада када имамо слику, треба јој додати слој. Позваћемо функцију 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)
Сачувајте свој рад, поново покрените ГИМП и покрените своју прву скрипту!
Ако покушате да затворите направљену слику без претходног чувања датотеке, ГИМП ће вас питати да ли желите да сачувате свој рад пре него што затворите слику. То пита зато што је слика означена као измењена, или несачувана. У случају наше скрипте, ово је сметња у тренуцима када је једноставно тестирамо и не додајемо нити мењамо ништа у резултујућој слици — то јест, наш рад је лако поновљив у тако једноставној скрипти, па има смисла ослободити се ове ознаке измењености.
Да бисмо то урадили, можемо да обришемо ознаку измењености након приказивања слике:
(gimp-image-clean-all theImage)
Ово ће поставити број измена на 0, чинећи да изгледа као „чиста“ слика.
Да ли ћете додати ову линију или не, ствар је личног укуса. Ја је користим у скриптама које праве нове слике, где су резултати безначајни, као у овом случају. Ако је ваша скрипта веома компликована, или ако ради на постојећој слици, вероватно нећете желети да користите ову функцију.