nov 07

Para celebrar la nueva versión de GIMP me he decidido a escribir sobre una de las partes de GIMP menos conocidas, los script-fu.

Descargar GIMP

Hay muchos tutoriales de GIMP en los que se enseña a conseguir efectos interesantes aplicando una serie de pasos. Sin embargo, hay pocos tutoriales de GIMP en español que expliquen como poder crear un script parametrizado que ejecute todos los pasos del tutorial, cambiando los parámetros que a nosotros nos interese por medio de cuadros de opciones. Esto se puede hacer en GIMP gracias a los script-fu, una posibilidad que ofrece GIMP para crear secuencias de acciones en Scheme.

Scheme es un lenguaje derivado de LISP, sencillo en su sintaxis, lo cual hace relativamente fácil su aprendizaje. Su sintaxis básica es la siguiente:
(nombre-de-la-funcion parametro-1 parametro-2 .. parametro-n)

Las operaciones matemáticas se hacen en notación prefija en lugar de la clásica notación infija:
Notación infija:1 + 2
Notación prefija:+ 1 2

Por ejemplo, una expresión como
4 - 2 * (2 + 3)
quedaría como
(* (- 4 2) (+ 2 3))

Las definición de funciones se realiza de la siguiente forma:
(define (nombre-de-la-funcion parametros) cuerpo)
Por ejemplo, una función que calcula el cuadrado de un número sería:
(define (cuadrado x) (* x x))

Para definir una variable
(set! nombre-de-la-variable valor-de-la-variable)
por ejemplo
(set! altura 85)
asignaría a la variable altura el valor 85.

Las listas en scheme se componen de una cabeza y una cola, esto quiere decir que la lista
(3 6 4 6 7)
sería algo así como
(3 (6 (4 (6 (7 ())))))
Para acceder a estas partes de una lista, se pueden utilizar las funciones car y cdr.
(car `(3 6 4 6 7))
sería
3
mientras que
(cdr `(3 6 4 6 7))
sería
(6 4 6 7)

