3.5. Dar algo de sustancia a nuestro script
| 3. Un tutorial de Script-Fu |

### 3.5. Dar algo de sustancia a nuestro script

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

#### 3.5.1. Crear una nueva imagen

En la lección anterior, creamos una función vacia y la registramos en el 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 adecuarla al texto exactamente.

Una vez que sabe como configurar variables, definir funciones y acceder a los miembros de la lista, el resto es cuesta abajo, todo lo que necesita hacer es familiarizarse con las funciones disponibles en la base de datos de procedimientos del GIMP y llamar, directamente, a las funciones. Así que encienda su 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 del GIMP `gimp-image-new`.

Como puede 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 tamaño adecuado para el texto, haremos una imagen 10x10 RGB. Almacenaremos el ancho y tamaño de la imagen en algunas variables, tambien, las remitiremos 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ía notar que tomamos la cabeza de el resultado de la función llamada. Esto podría parecer extraño, porque 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.

#### 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, basado 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 están añadiendo.). 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)

Ahora, 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)

Guarde el trabajo, seleccionando Exts → Script-Fu → Refrescar scripts, ejecute el script y aparece una nueva imagen. Probablemente, contiene basura (colores aleatorios), porque no la hemos borrado. Conseguiremos eso en un segundo.

#### 3.5.3. Añadir 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ñadamos 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 `gimp-context-set-background` y `gimp-context-set-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 es como yo, le 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)

Guarde su trabajo, refresque la base de datos y ejecute su primer script!.

#### 3.5.4. Limpiar

Si intenta cerrar la imagen creada sin primero guardar el archivo, el 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 nuestro script, esto es una molestia, las veces que simplemente hace una prueba y no le añade o cambia algo en la imagen resultante, eso es que nuestro trabajo es facilmente reproducible como un simple script, asi que dele sentido liberandose de esa marca sucia.

Para hacer esto, puede 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. Uselo 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..

3.4. Su primer código de Script-Fu |  | 3.6. Extender el script: Text Box