3.5. Leggja til tilleggsfunksjonar
| 3. Ei innføring i Script-Fu |

### 3.5. Leggja til tilleggsfunksjonar

No er det på tide å gjera noko brukbart ut av skriptet.

#### 3.5.1. Å laga eit nytt bilete

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*
                  (
                     ; 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.

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.

#### 3.5.2. Å leggja eit nytt lag til biletet

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.

#### 3.5.3. Leggja til tekst

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!

#### 3.5.4. Stryk det skitne flagget

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 å vera «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 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.

3.4. Det første Script-Fu skriptet ditt |  | 3.6. Utvid skriptet Text Box

Report a bug in GIMP Report a documentation error