Nå er det på tide å gjere noe brukbart ut av skriptet.
Fram til nå har vi laga ein tom funksjon og registrert denne i GIMP. Nå er det på tide å legge noe brukbart inn i denne funksjonen. Vi skal lage eit nytt bilete med noen tekst i. Deretter skal vi endra storleiken på biletet slik at det høver nøyaktig til teksten.
Sidan du nå kjenner til korleis du kan tilordna variablar, definera funksjonar og få tilgang til listeverdiar, er resten strake landevegen. Det einaste du treng er å bli kjent med prosedyredatabasen i GIMP og korleis du kan kalla opp prosedyrar derifrå direkte. Fyr opp prosedyre-lesaren og la oss kome i gang med noe nyttig.
Vi byrjar med å lage eit nytt bilete. Då må vi ha ein ny variabel,
theImage
, som blir laga ved å kalla opp den
innebygde funksjonen gimp-image-new
. Som du ser av
prosedyre-lesaren, treng denne funksjonen tre parametrar: Breidda
og høgda på biletet og bilettypen. Sidan vi likevel må endra storleiken
på biletet seinare, vel vi å lage eit RGB-bilete på 10 × 10.
Verdiane for høgde og breidde lagrar vi i eit par variablar til
seinare bruk.
(define (script-fu-text-box inText inFont inFontSize inTextColor) (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
Merk. Vi brukte verdien RGB for å spesifisera at vi ville lage eit RGB-bilde. Vi kunne ha brukt “0” i staden, men “RGB” er lettare å forstå.
Du bør også legge merke til at vi bruker listehovudet for å ta ut resultatet av funksjonsoppkallet. Dette kan sjå litt merkeleg ut all den tid databasen fortel oss at funksjonen returnerer bare ein verdi: ID-en til det nye biletet. Forklaringa er at alle funksjonane i GIMP returnerer ei liste, sjølv om denne lista innehald bare eitt element. Derfor må vi ta ut listehovudet.
Nå når du endeleg har fått eit bilete, treng du også eit nytt lag
til dette biletet. Dette gjer du ved å kalla opp funksjonen
gimp-layer-new
med ID-en til det nye biletet. (Frå nå
av blir bare dei nye linjene i programmet lista opp. Ikkje heile
programmet som tidlegare.) Sidan alle dei lokale variablane nå er
definerte, kan du avslutta deklarasjonen med nødvendige parentesar:
;create a new layer for the image: (theLayer (car (gimp-layer-new theImage theImageWidth theImageHeight RGB-IMAGE "layer 1" 100 NORMAL ) ) ) ) ;end of our local variables
Vi må legge det nye laget til biletet:
(gimp-image-add-layer theImage theLayer 0)
For moro skuld, kan du nå sjå på fruktene av arbeidet så langt. Legg til denne linja for å vise det nye, tomme biletet:
(gimp-display-new theImage)
Lagra arbeidet ditt og vel
→ → . Dersom du nå køyrer skriptet, skal det dukka opp eit nytt bilete på skjermen. Truleg vil det visa ei tilfeldig fargesamling, utan meining. Dette er fordi biletet ikkje er reint. Vindauget er rett og slett ikkje vaska. Vi kjem til det seinare.Fjern linja som viser biletet på skjermen, eller betre, sett eit semikolon (;) framføre for å gjere ho om til eit notat. Du kan då seinare bare fjerne semikolonet for å gjere linja aktiv igjen dersom du skulle ha bruk for det.
For å gjere teksten synleg, må vi legge inn bakgrunns- og forgrunnsfargane. Også her nyttar vi ferdige funksjonar:
Nå har vi fargane, og manglar bare litt reingjering av biletet.
Vel heile biletet og kall opp clear
:
(gimp-context-set-background '(255 255 255) ) (gimp-context-set-foreground inTextColor)
eller (som det står i originalmanuset:)
(gimp-drawable-fill theLayer BACKGROUND-FILL)
Nå skulle biletet vere klar for å motta teksten:
(set! theText (car (gimp-text-fontname theImage theLayer 0 0 inText 0 TRUE inFontSize PIXELS "Sans") ) )
Dette var litt av ei lekse. Funksjonen skulle likevel vere forståeleg
dersom du studerer parametra samstundes som du tar ein kikk i
funksjonslesaren på kva parametrar som er nødvendige. Det som har
skjedd, er at vi har laga eit nytt tekstlag og tilordna det til
variabelen theText
.
Sidan vi nå har teksten, er det bare å plukka ut høgda og breidda på denne og utvida biletet og biletelaget slik at det passer til teksten:
(set! theImageWidth (car (gimp-drawable-width theText) ) ) (set! theImageHeight (car (gimp-drawable-height theText) ) ) (gimp-image-resize theImage theImageWidth theImageHeight 0 0) (gimp-layer-resize theLayer theImageWidth theImageHeight 0 0)
Dersom du undrar på kva “drawable” betyr, er du ikkje åleine. Det er eit ord som er definert i GIMP til å bety alt som kan teiknast på, både lag, kanalar, lagmasker og det du elles måtte kunne finna på. Eit lag er såleis bare ein spesialversjon av “drawable”.
Nå skulle alt vere klart, og du kan gjenopna, eller skriva inn på nytt, linja som sender biletet ditt til skjermen:
(gimp-display-new theImage)
Lagra arbeidet, oppdater databasen og prøv det første skriptet ditt.
Dersom du prøver å lukke biletet utan å lagra det først, vil GIMP kome med eit spørsmål om du ønskjer å lagra biletet. Dette fordi alle bilete det er gjort endringar i, eller som ikkje er lagra, blir av GIMP definerte til å vere “skitne”. Dette blir markert med eit (for oss usynleg) flagg. For dette skriptet, som er lett å henta tilbake igjen, er det liten vits i å lagra kvar gong du har sett på det. Du kan likegodt fjerna dette flagget.
Du fjerner det skitne flagget med kommandoen
(gimp-image-clean-all theImage)
Dette vil setje flagget til 0 og vise at biletet er “reint”.
Det er fritt fram om du vil bruke denne kommandoen. Eg nyttar det i skript som lagar nye bilete og der innhaldet er enkelt, som i dette skriptet. Lagar du skript med kompliserte resultat, eller skript som skal nyttast på eksisterande bilete, vil det vere lurt å sløyfa denne slettekommandoen.