También se pueden combinar hasta cuatro veces de forma que, por ejemplo
(cadddr `(3 6 4 5 7))

sería 5.

Nótese que las listas que se han pasado como parámetros a estas dos funciones tienen un caracter ` que quiere decir que lo que viene a continuación no debe ser interpretado. Si no tuviera el símbolo `, el intérprete supondría que se trata de la función 3 en el primer caso y 6 en el segundo que no existen, por lo tanto se produciría un error.

Con estos conceptos básicos, podemos pasar a un ejemplo de script sencillo para GIMP:

———————————————————————————–
(define (prueba tamanio color)

(set! img (car (gimp-image-new tamanio tamanio RGB)))

(set! capa (car (gimp-layer-new img tamanio tamanio RGB "Capa 1" 100 NORMAL)))

(gimp-image-undo-disable img)

(gimp-image-add-layer img capa 0)

(gimp-palette-set-background color)
(gimp-edit-fill capa BG-IMAGE-FILL)

(gimp-display-new img)

(gimp-image-undo-enable img))


(script-fu-register "prueba"
"Imagen uniforme"
"Crea una imagen uniforme"
"Javier Callón <javier@callon.org>"
""
"2007-11-02"
""
SF-VALUE "tamanio" "100"

SF-COLOR "color" '(0 127 255))

(script-fu-menu-register "prueba" "<Toolbox>/Xtns/Script-Fu/Tutorials")

———————————————————————————–

Para probarlo, debemos hacer lo siguiente:

  • Guardar el script en un archivo dentro del directorio scripts en nuestro directorio home, por ejemplo /home/usuario/.gimp-2.4/scripts/prueba.scm
  • Abrir GIMP e ir al menú Exts->Script-Fu->Tutoriales->Imagen uniforme

    Ejemplo del tutorial de script-fu

  • Nos aparecerá el diálogo con las opciones para parametrizar la ejecución del script:

    Diálogo de ejemplo del tutorial de script-fu

  • El resultado será una imagen cuadrada de 100 pixels de lado y de color azul. No es muy espectacular pero como introducción muestra los pasos básicos para construir un script-fu.

Se pueden distinguir tres partes principales:

  • La declaración de la función.
  • El registro en el script-fu.
  • El registro en el menú.

A continuación analizaremos cada una de las partes:

La declaración de la función

Esta es la parte principal de nuestro script. Comienza con la línea:

(define (prueba tamanio color)

Lo que se hace en esta línea es definir el nombre y parámetros de la función que vamos a realizar. En este caso, el nombre de la función será prueba y los parámetros serán tamanio y color.

A continuación, se crea una nueva imagen donde realizaremos los pasos posteriores. Para la creación de una nueva imagen, usaremos la función gimp-image-new. Esta función tiene tres parámetros: el tamaño horizontal, el tamaño vertical y el modo que puede ser RGB, GRAY o INDEXED. La imagen generada se guarda en la variable img.

(set! img (car (gimp-image-new tamanio tamanio RGB)))

Lo siguiente es crear una capa ya que una vez creada la imagen, no tendrá ninguna. La función usada para ello es gimp-layer-new y com parámetros tiene la imagen en la que se crea la capa, el tamaño horizontal, el tamaño vertical, el modo de la capa, el nombre de la capa, el porcentaje de opacidad y el modo.

(set! capa (car (gimp-layer-new img tamanio tamanio RGB "Capa 1" 100 NORMAL)))

En la siguiente línea, se deshabilita la pila de “deshacer”. De esta forma se ahorra una cantidad considerable de memoria y además no tendría mucho sentido el “deshacer” ya que queremos realizar todos los pasos como una acción atómica.

(gimp-image-undo-disable img)

Se asocia la capa a la imagen, con gimp-image-add-layer. Como parámetros se le pasan el identificador de la imagen, el identificador de la capa y la posicíon (profundidad) de la capa.

(gimp-image-add-layer img capa 0)

A continuación, se ajusta el color de background, que es el color secundario de GIMP poniendo el que se le haya pasado como parámetro a la función.

(gimp-palette-set-background color)

Con la siguiente función, gimp-edit-fill, se realizará un relleno de la capa con el color de fondo. El primer parámetro es el identifcador de la capa y el segundo parámetro define con qué se rellenará, en este caso será el color de fondo.

(gimp-edit-fill capa BG-IMAGE-FILL)

La función gimp-display-new muestra la imagen img que hasta ahora estaba solo en memoria.

(gimp-display-new img)

Y se vuelve a habilitar la pila de deshacer.

(gimp-image-undo-enable img))

El registro en el script-fu

En esta parte, se definirá la interfaz de usuario de nuestro script en la que se pedirán los parámetros que queramos usar en nuestra función. También se declaran otros datos como el nombre del autor y la descripción.

Los parámetros son:

  • El nombre de la función principal que ejecutará el script.
  • El nombre del script.
  • La descripción.
  • El autor.
  • Información de copyright.
  • Fecha de creación.
  • Modos de imágenes con los que funciona el script que pueden ser RGB, RGBA, GRAY, GRAYA, INDEXED, INDEXEDA o se puede dejar en blanco si es válido para todos los modos o si creamos una imagen desde cero como en nuestro ejemplo.
  • Parámetros del script con su etiqueta y correspondiente valor por defecto. Los tipos de valores que admite GIMP son los siguientes:
    • SF-VALUE: Acepta números y cadenas
    • SF-COLOR: Indica que un color. El formato para el valor por defecto es (R,G,B) donde R, G y B son los valores para el rojo, verde y azul respectivamente.
    • SF-TOGGLE: Un checkbox. Sus valores pueden ser TRUE o FALSE.
    • SF-IMAGE: Si el script usa una imagen, la obtiene con este parámetro. Por defecto se le pasa el valor 0.
    • SF-DRAWABLE: Si el script una capa, la obtiene con este parámetro. Por defecto se le pasa el valor 0.

El registro en el menú

Por último, sólo queda registrar el script en el menú. Esto se hace mediante la función script-fu-menu-register a la que se le pasan como parámetro, el nombre del script y su situación en el menú de script-fu.

Por último, comentaré que para ver las funciones disponibles se puede hacer en Ext->Examinador de procedimientos

Examinador de procedimientos

Con esto y un poco de paciencia debería ser suficiente para poder hacer al menos algunos scripts sencillos.

Valorar esta entrada:

1 Estrella2 Estrellas3 Estrellas4 Estrellas5 Estrellas (Todavía no hay valoraciones)
Loading ... Loading ...

Entradas relacionadas:

6 respuesta a “Introducción a Scheme para scripts de GIMP”

  1. Andrea Moreno en Introducción a Scheme para scripts de GIMP
    Andrea Moreno dice:

    Megustaria que explicaran con varios ejemplos la sintaxis de scheme puesto que scheme es un programa como un poco dificil

  2. Javier Callón en Introducción a Scheme para scripts de GIMP

    Hola Andrea.
    La sintaxis es sencilla, prácticamente todo se basa en
    (funcion parametro1 parametro2 parametro3 …)
    Además hay otras construcciones para hacer sentencias condicionales,
    sentencias de bucle, etc. pero eso necesitaría al menos un post entero para explicarlo. Si realmente estás interesada lo tendré en cuenta para los nuevos posts.
    Mientras, puedes buscar también estructuras de LISP que son en su mayoría idénticas a Scheme.

  3. Migue alvarado en Introducción a Scheme para scripts de GIMP
    Migue alvarado dice:

    necesito hacer una funcion donde de un monto por ejemplo10350 y me diga billetes y monedas debo utilizar de esta lista

    monedas 1 25 50 100 500
    billetes 1000 2000 5000 10000

  4. Alejandro Atienza en Introducción a Scheme para scripts de GIMP
    Alejandro Atienza dice:

    Migue, en la página 40 del SICP tienes el ejercicio exacto.

  5. eRnEstO en Introducción a Scheme para scripts de GIMP
    eRnEstO dice:

    bueno estoy aca porque yo quiero que mi nombre que lo demas vn quiero que se vea de muchos colores pero no hayo cm… pueden escribirme a mi msn boyneike@hotmail.com

  6. guillermo en Introducción a Scheme para scripts de GIMP
    guillermo dice:

    como inserto una imagen y texto dentro de un list-box% en PLT DrScheme???
    AYUDA!!!!

Dejar una respuesta