Ha llegado el momento de hacer nuestro primer script-fu completo y la mejor manera de hacerlo es siguiento lo descrito aquí, que como verás pertenece al tutorial ya mencionado
Obtendremos el siguiente resultado:
; Plantilla para hacer script-fu ; Haz todos los cambios que creas necesarios antes de darla por buena ; sobre todo el directorio de ubicación, en la última línea ; ; Guardar con extención distinta a .scm en el directorio ; que nos parezca conveniente. Yo lo guardo en: ; /home/tu-carpeta-usuario/.gimp-2.6/scripts ; ; Cuando lo necesites, abrir con gedit, p.e. ; añadir y quitar lo necesario ; NO olvidar cambiar el nombre del script-fu ; ; Completado el script-fu, guardar con extensión .scm (script-fu-register "script-fu-mi-plantilla" ;OJO nombre del script-fu "Mi Plantilla" ;texto que aparecerá en el menú "Plantilla con todo lo imprescindible" "Andres" "emi.script@gmail.com" "2010-03-08" "RGB* GRAY*" ; tipos de imagen aceptadas SF-IMAGE "Input Image" 0 ; PONER PARÁMETROS SF-DRAWABLE "Input Drawable" 0 ; segundo parámetro SF-COLOR "Rectangle Color" '(10 80 256) ; tercer parámetro ) (define (script-fu-mi-plantilla inImg inDrawable color) ; guardamos el contexto de trabajo (gimp-context-push) ;iniciamos el grupo para una solo acción deshacer (gimp-image-undo-group-start inImg) ; Definimos nuestras funciones locales PUEDE SOBRAR TODA LA FUNCIÓN (define (funcionInterna1 param1 para2) (let* ( ( ) ) ) ) ;A continuación irían todas las demás funciones. ;Vamos a comenzar el cuerpo principal de nuestro script-fu y lo haremos declarando
;las variables (let* ( (variable1) ; PERSONALIZAR TODA LA DECLARACIÓN DE VARIABLES (variable2 ( car (gimp-drawable-height inDrawable))) (variable3 ( car (gimp-drawable-offsets inDrawable))) (variable2 ( cadr (gimp-drawable-offsets inDrawable))) ) ; cierra declaración de variables * ( ;A continuación pondríamos todas las sentencias necesarias CAMBIAR POR LA PROPIAS (gimp-rect-select inImg (+ x0 (* width 0.25)) (+ y0 (* height 0.25)) (* width 0.5) (* height 0.5) CHANNEL-OP-REPLACE 0 0) (gimp-context-set-foreground color) (gimp-edit-fill inDrawable FOREGROUND-FILL) ) ; Cierrra (let* ;Aqui pueden ir sentencias que no necesitan las variables locales ;recuperamos el contexto de trabajo (gimp-context-pop) ;cerramos la lista de sentencias de la acción deshacer (gimp-image-undo-group-end inImg) ;vaciamos todos los procesos internos del script (gimp-displays-flush) ) ; Fin Define (script-fu-menu-register "script-fu-mi-plantilla" ;OJO con el nombre "<imgen>/Script-Fu/MisScript")
(script-fu-register "script-fu-miPlantilla" ;nombre del script-fu "Rectangle..." ;texto que aparecerá en el menú "Pinta un circulo" ;explicacion de lo que hace "Mi nombre "
(define (script-fu-template inImg inDrawable color) (gimp-context-push) (gimp-image-undo-group-start inImg) (define (funcionInterna1 param1 para2)
(let*
(
( )
)
)
) (let*
(
(variable1) ; sin inicializar
(variable2 ( car (gimp-drawable-height inDrawable)))
(variable3 ( car (gimp-drawable-offsets inDrawable)))
(variable2 ( cadr (gimp-drawable-offsets inDrawable)))
…........... ;también pueden ir sentencias
) ; cierra declaración de variables * ( (gimp-rect-select inImg
(+ x0 (* width 0.25))
(+ y0 (* height 0.25))
(* width 0.5)
(* height 0.5)
CHANNEL-OP-REPLACE
0 0
) :terminan los parámetros de la función
(gimp-context-set-foreground color)
(gimp-edit-fill inDrawable FOREGROUND-FILL)
(set!(variable1 125))
…...........
) ; Cierrra (let* (gimp-context-pop) (gimp-image-undo-group-end inImg)(gimp-displays-flush)) ; Fin Define (script-fu-menu-register "script-fu-mi-plantilla"
"<Image>/Script-Fu/ACP")
(define (my-demo-box value adj1 adj2 image drawable toggle pattern string font color option gradient)
(print "Do nothing"))
(script-fu-register "my-demo-box"
"/Xtns/Script-Fu/My Stuff/Demo Box..."
"Do nothing"
"Joe User"
"Joe User"
"August 2000"
""
SF-ADJUSTMENT "SF-ADJUSTMENT (slider)" '( 30 1 2000 1 10 1 0)
SF-ADJUSTMENT "SF-ADJUSTMENT" '(400 1 2000 1 10 1 1)
SF-COLOR "SF-COLOR" '(255 0 255)
SF-DRAWABLE "SF-DRAWABLE" 0
SF-FONT "SF-FONT" ""
SF-GRADIENT "SF-GRADIENT" "Golden"
SF-IMAGE "SF-IMAGE" 0
SF-OPTION "SF-OPTION" '("Option 1" "Option 2" "Option 3")
SF-PATTERN "SF-PATTERN" "Wood"
SF-STRING "SF-STRING" "Test String"
SF-TOGGLE "SF-TOGGLE" TRUE
SF-VALUE "SF-VALUE" "0"
SF-FILENAME "SF-FILENAME" "/")

(script-fu-register "script-fu-test-sphere"
_"_Sphere..."
"Simple script to test and show the usage of the new Script-Fu API extensions."
"Spencer Kimball, Sven Neumann"
"Spencer Kimball"
"1996, 1998"
""
SF-ADJUSTMENT "Radius (in pixels)" '(100 1 5000 1 10 0 0)
SF-ADJUSTMENT "Lighting (degrees)" '(45 0 360 1 10 1 1)
SF-TOGGLE "Shadow" TRUE
SF-COLOR "Background color" "white"
SF-COLOR "Sphere color" "red"
SF-BRUSH "Brush" '("Circle (03)" 1.0 44 0)
SF-STRING "Text" "Tiny-Fu rocks!"
SF-TEXT "Multi-line text" "Hello,\nWorld!"
SF-PATTERN "Pattern" "Maple Leaves"
SF-GRADIENT "Gradient" "Deep Sea"
SF-TOGGLE "Gradient reverse" FALSE
SF-FONT "Font" "Agate"
SF-ADJUSTMENT "Font size (pixels)" '(50 1 1000 1 10 0 1)
SF-PALETTE "Palette" "Default"
SF-FILENAME "Environment map"
(string-append gimp-data-directory
"/scripts/images/beavis.jpg")
SF-OPTION "Orientation" '("Horizontal"
"Vertical")
SF-ENUM "Interpolation" '("InterpolationType" "linear")
SF-DIRNAME "Output directory" "/var/tmp/"
SF-IMAGE "Image" -1
SF-LAYER "Layer" -1
SF-CHANNEL "Channel" -1
SF-DRAWABLE "Drawable" -1
SF-VECTORS "Vectors" -1
)
(script-fu-menu-register "script-fu-test-sphere"
"/Xtns/Languages/Script-Fu/Test") El código completo del script-fu pude bajarse de aquí
Tipo de parámetro | Descripción | ||||||||||||||||
| SF-IMAGE | Si su script opera en una imagen nueva, esta debería ser el primer parámetro después de los parámetros requeridos. GIMP pasará una referencia a la imagen en este parámetro. | ||||||||||||||||
| SF-DRAWABLE | Si su script opera sobre una imagen abierta, este sería el segundo parámetro después del parámetro SF-IMAGE. Se refiere a la capa activa. GIMP pasará una referencia a la capa activa en este parámetro | ||||||||||||||||
| SF-ADJUSTMENT | Is only useful in interactive mode, if you call a script from the console, it acts just like a normal SF-VALUE In interactive mode it creates an adjustment widget in the dialog. Usage: SF-ADJUSTMENT "label" '(value lower upper step_inc page_inc digits type) Widget arguments list
| ||||||||||||||||
| SF-BRUSH | is only useful in interactive mode. It will create a widget in the control dialog. The widget consists of a preview area (which when pressed will produce a popup preview ) and a button with the "..." label. The button will popup a dialog where brushes can be selected and each of the characteristics of the brush can be modified. The actual value returned when the script is invoked is a list consisting of Brush name, opacity, spacing and brush mode in the same units as passed in as the default value. Usage: SF-BRUSH "Brush" '("Circle (03)" 100 44 0) Here the brush dialog will be popped up with a default brush of Circle (03) opacity 100 spacing 44 and paint mode of Normal (value 0). If this selection was unchanged the value passed to the function as a parameter would be '("Circle (03)" 100 44 0). | ||||||||||||||||
| SF-COLOR | creates a color button in the dialog. It accepts either a list of three values for the red, green and blue components or a color name in CSS notatation SF-COLOR "label" '(red green blue) or SF-COLOR "label" "color" Widget arguments list
| ||||||||||||||||
| SF-DIRNAME | Only useful in interactive mode. Very similar to SF-FILENAME, but the created widget allows to choose a directory instead of a file. Usage: SF-DIRNAME "Image Directory" "/var/tmp/images" The value returned when the script is invoked is a string containing the dirname. | ||||||||||||||||
| SF-ENUM | Only useful in interactive mode. It will create a widget in the control dialog. The widget is a combo-box showing all enum values for the given enum type. This has to be the name of a registered enum, without the "Gimp" prefix. The second parameter speficies the default value, using the enum value's nick. Usage: SF-ENUM "Interpolation" '("InterpolationType" "linear") The value returned when the script is invoked corresponds to chosen enum value. | ||||||||||||||||
| SF-FILENAME | Only useful in interactive mode. It will create a widget in the control dialog. The widget consists of a button containing the name of a file. If the button is pressed a file selection dialog will popup. Usage: SF-FILENAME "Environment Map" (string-append "" gimp-data-directory "/scripts/beavis.jpg") The value returned when the script is invoked is a string containing the filename. | ||||||||||||||||
| SF-FONT | creates a font-selection widget in the dialog. It returns a fontname as a string. There are two new gimp-text procedures to ease the use of this return parameter: (gimp-text-fontname image drawable x-pos y-pos text border antialias size unit font) (gimp-text-get-extents-fontname text size unit font)) where font is the fontname you get. The size specified in the fontname is silently ignored. It is only used in the font-selector. So you are asked to set it to a useful value (24 pixels is a good choice) when using SF-FONT. Usage: SF-FONT "label" "fontname" Widget arguments list
| ||||||||||||||||
| SF-GRADIENT | Only useful in interactive mode. It will create a widget in the control dialog. The widget consists of a button containing a preview of the selected gradient. If the button is pressed a gradient selection dialog will popup. Usage: SF-GRADIENT "Gradient" "Deep Sea" The value returned when the script is invoked is a string containing the gradient name. If the above selection was not altered the string would contain "Deep Sea" | ||||||||||||||||
| SF-OPTION | Only useful in interactive mode. It will create a widget in the control dialog. The widget is a combo-box showing the options that are passed as a list. The first option is the default choice. Usage: SF-OPTION "Orientation" '("Horizontal" "Vertical") The value returned when the script is invoked is the number of the chosen option, where the option first is counted as 0. | ||||||||||||||||
| SF-PALETTE | Only useful in interactive mode. It will create a widget in the control dialog. The widget consists of a button containing a preview of the selected palette. If the button is pressed a palette selection dialog will popup. Usage: SF-PALETTE "Palette" "Named Colors" The value returned when the script is invoked is a string containing the palette name. If the above selection was not altered the string would contain "Named Colors" | ||||||||||||||||
| SF-PATTERN | Only useful in interactive mode. It will create a widget in the control dialog. The widget consists of a preview area (which when pressed will produce a popup preview ) and a button with the "..." label. The button will popup a dialog where patterns can be selected. Usage: SF-PATTERN "Pattern" "Maple Leaves" The value returned when the script is invoked is a string containing the pattern name. If the above selection was not altered the string would contain "Maple Leaves" | ||||||||||||||||
| SF-STRING | Acepta cadenas “Un texto" | ||||||||||||||||
| SF-TOGGLE | Se muestra una caja, para obtener un valor Booleano. TRUE o FALSE | ||||||||||||||||
| SF-VALUE | Acepta números y cadenas. Notese que las cuotas deben eludir el texto predefinido, mejor usar SF-STRING. |