3.4. Su primer código de Script-Fu

¿No necesita parar y tomar algo? ¿No? Bien, entonces procederemos con la cuarta lección, su primer código de Script-Fu.

3.4.1. Crear un script: una caja de texto

Una de las operaciones más comunes que realiza el autor en GIMP es crear una caja con algún texto en ella para una página web, un logotipo o algo así. Nunca se sabe el tamaño adecuado de una imagen cuando se empieza. No sabe cuánto espacio llenará el texto con la tipografía ni el tamaño de tipografía que quiere.

This problem can be solved and automated with Script-Fu.

Crearemos un script, llamado «Text Box», que creará una imagen, con el tamaño correctamente ajustado a una línea de texto, que el usuario introduce. También, dejaremos al usuario elegir la fuente, el tamaño de la fuente y el color del texto.

3.4.2. Editar y guardar su código

Up until now, we've been working in the Script-Fu Console. Now, however, we're going to switch to editing script files. Script files should be plain text files that you can edit in a text or code editor. The name you give is not that important, except for being able to recognize the script. You should give your script file the extension .scm.

Where you place your scripts is a matter of preference. In GIMP's folder preferences you can see in which folders GIMP looks for scripts. It is also possible to add a new folder there. The folder where GIMP stores its own scripts is usually not the best choice for your scripts, but for the rest feel free to choose what suits you best.

3.4.3. Lo esencial al descubierto

Cada guión Script-Fu define al menos una función, que es la función principal del script. Es donde hace el trabajo.

Cada script debe registrarse también en la base de datos de procedimientos, para poder acceder a el bajo GIMP.

Se define la función principal, primero:

        (define (script-fu-text-box inText inFont inFontSize inTextColor))
      

Aquí se ha definido una nueva función llamada script-fu-text-box que toma cuatro parámetros que más tarde corresponderán al texto, a una tipografía, al tamaño de la tipografía y al color del texto. La función generalmente está vacía y no hace nada. Hasta ahora, todo va bien; nada nuevo, nada lujoso.

3.4.4. Convenciones de nombres

Las convenciones de nombres en Scheme parecen preferir minúsculas con guiones y se han seguido en el nombre de la función. Sin embargo, se parte de la convención con los parámetros. Se quieren nombres más descriptivos para los parámetros y variables, y se añade el prefijo «in» a los parámetros, así se puede ver rápidamente qué valores entran en el script, en lugar de que los que se crean en él. Se usa el prefijo «the» para las variables definidas en el script.

Es la convención de GIMP para nombrar sus funciones de script script-fu-abc, porque así están listadas en la base de datos de procedimientos, todas ellas se mostrarán bajo Script-Fu cuando se estén listando las funciones. Esto también ayuda a distinguirlas de los complementos.

3.4.5. Registrar la función

Ahora se registra la función con GIMP. Esto se hace llamando a la función script-fu-register. Cuando GIMP lee en un script, ejecutará esta función, que registrará el script en la base de datos de procedimientos. Puede situar esta llamada a la función donde quiera en su script, pero normalmente se sitúa al final, después de las otras líneas de código.

Aquí está el listado de registro de esta función (se explicarán todos estos parámetros enseguida):

  (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
  )
  (script-fu-menu-register "script-fu-text-box" "<Image>/File/Create/Text")
      

If you save these functions in a text file with a .scm suffix in your script directory, then restart GIMP. The new script will appear as FileCreateTextText Box.

Si llama a este nuevo script, no hará nada, desde luego, pero puede ver los apuntes creados cuando se registra el script (más información de lo que hicimos, se descubrirá luego).

Finalmente, si abre el visor de procedimientos AyudaVisor de procedimientos), verá que nuestro script aparece en la base de datos.

3.4.6. Pasos para registrar el script

Para registrar el script en GIMP, se llamará a la función script-fu-register, se rellenarán los siete parámetros requeridos y se añadirán los parámetros propios, junto con una descripción y los valores predefinidos para cada parámetro.

