3.5. Dóna una mica de substància al nostre script

Continueu amb la nostra formació i afegiu alguna funcionalitat al nostre script.

3.5.1. Crea una imatge nova

En la lliçó anterior, es va crear una funció buida i es va registrar en el GIMP. En aquesta lliçó, es vol proporcionar funcionalitat a l'script, es vol crear una imatge nova, afegir-li text de l'usuari i redimensionar la imatge per adaptar-la exactament al text.

Una vegada que sabeu com configurar variables, definir funcions i accedir als membres de la llista, la resta va com un rellotge. Tot el que us cal fer és familiaritzar-vos amb les funcions disponibles de la base de dades dels procediments del GIMP i cridar directament les funcions. Així que activeu el Secció 12.7, “El navegador de procediments” comencem.

Comenceu fent una imatge nova. Creareu una nova variable, theImage, habilitada al resultat de cridar la funció gimp-image-new integrada al GIMP.

Com es pot veure des del navegador, la funció gimp-image-new pren tres paràmetres, amplada, alçada i tipus d'imatge. Atès que la imatge es redimensionarà a la mida adequada per ajustar-se al text, crearem una imatge de 10x10 píxels RGB. També s'emmagatzemarà l'amplada i la mida de la imatge en algunes variables, de manera que podrem recuperar més tard en l'script.

        (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
      

Nota: utilitzem el valor RGB per especificar que la imatge és una imatge RGB. Es podria utilitzar també 0, però RGB és més descriptiu quan donem una ullada el codi.

També us hauríeu d'adonar que agafem el cap del resultat de la crida de la funció. Això podria semblar estrany, perquè la base de dades ens diu explícitament que retorna només un valor: l'ID (identificador) de la imatge recentment creada. Tanmateix, totes les funcions del GIMPretornen una llista, encara que només hi hagi un element en la llista, així que necessitem aconseguir el cap de la llista.

3.5.2. Afegeix una capa nova a la imatge

Ara que tenim una imatge, necessitem afegir-li una capa. Cridarem la funció gimp-layer-new per crear la capa, passant-li l'ID de la imatge que hem creat. (A partir d'ara, en lloc de llistar la funció completa, només llistarem les línies que estem afegint. Podeu veure l'script complet aquí). Ja que hem declarat les variables locals que utilitzarem, també tancarem els parèntesis al final de les nostres declaracions de les variables:

        ;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
      

Una vegada tinguem la capa nova, cal afegir-la a la imatge:

        (gimp-image-add-layer theImage theLayer 0)
      

Ara, només per diversió, es veuran els fruits del vostre treball fins aquí, afegint aquesta línia per mostrar la imatge nova i buida:

(gimp-display-new theImage)

Deseu la vostra feina, seleccioneu FiltresScript-FuActualitza els scripts, executeu l’script i hi apareixerà una nova imatge. Probablement contingui brossa (colors aleatoris), perquè no s'ha esborrat. Ho farem més tard.

3.5.3. Afegeix el text

Elimineu la línia que mostra la imatge (o poseu un comentari amb un (;) com el primer caràcter de la línia).

Abans d'afegir text a la imatge, necessitem seleccionar els colors del fons (background) i del primer pla (foreground), perquè així aparegui amb el color que l'usuari ha especificat. Utilitzarem les funcions gimp-context-set-back/foreground:

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

Amb els colors seleccionats correctament, netegeu la brossa present en la imatge omplint la capa amb el color del fons:

        (gimp-drawable-fill theLayer BACKGROUND-FILL)
      

Amb la imatge neta, ara està llesta per afegir-hi un text:

        (set! theText
                      (car
                           (gimp-text-fontname
                            theImage theLayer
                            0 0
                            inText
                            0
                            TRUE
                            inFontSize PIXELS
                            "Sans")
                       )
        )
      

Encara que hi ha una crida de funció llarga, és bastant més senzill si repasseu els paràmetres mentre mireu l'entrada de la funció en el navegador de procediments. Bàsicament, es crea una nova capa de text i s'assigna a la variable theText.

Ara que tenim el text, podem prendre la seva alçada i amplada, i redimensionar la imatge i la capa d'imatge per a la mida del text:

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

És possible que us pregunteu quina és la diferència entre un dibuixable i una capa. La diferència entre els dos és que un dibuixable és alguna cosa en el que s'hi pot dibuixar, incloses capes, però també canals, màscares de capa, la selecció, etc.; una capa és una versió més especifica d'un dibuixable. En la majoria dels casos, la distinció no és important.

Amb la imatge enllestida, s'hi pot tornar a afegir la línia de visualització:

        (gimp-display-new theImage)
      

Deseu la feina, actualitzeu la base de dades i executeu el primer script!

3.5.4. Neteja el senyal brut

Si intenteu tancar la imatge creada sense primer desar el fitxer, el GIMP preguntarà si voleu desar la feina abans de tancar-la. Pregunta això perquè la imatge està marcada com a bruta, o no desada. En el cas del vostre script, això és una molèstia per a les vegades que només feu una prova i no afegiu ni canvieu res en la imatge resultant; la vostra feina és fàcilment reproduïble en un script tan simple, així que té sentit desfer-se d'aquest senyal brut.

Per fer això, es pot netejar el senyal brut després de mostrar la imatge:

        (gimp-image-clean-all theImage)
      

Això posa a 0 el comptador del senyal brut, fent-lo aparèixer com una imatge neta.

Afegir aquesta línia o no és qüestió del gust personal. S'utilitza en scripts que produeixin noves imatges, on els resultats són trivials, com en aquest cas. Si el vostre script és molt complicat, o si treballeu sobre una imatge existent, probablement no voldreu utilitzar aquesta funció.