Cuando crea un script, quiere dar a sus usuarios la habilidad para deshacer sus acciones, podrían cometer un error. Esto es fácil de efectuar llamando a las funciones gimp-undo-push-group-start
y gimp-undo-push-group-end
sobre el código que manipula la imagen. Puede imaginarlas como declaraciones marcadas que dejan que GIMP sepa cuándo empezar y parar la grabación de manipulaciones sobre la imagen, para que esas manipulaciones se pueden deshacer más tarde.
Si crea una imagen totalmente nueva, no tiene sentido usar estas funciones porque no está cambiando una imagen existente. Sin embargo, cuando cambia una imagen existente, seguramente sí querrá usar estas funciones.
Deshacer un script funciona casi perfectamente cuando usa estas funciones.
Ahora que ha creado un excelente y manejable script para crear cajas de texto, añádale dos capacidades:
Actualmente, la imagen se redimensiona para ajustarse exactamente alrededor del texto, no hay sitio para nada, como sombras o efectos especiales (aunque muchos scripts redimensionan la imagen cuando es necesario). Añádale un búfer al texto e incluso deje que el usuario especifique la cantidad del búfer a añadir como un porcentaje del tamaño del texto resultante.
Este script se podría usar fácilmente en otros scripts para trabajar con texto. Extendiéndalo para que devuelva la imagen y las capas, así otros scripts podrán llamar a este script y usar la imagen y las capas que se creen.
Para dejar al usuario especificar la cantidad del bufer, añada un parámetro a su función y a la función de registro:
(define (script-fu-text-box inTest inFont inFontSize inTextColor inBufferAmount)
(let*
(
; defina sus variables locales
; cree una imagen nueva:
(theImageWidth 10)
(theImageHeight 10)
(theImage (car
(gimp-image-new
theImageWidth
theImageHeight
RGB
)
)
)
(theText) ;una declaración para el texto
;se crea más tarde
(theBuffer) ;añadido
(theLayer
(car
(gimp-layer-new
theImage
theImageWidth
theImageHeight
RGB-IMAGE
"layer 1"
100
LAYER-MODE-NORMAL
)
)
)
) ;fin de sus variables locales
[Código aquí]
)
(script-fu-register "script-fu-text-box" ;function name "Text Box" ;menu label "Creates a simple text box, sized to fit\ around the user's choice of text,\ font, font size, and color." ;description "Michael Terry" ;author "copyright 1997, Michael Terry;\ 2009, the GIMP Documentation Team" ;copyright notice "October 27, 1997" ;date created "" ;image type that the script works on SF-STRING "Text" "Text Box" ;a string variable SF-FONT "Font" "Charter" ;a font variable SF-ADJUSTMENT "Font size" '(50 1 1000 1 10 0 1) ;a spin-button SF-COLOR "Color" '(0 0 0) ;color variable SF-ADJUSTMENT "Buffer amount" '(35 0 100 1 10 1 0) ;a slider ) (script-fu-menu-register "script-fu-text-box" "<Image>/Font/Create/Text")
Añada el código en dos sitios: justo antes de redimensionar la imagen y al final del script (para devolver la nueva imagen, la capa y el texto).
Después de obtener la anchura y la anchura del texto, necesita redimensionar estos valores basados en la cantidad del bufer especificado por el usuario. No se hace ninguna comprobación de que está en el rango de 0-100% porque no es vital y porque no hay ninguna razón por la que el usuario no pueda dar un valor como “200” como porcentaje de búfer a añadir.
(set! theBuffer (* theImageHeight (/ inBufferAmount 100) ) ) (set! theImageHeight (+ theImageHeight theBuffer theBuffer) ) (set! theImageWidth (+ theImageWidth theBuffer theBuffer) )
Todo lo que se hace aquí es configurar el búfer basado en la altura del texto, y añadirlo dos veces tanto al alto como al ancho de nuestra nueva imagen. (Se añade dos veces porque el búfer necesita añadirse a ambos lados del texto.)
Ahora que se ha redimensionado la imagen para permitir un búfer, necesita centrar el texto en la imagen. Esto se hace moviéndolo a las coordenadas (x, y) de (theBuffer
, theBuffer
). Se añadió esta línea después de redimensionar la capa y la imagen:
(gimp-layer-set-offsets theText theBuffer theBuffer)
Go ahead and save your script, and try it out after restarting GIMP.
Todo lo que queda por hacer es devolver nuestra imagen, la capa y la capa del texto. Después de mostrar la imagen, se añade esta línea:
(list theImage theLayer theText)
Esta es la última línea de la función, hace que esta lista esté disponible a otros scripts que quieran usarla.
Para usar nuestro nuevo script «text box» en otro script, se podría escribir algo como lo siguiente:
(set! theResult (script-fu-text-box "Some text" "Charter" "30" '(0 0 0) "35" ) ) (gimp-image-flatten (car theResult))
¡Felicitaciones, está en camino para conseguir su cinturón negro de Script-Fu!