3.5. Blås liv i skriptet

Nå er det på tide å gjere noko brukbart ut av skriptet.

3.5.1. Å lage eit nytt bilete

Fram til nå har vi laga ein tom funksjon og registrert denne i GIMP. Nå er det på tide å legge noko brukbart inn i denne funksjonen. Vi skal lage 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 nå kjenner til korleis du kan tilordna variablar, definera funksjonar og få tilgang til listeverdiar, er resten strake landevegen. Det einaste du treng er å vert kjent med funksjonane som er tilgjengelege i prosedyredatabasen i GIMP og korleis du kan kalla opp prosedyrar derifrå direkte. Fyr opp Del 12.7, “Prosedyrelesaren” og la oss kome i gang med noko nyttig.

Vi byrjar med å lage eit nytt bilete. Då må vi 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 forandre storleiken på biletet slik at det passar til teksten, lager 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. Å legge eit nytt lag til biletet

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 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 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 FilterScript-FuOppdater skript. 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.

3.5.3. Legge til tekst

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 berre 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:

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

Med fargane sette slik vi ønskjer, kan vi nå fjerne søpla i biletet ved å fylle det med bakgrunnsfargen.

        (gimp-drawable-fill theLayer BACKGROUND-FILL)
      

Nå kan vi legge til litt tekst i det reine biletet:

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

Nå når vi har teksten, bruker vi denne for å setje 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 å 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, 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 fjerne 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.