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")