3.5. Adding Additional Functionality

Continúe con su entrenamiento y añade alguna funcionalidad a nuestro script.

3.5.1. Crear una imagen nueva

En la lección anterior, se creó una función vacía y se registró en GIMP. En esta lección, se quiere proporcionar funcionalidad al script, se quiere crear una imagen nueva, añadirle texto del usuario y redimensionar la imagen para adecuarla al texto exactamente.

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 Sección 12.8, “El visor de procedimientos”.

Comience creando una imagen nueva. Cree una nueva variable, theImage, es el resultado de llamar a la función de construcción gimp-image-new de GIMP.

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*
              (
                 ; definir nuestras variables locales
                 ; crear una imagen nueva:
                 (theImageWidth  10)
                 (theImageHeight 10)
                 (theImage (car
                                (gimp-image-new
                                 theImageWidth
                                 theImageHeight
                                 RGB
                                )
                           )
                 )
                 (theText)     ;una declaración para el texto
                               ;creamos después
      

Nota: se usa el valor RGB para especificar que la imagen es una imagen RGB. Se podría usar también 0, pero RGB es más descriptivo cuando revisamos el código.

También debería notar que tomamos la cabeza del resultado de la función de llamada. Esto podría parecer extraño, porque la base de datos nos dice explícitamente que devuelve sólo un valor, el ID de la imagen recién creada. Sin embargo, todas las funciones de GIMPdevuelven una lista, aunque haya un único elemento en la lista, así que necesitamos conseguir la cabeza de la lista.

3.5.2. Añadir una capa nueva a la imagen

Ahora que tenemos una imagen, necesitamos añadirle una capa. Llamaremos a la función gimp-layer-new para crear la capa, basada en el ID de la imagen que hemos creado. (Por ahora, en lugar de listar la función completa, solo listamos las líneas que estamos añadiendo. Puede ver el script completo aquí.) Debido a que hemos declarado las variables locales que usaremos, también cerraremos los paréntesis al final de nuestras declaraciones de variables:

        ;crear una capa nueva en la imagen:
           (theLayer
                     (car
                          (gimp-layer-new
                           theImage
                           theImageWidth
                           theImageHeight
                           RGB-IMAGE
                           "layer 1"
                           100
                           LAYER-MODE-NORMAL
                          )
                      )
            )
         ) ;fin de nuestras variables locales
      

Una vez se termine la capa nueva, se necesita añadirla a la imagen:

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

Ahora, por diversión, se verán los frutos de su labor hasta este punto, y se añadirá esta línea para mostrar la imagen nueva y vacía:

(gimp-display-new theImage)

Guarde su trabajo, seleccione FiltrosScript-FuActualizar guiones, ejecute el script y debería aparecer una nueva imagen. Probablemente contenga basura (colores aleatorios), porque no se ha borrado. Se conseguirá en un segundo.

3.5.3. Añadir el texto

Avancemos, elimine la línea de representación de la imagen (o coméntela con un (;) como primer carácter de la línea).

Antes de añadir texto a la imagen, necesitamos seleccionar los colores de fondo y frente, para que así aparezca con el color especificado por el usuario. Usaremos las funciones de Gimp para establecer el contexto de primer plano y de fondo:

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

Con los colores seleccionados correctamente, ahora, limpie la basura actual en la imagen para rellenar el dibujable con el color de fondo:

        (gimp-drawable-fill theLayer BACKGROUND-FILL)
      

Con la imagen limpia, está listo para añadir algún texto:

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

Aunque hay una llamada de función larga, es bastante más sencillo si repasa los parámetros mientras mira la entrada de la función en el visor de procedimientos. Básicamente, se crea una nueva capa de texto y se asigna a la variable theText.

Ahora que tiene el texto, puede coger el ancho y alto y redimensionar la imagen y la capa de la imagen al tamaño del texto:

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

Si es como yo, se preguntará qué es un dibujable comparado con una capa. La diferencia entre los dos es que un dibujable es algo en lo que puedes dibujar, incluidas capas, pero también canales, máscaras de capa, la selección, etc; una capa es una versión más especifica de un dibujable. En la mayoría de los casos, la distinción no es importante.

Con la imagen lista, puede volver añadir su línea de representación:

        (gimp-display-new theImage)
      

Guarde su trabajo, actualice la base de datos y ¡ejecute su primer script!

3.5.4. Limpiar la marca sucia

Si intenta cerrar la imagen creada sin primero guardar el archivo, GIMP le preguntará si quiere guardar su trabajo antes de cerrar la imagen. Pregunta esto porque la imagen está marcada como sucia, o no guardada. En el caso de su script, esto es una molestia para las veces que simplemente hace una prueba y no añade ni cambia nada en la imagen resultante, esto es, su trabajo es fácilmente reproducible en un script tan simple, así que tiene sentido deshacerse de esta marca sucia.

Para hacer esto, puede limpiar la marca sucia después de mostrar la imagen:

        (gimp-image-clean-all theImage)
      

Esto establece a 0 el contador sucio, haciéndolo aparecer como una imagen limpia.

Añadir esta línea o no es cuestión del gusto personal. Úselo en scripts que produzcan nuevas imágenes, donde los resultados son triviales, como en este caso. Si su script es muy complicado, o si trabaja sobre una imagen existente, probablemente no querrá usar esta función.