No er det på tide å gjera noko brukbart ut av skriptet.
Fram til no har me laga ein tom funksjon og registrert denne i GIMP. No er det på tide å leggja noko brukbart inn i denne funksjonen. Me skal laga eit nytt bilete med litt tekst i. Deretter skal me endra storleiken på biletet slik at det høver nøyaktig til teksten.
Sidan du no kjenner til korleis du kan tilordna variablar, definera funksjonar og få tilgang til listeverdiar, er resten strake landevegen. Det einaste du treng er å verta kjent med funksjonane som er tilgjengelege i prosedyredatabasen i GIMP og korleis du kan kalla opp prosedyrar derifrå direkte. Opna Del 12.9, «Prosedyrelesaren».
Me byrjar med å laga eit nytt bilete. Då må me ha ein ny variabel, theImage
, som vert sett til resultatet av å kalla opp den innebygde funksjonen gimp-image-new
.
Som du kan sjå på DB-utforskaren, tek funksjonen gimp-image-new
tre parametrar — biletbreidda, bilethøgda og bilettypen. Sidan me seinare skal forandra storleiken på biletet slik at det passar til teksten, lagar me eit RGB-bilete på 10 × 10 pikslar. Bilethøgda og breidda vert lagra i variablar slik at me kan endra verdiane seinare i skriptet.
(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. Me brukte verdien RGB
for å spesifisera at biletet er i RGB. Dette er meir forståeleg enn om me hadde brukt 0
, som også er fullt lovleg.
Legg merke til at me tok hovudet frå tilbakemeldinga frå funksjonskallet. Dette kan verke litt underleg i og med at databasen seier at berre ein verdi vert returnert, nemleg ID-en for det nyleg oppretta biletet. I GIMP vil alle funksjonar returnere ei liste sjølv om det berre er eitt element i lista. Difor må me plukka ut listehovudet.
No 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å no av vert berre dei nye linjene i programmet lista opp, ikkje heile programmet som tidlegare. Du finn det fullstendige skriptet her). Sidan alle dei lokale variablane no er definerte, kan du avslutta deklarasjonen med nødvendige parentesar:
;opprettar eit nytt lag for biletet: (theLayer (car (gimp-layer-new theImage theImageWidth theImageHeight RGB-IMAGE "layer 1" 100 LAYER-MODE-NORMAL ) ) ) ) ;slutten på dei lokale variablane
Når me har det nye laget, må me leggja det inn i biletet:
(gimp-image-insert-layer theImage theLayer 0 0)
For moro skuld, kan du no sjå på fruktene av arbeidet så langt. Legg til denne linja for å viss det nye, tomme biletet:
(gimp-display-new theImage)
Lagra arbeidet ditt og starta GIMP på nytt. Køyr skriptet og det skal koma opp eit nytt bilete. Det vil truleg innehalda søppel (tilfeldige fargar) fordi me ikkje har tømt det. Dette vil me gjera straks.
Fjern linja som viser biletet på skjermen, eller betre, sett eit semikolon (;) framføre for å gjera ho om til eit notat. Du kan då seinare berre fjerna semikolonet for å gjera linja gjeldande igjen dersom du skulle ha bruk for det.
For å gjera teksten synleg, må me leggja inn bakgrunns- og forgrunnsfargane. Også her nyttar me ferdige funksjonar:
(gimp-context-set-background '(255 255 255) ) (gimp-context-set-foreground inTextColor)
Med fargane sette slik me ønskjer, kan me no fjerna søpla i biletet ved å fylla teikneflata med bakgrunnsfargen:
(gimp-drawable-fill theLayer BACKGROUND-FILL)
No kan me leggja til litt tekst i det reine biletet:
(set! theText (car (gimp-text-fontname theImage theLayer 0 0 inText 0 TRUE inFontSize PIXELS inFont) ) )
Dette var litt av ei lekse. Funksjonen skulle likevel vera forståeleg dersom du studerer parametrane samstundes som du tek ein kikk i funksjonslesaren på kva parametrar som er nødvendige. Det som har skjedd, er at me har laga eit nytt tekstlag og tilordna det til variabelen theText
.
No når me har teksten, brukar me denne for å setja biletet og biletlaget til same breidd og høgd som 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 berre ein spesialversjon av «drawable».
No når biletet er ferdig, kan du gjenopna, eller skriva inn på nytt, linja som sender biletet ditt til skjermen:
(gimp-display-new theImage)
Lagra arbeidet, starta GIMP på nytt og køyr det første skriptet ditt!
Dersom du prøver å lukka biletet utan å lagra det først, vil GIMP koma med eit spørsmål om du ønskjer å lagra biletet. Dette fordi alle bilete det er gjort endringar i, eller som ikkje er lagra, vert definerte til å vere «skitne». Dette vert 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 like godt fjerna dette flagget.
For å gjera dette, kan me fjerna det skitne flagget etter å ha vist biletet:
(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.