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 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.
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
→ → , ejecute el script y aparece una nueva imagen. Probablemente, 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ñ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!.
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..