Los parámetros requeridos

  • El nombre de la función que se define. Esto es la llamada de la función cuando nuestro script se invoca (el punto de entrada del script). Es necesario porque se pueden definir funciones adicionales bajo el mismo archivo, y GIMP necesita saber a cuáles de estas funciones se llama. En este ejemplo, solo se define una función, «text box», que se ha registrado.

  • The menu label is the name that will be shown in the menu. To specify the location, see Sección 3.4.9, “Registering the Menu Location”.

  • Una descripción de su script, para ser mostrada en el visor de procedimientos.

  • Su nombre (el autor del script).

  • Información de los derechos de autor.

  • La fecha en que se hizo el script, o la última revisión del mismo.

  • El tipo de imágenes con las trabaja el script. Puede ser uno de los siguientes: RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA. O podría no ser ninguno de ellos, en este caso, se está creando una imagen, y no se necesita definir el tipo de imagen sobre la que se trabaja.

3.4.7. Registrar los parámetros del script

Una vez que se han listado los parámetros requeridos, se necesitan listar los parámetros que corresponden a los parámetros que su script necesita. Al listar estos parámetros, se dan indicaciones del tipo que son. Esto es por el diálogo que aparece cuando el usuario selecciona el script. También se pueden proporcionar valores predefinidos.

Esta sección del proceso de registro tiene el siguiente formato:

Tipo de parámetro

Descripción

Ejemplo

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.

3

SF-DRAWABLE

Si su script opera sobre una imagen abierta, este sería el segundo parámetro después de el parámetro SF-IMAGE. Se refiere a la capa activa. GIMP pasará una referencia a la capa activa en este parámetro.

17

SF-VALUE

Acepta números y cadenas. Tenga en cuenta que las cuotas deben eludir el texto predefinido, por lo que es mejor usar SF-STRING.

42

SF-STRING

Acepta cadenas.

«Un texto»

SF-COLOR

Indica que color se requiere en este parámetro.

'(0 102 255)

SF-TOGGLE

Se muestra una caja, para obtener un valor Booleano.

TRUE o FALSE

3.4.8. Los parámetros API de Script-Fu[5]

[Nota] Nota

Junto a los tipos de parámetros anteriores hay más tipos para el modo interactivo, cada uno de ellos crea un widget en el control del diálogo. Encontrará una lista de estos parámetros con descripciones y ejemplos en el script de prueba plug-ins/script-fu/scripts/test-sphere.scm suministrado con el código fuente de GIMP.

Tipo de parámetro

Descripción

SF-ADJUSTMENT

Crea un widget de ajuste en el diálogo.

SF-ADJUSTMENT "etiqueta" '(valuer inferior superior incremento_del_paso incremento_tecla_página dígitos tipo)

Lista de argumentos del widget
ElementoDescripción
"etiqueta"Texto impreso antes del widget.
valorValor impreso al principio.
inferior / superiorLos valores inferior / superior (rango de elección)
incremento_del_pasoIncrementar/reducir el valor.
incremento_tecla_páginaIncrementar/reducir el valor usando la tecla página.
dígitosDígitos después del punto (parte decimal).
«type»Uno de: SF-SLIDER o 0, SF-SPINNER o 1

SF-COLOR

Crea un botón de color en el diálogo.

SF-COLOR "etiqueta" '(red green blue)

o

SF-COLOR "etiqueta" "color"

Lista de argumentos del widget
ElementoDescripción
"etiqueta"Texto impreso antes del widget.
'(red green blue)Lista de los tres valores para los componentes rojo, verde y azul.
"color"Nombre del color en notación CSS.

SF-FONT

Crea un widget para la selección de la tipografía en el diálogo. Devuelve un nombre de tipografía en una cadena. Hay dos procedimientos nuevos de «gimp-text» para facilitar el uso de este parámetro de retorno:

(gimp-text-fontname image drawable x-pos y-pos text border antialias size unit font)

(gimp-text-get-extents-fontname text size unit font)

en donde «font» es el nombre de la tipografía que obtiene. El tamaño especificado en nombre de la tipografía se ignora silenciosamente. Sólo se usa en el selector de la tipografía. Se le pregunta para que lo ajuste a un valor útil (24 píxeles es una buena elección).

SF-FONT "etiqueta" "nombre de la tipografía"

Lista de argumentos del widget
ElementoDescripción
"etiqueta"Texto impreso antes del widget.
"nombre de la tipografía"Nombre de la tipografía predeterminada.

