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:
{{:informatica:linux:gimp:kungfu.png|}}
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.
Para ver una lista de las imágenes que tenemos abiertas:
(gimp-image-list)
(3 #(21 20 17))
Nos indica que hay 3 y nos las pone por orden de la mas nueva a la mas vieja. Si queremos coger el ID de la mas nueva, sería la posición 0:
(let (
(MyIMAGE (aref (cadr (gimp-image-list)) 0))
)
MyIMAGE
)
21
====== 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:
{{:informatica:linux:gimp:kungfu2.png|}}
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.
{{:informatica:linux:gimp:kungfu3.png|}}
===== Ejemplo 2 (RISK) =====
Creamos el borde en una nueva capa. Lo hace sobre la última imagen. Mejor solo tener una abierta.
(let* ((MyIMAGE (aref (cadr (gimp-image-list)) 0))
(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)
)
)
Guardando selecciones:
(let* (
(MyIMAGE (aref (cadr (gimp-image-list)) 0))
(MyLAYER (car (gimp-image-get-active-layer MyIMAGE)))
(MySELECTION1 (car (gimp-selection-save MyIMAGE)))
)
(gimp-selection-grow MyIMAGE 8)
(gimp-selection-border MyIMAGE 8)
(gimp-edit-copy MyLAYER)
(let* (
(MySELECTION2 (car (gimp-selection-save MyIMAGE)))
(MyFLOATING (car (gimp-edit-paste MyLAYER FALSE)))
)
(gimp-floating-sel-to-layer MyFLOATING)
(let (
(MyLAYER2 (car (gimp-image-get-active-layer MyIMAGE)))
)
(gimp-image-select-item MyIMAGE 2 MySELECTION1)
(gimp-drawable-edit-fill MyLAYER2 0)
(gimp-image-select-item MyIMAGE 2 MySELECTION2)
(gimp-drawable-edit-fill MyLAYER2 1)
)
)
)
====== Ejecutar Script ======
Copiamos este script en el directorio de scripts con la extensión scm. Para saber cual es el directorio de scripts, vamos a:
Edit > Preferences > Folders > Scripts
Suele ser:
/.config/GIMP/2.10/scripts
En este ejemplo, aparece con el nombre **Risk** en el menu de Filters. Una vez copiado, para que aparezca en el menú, pulsamos: **Filters > Script-Fu > Refresh Scripts**
( define (script-fu-risk)
(let* (
(MyIMAGE (aref (cadr (gimp-image-list)) 0))
(MyLAYER (car (gimp-image-get-active-layer MyIMAGE)))
(MySELECTION1 (car (gimp-selection-save MyIMAGE)))
)
(gimp-selection-grow MyIMAGE 8)
(gimp-selection-border MyIMAGE 8)
(gimp-edit-copy MyLAYER)
(let* (
(MySELECTION2 (car (gimp-selection-save MyIMAGE)))
(MyFLOATING (car (gimp-edit-paste MyLAYER FALSE)))
)
(gimp-floating-sel-to-layer MyFLOATING)
(let (
(MyLAYER2 (car (gimp-image-get-active-layer MyIMAGE)))
)
(gimp-image-select-item MyIMAGE 2 MySELECTION1)
(gimp-drawable-edit-fill MyLAYER2 0)
(gimp-image-select-item MyIMAGE 2 MySELECTION2)
(gimp-drawable-edit-fill MyLAYER2 1)
(gimp-selection-none MyIMAGE)
(gimp-image-remove-channel MyIMAGE MySELECTION1)
(gimp-image-remove-channel MyIMAGE MySELECTION2)
(gimp-displays-flush)
)
)
)
)
(script-fu-register
"script-fu-risk" ;func name
"Risk" ;menu label
"Crea un Layer con el pais seleccionado
de color de FG y el borde mas gordo" ;description
"Iwanttobefreak" ;author
"copyleft 2021" ;copyright notice
"Setember 22, 2021" ;date created
"" ;image type that the script works on
)
(script-fu-menu-register "script-fu-risk" "/Filters")