No er det på tide å gjera noko brukbart ut av skriptet.
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 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
.
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* ( ; definer dei lokale variablane ; lage eit nytt bilete: (theImageWidth 10) (theImageHeight 10) (theImage (car (gimp-image-new theImageWidth theImageHeight RGB ) ) ) (theText) ;ein deklarasjon for teksten ;dette lagar me seinare
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.
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.
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:
;create a new layer for the image: (theLayer (car (gimp-layer-new theImage "layer 1" theImageWidth theImageHeight RGB-IMAGE 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!
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.
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 bruka denne kommandoen. Eg nyttar han 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å bilete som finst frå før, vil det vera lurt å sløyfa denne slettekommandoen.