SF-BRUSH

Creará un widget en el diálogo de control. El widget consiste en un área de vista previa (que cuando se presiona produce una vista previa emergente) y un botón con la etiqueta «...». El botón abre un diálogo donde se pueden seleccionar los pinceles y modificar cada una de las características del pincel.

SF-BRUSH "Brush" '("Círculo (03)" 100 44 0)

Aquí el diálogo de pincel se abrirá con el pincel predeterminado «Círculo (03)», opacidad 100, espaciado 44 y el modo de pintura en normal (valor 0).

Si se cambió esta selección el valor pasado a la función como parámetro será '("Círculo (03)" 100 44 0).

SF-PATTERN

Creará un widget en el diálogo de control. El widget consiste en un área de vista previa (que cuando se presiona produce una vista previa emergente) y un botón con la etiqueta «...». El botón abre un diálogo donde se pueden seleccionar los patrones.

SF-PATTERN "Pattern" "Hojas de arce"

El valor devuelto cuando se llama al script es una cadena que contiene el nombre del patrón. Si la selección anterior no se ha cambiado la cadena contendrá «Hojas de arce».

SF-GRADIENT

Creará un widget en el diálogo de control. El widget consiste en un botón que contiene una vista previa del degradado seleccionado.

Si se presiona el botón se abre un diálogo de selección de degradado.

SF-GRADIENT "Gradient" "Azul profundo"

El valor devuelto cuando se llama al script es una cadena que contiene el nombre del patrón. Si la selección anterior no se ha cambiado la cadena contendrá «Azul profundo».

SF-PALETTE

Creará un widget en el diálogo de control. El widget consiste en un botón que contiene el nombre de la paleta seleccionada.

Si se presiona el botón se abre un diálogo de selección de paleta.

SF-PALETTE "Palette" "Colores con nombre"

El valor devuelto cuando se llama al script es una cadena que contiene el nombre del patrón. Si la selección anterior no se ha cambiado la cadena contendrá «Colores con nombre».

SF-FILENAME

Creará un widget en el diálogo de control. El widget consiste en un botón que contiene el nombre de un archivo.

Si se presiona el botón se abre un diálogo de selección de archivo.

SF-FILENAME "etiqueta" (string-append "" gimp-data-directory "/scripts/beavis.jpg")

El valor devuelto cuando se llama al script es una cadena que contiene el nombre del archivo.

SF-DIRNAME

Sólo es útil en modo interactivo. Muy parecido a SF-FILENAME, pero el widget creado permite elegir una carpeta en lugar de un archivo.

SF-DIRNAME "etiqueta" "/var/tmp/images"

El valor devuelto cuando se llama al script es una cadena que contiene el nombre de la carpeta.

SF-OPTION

Creará un widget en el diálogo de control. El widget es una caja combinada que muestra las opciones pasadas como una lista.

La primera opción es la predeterminada.

SF-OPTION "etiqueta" '("opción1" "opción2")

El valor devuelto cuando se llama al script es el número de la opción elegida, en donde la primera opción se cuenta como 0.

SF-ENUM

Creará un widget en el diálogo de control. El widget es una caja combinada que muestra todos los valores enumerados para el tipo de enumeración dado . Tiene que ser el nombre de un enumerado registrado, sin el prefijo «Gimp». El segundo parámetro especifica el valor predeterminado, usando el nombre corto del valor de enumeración.

SF-ENUM "Interpolación" '("InterpolationType" "lineal")

El valor devuelto cuando se llama al script corresponde al valor enumerado elegido.

3.4.9. Registering the Menu Location

Once we have registered our script, we need to tell GIMP where it should be found in the menu.

The best menu location of your script depends on its function. Most scripts are found in the Filters and Colors menus.

For the current script, which creates a new image, we choose a submenu of FileCreate. This is what the line with the script-fu-menu-register function does. Thus, we registered our Text Box script here: FileCreateTextText Box.

If you notice, the Text submenu in the FileCreate menu wasn't there when we began — GIMP automatically creates any menus not already existing.

Figura 13.2. El menú del script.

El menú del script.



[5] Esta sección no es parte del tutorial original.