14.5. Dando A Nuestro Script Alguna Sustancia

Continuemos con nuestro entrenamiento y añadamos alguna funcionalidad a nuestro script

Creando Una Nueva Imagen

En la lección anterior, creamos una función vacia y la registramos con Gimp. En esta lección, queremos proporcionar funcionalidad a nuestro script -- queremos crear una nueva imagen, añadirle texto del usuario y redimensionar la imagen para adecuar el texto exactamente.

Una vez que sabes como configurar variables, definir funciones y acceder a los miembros de la lista, el resto es cuesta abajo -- todo lo que necesitas hacer es familiarizarte con las funciones disponibles en la base de datos de procedimientos de Gimp y llamar, directamente, a las funciones. Así que enciende tu Examinador de procedimientos y vamos a cocinar!.

Comencemos haciendo una imagen nueva. Crearemos una nueva variable, theImage, es el resultado de llamar a la función de construcción de Gimp  gimp-image-new.

Como puedes ver en el Examinador de Procedimientos, la función gimp-image-new  toma tres parámetros --  ancho, alto y tipo de la imagen. Porque, más tarde, redimensionaremos la imagen al adecuado para el texto, haremos una imagen 10x10 RGB. Almacenaremos el ancho y tamaño de la imagen en algunas variables, tambien, nos referiremos y manipularemos, más tarde, en el 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: Usamos el valor RGB para especificar que la imagen es una imagen RGB. Se podría usar, tambien, 0, pero RGB es más descriptivo cuando ojeemos el código.

Tambien, deberías notar que tomamos la cabeza de el resultado de la función llamada. Esto podría parecer extraño, poque la base de datos, explicitamente, nos dice que devuelve solo un valor -- el ID de la imagen recien creada. Todas las funciones devuelven una lista, siempre que haya un solo elemento en la lista, así que necesitamos conseguir la cabeza de la lista.

Añadiendo 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, basando en el ID de la imagen que justo creamos. (Por ahora, en lugar de listar la función completa, solo listamos las lineas que se le estan añadiendo. Puedes ver el script completo aquí). Porque hemos declarado las variables locales que usaremos, cerraremos los paréntesis al final de nuestras declaraciones de 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 vez tenemos la capa nueva necesitaremos añadirla a la imagen:

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

Ahor, por diversión, veremos los frutos de nuestra labor hasta este punto, y añadiremos esta linea para mostrar la imagen nueva y vacia:

        (gimp-display-new theImage)
      

Guarda tu trabajo, selecciona Xtns->Script-Fu->Refrescar Scripts, corre el script y una nueva imagen se aparece. Provablemente, contiene basura (colores aleatorios),  porque no la hemos borrado. Conseguiremos eso en un segundo.

Añadiendo El Texto

Avancemos y quitamos la linea de representación de la imagen (o la comentamos con un ; como primer caracter de la linea).

Antes de que añidamos texto a la imagen, necesitamos seleccionar los colores de fondo y frente para que así aparezca en el color especificado por el usuario. Usaremos las funciones  gimp-context-set-back/foreground:

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

Con los colores seleccionados correctamente, ahora, limpiaremos 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, estamos listos para añadir algún texto:

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

Aunque hay una llamada de función, es bastante más sencillo si repasas los parámetros mientras miras las entradas de función en el Examinador de procedimientos. Basicamente, estamos creando una nueva capa de texto y la asignamos a la variable theText.

Ahora que tenemos el texto, podemos 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 eres como yo, te maravillará lo que es un dibujable comparado con una capa. La diferencia entre los dos es que un dibujable es algo en lo que puedes dibujar, incluido capas, pero también canales, máscaras de capa, selecciones, etc.; una capa es una versión más especifica de un dibujable. En muchos casos, la distinción no es importante.

Con la imagen lista, podemos reañadir nuestra linea de representación:

        (gimp-display-new theImage)
      

Guarda tu trabajo, refresca la base de datos y ejecuta tu primer script!.

Limpiando La Marca Sucia

Si intentas cerrar la imagen creada sin primero guardar el archivo, Gimp te preguntará si quieres guardar tu trabajo antes de cerrar la imagen. Pregunta esto porque la imagen es marcada como sucia, o no salvada. En el caso de nuestro script, esto es una molestia las veces que simplemente haces una prueba y no la añades o cambias algo en la imagen resultante -- eso es, nuestro trabajo es facilmente reproducible como un simple script, asi que dale sentido liberandote de esa marca sucia.

Para hacer esto, puedes limpiar la marca sucia y despues mostrar la imagen:

        (gimp-image-clean-all theImage)
      

Esto da 0 al contador sucio, haciendolo aparecer como una imagen limpia.

Añadir esta linea o no es cuestión del gusto personal. Usalo en scripts que produzcan nuevas imágenes, donde los resultados son triviales, como en este caso. Si tu script es muy complicado, o si trabaja sobre u a imagen existente, provablemente no querrás usar esta función..