This is an old revision of the document!
Table of Contents
Fuente: https://www.seul.org/~grumbel/gimp/script-fu/script-fu-tut.html
Para crear scripts (macros) desde Gimp se hace con Script Fu
Para lanzar comandos a mano:
Filters > Script-Fu > Console
Se abre una ventana como esta:
Para crear una nueva imagen:
(gimp-image-new 256 256 RGB)
Devuelve esto:
> (gimp-image-new 256 256 RGB) (14)
Lo que devuelve es el ID de la nueva imagen, en este caso 14. No muestra la imagen, para mostrarla:
(gimp-display-new 14)
Y ya nos aparece.
Ampliar selección
Tenemos una imagen con una selección hecha. Listamos el id de la imagen:
> (gimp-image-list) (1 #(12))
Ahora ampliamos la selcción 20 pixels. Si devuelve #t es TRUE:
gimp-selection-grow image steps
> (gimp-selection-grow 12 20) (#t)
Creamos un borde de 8 pixels:
> (gimp-selection-border 12 8) (#t)
Vemos en que layer estamos:
> (gimp-image-get-active-layer 12) (2588)
Si hacemos doble click en la layer también nos sale:
Si tuvieramos mas de una layer, las podemos listar así:
> (gimp-image-get-layers 12) (3 #(2593 2592 2588))
Para rellenar en nuestra layer, que es la 2588:
> (gimp-drawable-edit-fill 2588 1) (#t)
Variables
Se tienen que definir en el mismo comando:
(let ((x 2)) x )
2
Para mas de una variable con let*
(let ((x 2) (y 6) ) (+ x y) )
8
Para coger el resultado de un comando en una variable, se tiene que usar el comando car sinó, da error. Por ejemplo la función gimp-image-get-active-layer que devuelve (2588)
(let* ((MyIMAGE 12) (MyLAYER (gimp-image-get-active-layer MyIMAGE)) ) MyLAYER )
(2588)
Para poder operar con la variable MyLAYER tiene que ser sin paréntesis con la función car
(let* ((MyIMAGE 12) (MyLAYER (car (gimp-image-get-active-layer MyIMAGE))) ) MyLAYER )
2588
Ejemplos
Ejemplo 1
Desde una selección, amplía, hace borde y rellena con BG
(let* ((MyIMAGE 12) (MyLAYER (car (gimp-image-get-active-layer MyIMAGE))) ) (gimp-selection-grow MyIMAGE 8) (gimp-selection-border MyIMAGE 8) (gimp-drawable-edit-fill MyLAYER 1) )
Está seleccionado lo azul.
Ejemplo 2 (RISK)
Creamos el borde en una nueva capa
(let* ((MyIMAGE 12) (MyLAYER (car (gimp-image-get-active-layer MyIMAGE))) ) (gimp-selection-grow MyIMAGE 8) (gimp-selection-border MyIMAGE 8) (gimp-drawable-edit-fill MyLAYER 1) (gimp-edit-copy MyLAYER) (let ((MyFLOATING (car (gimp-edit-paste MyLAYER FALSE)))) (gimp-floating-sel-to-layer MyFLOATING) ) )