Continuemos con nuestro entrenamiento y añadamos alguna funcionalidad a nuestro script
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.
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
-> -> , corre el script y una nueva imagen se aparece. Provablemente, contiene basura (colores aleatorios), porque no la hemos borrado. Conseguiremos eso en un segundo.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!.
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..