3.5. Blås liv i skriptet

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

3.5.1. Å laga eit nytt bilete

Fram til no har vi laga ein tom funksjon og registrert denne i GIMP. No er det på tide å leggja noko brukbart inn i denne funksjonen. Vi skal laga eit nytt bilete med litt tekst i. Deretter skal vi 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. Fyr opp Del 12.8, «Prosedyrelesaren» og lat oss koma i gong med noko nyttig!

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 tar funksjonen gimp-image-new tre parametrar — biletbreidda, bilethøgda og bilettype. Sidan vi seinare skal forandra storleiken på biletet slik at det passar til teksten, lagar vi eit RGB-bilete på 10 × 10 pikslar. Bilethøgda og breidda vert lagra i variablar slik at vi kan endre 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. Vi brukte verdien RGB for å spesifisere at biletet er i RGB. Dette er meir forståeleg enn om vi hadde brukt 0, som også er fullt lovleg.

Legg merke til at vi 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å vi plukke ut listehovudet.

3.5.2. Å leggja eit nytt lag til i biletet

Nå når du endeleg har fått eit bilete, treng du også eit nytt lag til dette biletet. Dette får 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
      

Vi må leggja det nye laget til 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 å visa det nye, tomme biletet:

(gimp-display-new theImage)

Lagra arbeidet ditt og vel FilterScript-FuOppdater skript. Dersom du no 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.

3.5.3. Leggja til teksten

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 aktiv igjen dersom du skulle ha bruk for det.

For å gjera teksten synleg, må vi leggja inn bakgrunns- og forgrunnsfargane. Også her nyttar vi ferdige funksjonar:

        (gimp-context-set-background '(255 255 255) )
        (gimp-context-set-foreground inTextColor)
      

Med fargane sette slik vi ønskjer, kan vi no fjerna søpla i biletet ved å fylla teikneflata med bakgrunnsfargen:

        (gimp-drawable-fill theLayer BACKGROUND-FILL)
      

Nå kan vi 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 parameterane samstundes som du tek 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.

Nå når vi har teksten, brukar vi denne for å setja biletet og biletlaget til same breidde og høgde 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».

Nå 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, frisk opp databasen og prøv 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 vi fjerna det skitne flagget etter å ha vist biletet:

        (gimp-image-clean-all theImage)
      

Dette vil setja flagget til 0 og visa 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å eksisterande bilete, vil det vera lurt å sløyfa denne slettekommandoen.