Autor Tema: Necesito un Script ¿Alguien sabe hacerlo?  (Leído 38733 veces)

tomas.senabre

  • Papá del Mes
  • Trimilenari@
  • *
  • Mensajes: 3370
    • La Mirada Hecha Pedazos
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #15 on: 29 oct 2006, 19:14 pm »
Tio va de narices, tenías que ver a la velocidad que edito ahora las imágenes. Funciona tanto en color (fusión valor), como en BN (fusión normal). quitaría también el menu de elección entre duplicar desde capa seleccionada o desde capa de fondo, lo dejaría para que siempre se duplique a partir de la capa del fondo que es lo correcto, de hecho, duplicar desde otra capa seleccionada devuelve siempre error.

Si dejas el script con las modificaciones que te he comentado, voy sobraoooooo. Si en un futuro me meto con esto de los script de Gimp investigaré por si se puede dejar lanzada la herramienta de niveles sobre la imagen de la capa generada, ya sería la ley del mínimo esfuerzo.

Te agradezco mucho tu ayuda Javier y espero que disfrutes de tus vacaciones, no te molesto más  ::) ::) :-* :-* :-* :-* :-*

Un saludote
Tomy
"Hay tres maneras de adquirir sabiduría: primero, por la reflexión, que es la más noble; segundo, por imitación, que es la más sencilla; y tercero, por la experiencia, que es la más amarga". Confucio

javielinux

  • Comenzando
  • *
  • Mensajes: 20
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #16 on: 29 oct 2006, 20:59 pm »
Lo de poner las dos opciones, capa seleccionada y capa de fondo, es por si quieres hacer retoques sobre una composición de fotos, que no se si tiene demasiado sentido, pero podría ser. Imagina que tienes varias capas y quieres crear de cada capa una mascara de selección, si siempre lo haces de la capa de fondo, pues no se puede. Lo que a lo mejor es lo suyo es poner como predeterminada lo de la capa de fondo. Si cambias:

(PF_RADIO, "layer_sel", "Trabajar en:", 0, (("Capa seleccionada", 0), ("Capa de fondo", 1))),

por

(PF_RADIO, "layer_sel", "Trabajar en:", 1, (("Capa seleccionada", 0), ("Capa de fondo", 1))),

(fijate que he cambiado el 0 por el 1), ya lo hace. Así no tendrás que preocuparte, y si algún día necesitas hacerlo de varias capas te acordarás de esta conversación ;-)

El error lo da ya que tienes seleccionada una capa que tiene ya una máscara, por lo que al duplicar he intentar crear de nuevo la máscara... casca. Así que sólo se puede hacer con capas que no tengas máscaras

Bueno, por lo menos ya te ahorras un tiempecito, y la verdad que yo también pq me parece que voy a usar el script bastante

un saludo tío y voy a descansar un poco que estoy de vacaciones ;-) .... seguramente al final estaré delante del ordenador, esto es un vicioooo

tomas.senabre

  • Papá del Mes
  • Trimilenari@
  • *
  • Mensajes: 3370
    • La Mirada Hecha Pedazos
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #17 on: 30 oct 2006, 05:35 am »
Tira por ahí y coje la cámara y vete ha disfrutar de las vacacionesssss. Como te vuelva a ver por aquí en periodo vacacional te echo un puro  :D :D :D :D.

Muchísimas gracias por tu ayuda; y por aquí nos tienes para lo que sea
Un abrazo
Tomy
"Hay tres maneras de adquirir sabiduría: primero, por la reflexión, que es la más noble; segundo, por imitación, que es la más sencilla; y tercero, por la experiencia, que es la más amarga". Confucio

tomas.senabre

  • Papá del Mes
  • Trimilenari@
  • *
  • Mensajes: 3370
    • La Mirada Hecha Pedazos
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #18 on: 01 nov 2006, 07:59 am »
Hola Javi,

Llevo usando el script unos días y funciona de narices, creo que hemos dado con una buena metodología para usar Gimp de manera más profesional.
También quería comentarte, que me he dado cuenta que los ajustes de niveles para cada nueva capa los realiza para toda la imagen de la capa, y lo más intuitivo y que menos carga el sistema, sería que después de haber hecho el desenfoque a la máscara se pasara la máscara a selección. De esta forma solo afectan los niveles a la zona que te interesa, y si la imagen es gorda va más ligero. ¿Sería muy complicado que el script terminara pasando la máscara a selección?

Ya lo sé, soy un pesaoooooo

Un saludote
Tomy
"Hay tres maneras de adquirir sabiduría: primero, por la reflexión, que es la más noble; segundo, por imitación, que es la más sencilla; y tercero, por la experiencia, que es la más amarga". Confucio

javielinux

  • Comenzando
  • *
  • Mensajes: 20
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #19 on: 02 nov 2006, 09:31 am »
Si pasaramos la máscara a selección, que creo que no hay problema, tendrías luego que eliminar la selección. Además si lo hacemos así lo que es la foto no nos serviría para nada, sólo serviría la parte de la máscara, ya que si luego decides "añadir un poco más de máscara", los ajustes que tenías hechos con anterioridad al hacerlos sobre una parte de la foto (con la selección) no se verán sobre la parte que quieras añadir más de máscara.

No se si me he explicado bien. Por otra parte tienes razón por lo del efecto, ya que lo hace a toda la capa, tanto lo que se ve como la que no se ve. En este punto, creo que lo mejor sería es aplicar la máscara sobre la capa, no se si me entiendes. O sea, que la capa al final quede como un trozito de lo que has seleccionada y ya solo aplicará el ajuste sobre la zona que se ha seleccionado

¿que te parece?

saludos

tomas.senabre

  • Papá del Mes
  • Trimilenari@
  • *
  • Mensajes: 3370
    • La Mirada Hecha Pedazos
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #20 on: 02 nov 2006, 12:50 pm »
Le he dado vueltas a lo que me comentas y creo que:

Cita
tendrías luego que eliminar la selección
Esto es relativamente rápido (Sift+ctrl+A) o teniendo el modo de selección de la herramienta en reemplazar

Cita
ya que si luego decides "añadir un poco más de máscara"
Es más cómodo y preciso ajustar muchas zonas pequeñas que pocas grandes. Digamos que es más fino un tratamiento en detalle por zonas seleccionadas por sus luces (sombras, tonos medios, zonas I, II, III, etc). Y con esto quiero decir que con tu script resulta más fácil crear otra zona que retocar la máscara de una que ya tienes creada  ;) ;). Por eso no me preocupa que no afecte a toda la imagen de la capa creada.

Cita
lo mejor sería es aplicar la máscara sobre la capa
Efectivamente, es lo mismo que digo yo. Que el ajuste afecte sólo a la zona que has seleccionado para el ajuste. De hecho me he dado ccuenta que al pasar la máscara a selección, el histograma que ves en la herramienta niveles es precisamente el que te interesa (la zona seleccionada), porque como está ahora ves el histograma de toda la foto y no te puedes ayudar para el ajuste (no sabes a ciencia cierta en parte del histograma está la zona que quieres ajustar). También se nota en la carga del sistema, por ejemplo en una imagen tif de 100Mb (Una panorámica), la herramienta de niveles tarda en mostrar la vista previa del ajuste un güebo porque lo aplica a toda la imagen, en cambio, si lo haces sobre la zona difuminada de tu zona seleccionada es instantáneo porque sólo lo aplica a esta zona.

El flujo de trabajo conforme estamos ahora lo llevo así:

1.- Selecciono a mano alzada (o como sea) una zona que quiero ajustar.
2.- Si creo que mi selección necesita retocar -> Máscara rápida (Sift+Q) pinto o borro en mi selección. Quito la Máscara rápida  (Sift+Q).
3.- Ejecuto tu script (Alt+X es un acceso rápido que le asignado desde las preferencias). Elijo el desenfoque que necesito para que las transiciones entre la zona que ajusto y la imagen se suavizen.
4.- Paso Máscara a selección (Es importante haber aplicado el desenfoque a toda la máscara sin selección no es lo mismo hacerlo sin quitar la selección).
5.- Tico en la imagen de la nueva capa y llamo a la Herramienta niveles (Alt+N es un acceso rápido que le asignado desde las preferencias). Vuelvo al paso 1

Este flujo de trabajo es cojonudo y super rápido y creo que permite gran dominio sobre la imagen: Puedes rectificar la selección antes de aplicar el script, puedes usar otras herramientas que no sean niveles, puedes corregir rápidamente Ctrl+Z, aun después de haber aplicado los niveles si crees que te has pasado puedes ajustar con la transparencia de la capa ¡Ostras! ¿Qué acabo de decir?.
Imagínate que el script crea la capa pero con transparencia al 50%. Después de aplicar los niveles a esa capa, nos permitiría retocar la capa a posteriori, pero no sólo si nos hemos pasado, sino también si no hemos llegado ¿lo entiendes?.   Si estamos aplicando los niveles a una capa que tiene transparencia de 50%, después podemos subir este efecto o bajarlo tocando la transparencia de la capaaaaaaa. Esto creo que es bueno ¿Se puede hacer?

Conforme nos vamos metiendo le vamos sacando más rendimiento a esto y gracias a tu actitud escéptica, mola :D :D :D

Un saludote
Tomy
"Hay tres maneras de adquirir sabiduría: primero, por la reflexión, que es la más noble; segundo, por imitación, que es la más sencilla; y tercero, por la experiencia, que es la más amarga". Confucio

javielinux

  • Comenzando
  • *
  • Mensajes: 20
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #21 on: 02 nov 2006, 13:22 pm »
yo lo que te digo es hacer esto. Mete esto:

pdb.gimp_layer_remove_mask(layer_mask, MASK_APPLY)

despues de hacer el desenfoque. Tiene que quedar algo así:

Código: [Seleccionar]
........
pdb.plug_in_gauss_iir(img, mask, gauss, TRUE, TRUE)

pdb.gimp_layer_remove_mask(layer_mask, MASK_APPLY)

# agrupamos UNDO

pdb.gimp_image_undo_group_end(img)

.....

Lo que hace es quitar la máscara y aplicarla en la capa. Con esto también nos ahorramos ya lo de tener que pinchar y seleccionar la capa en lugar de la máscara.

¿no es mejor así?

Ten en cuenta que si quieres hacer el ajuste de niveles, si lo haces sobre la selección toda la imagen sobra ya que no tiene el ajuste de niveles

Yo creo que es mejor que hacer la selección. De todas formas puedo poner en el script un boleano para decirle si quiere que haga la última parte, así puedes hacer que se queda la máscara o que la aplique

saludos

tomas.senabre

  • Papá del Mes
  • Trimilenari@
  • *
  • Mensajes: 3370
    • La Mirada Hecha Pedazos
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #22 on: 02 nov 2006, 17:08 pm »
Acabo de probar lo que me has dicho, y no termina de convencerme, porque sigues sin poder usar el histograma de la herramienta niveles o curvas, porque haces niveles sobre toda la imagen y las zonas transparentes hacen que el histograma salga hecho un churro. Si se pudiera hacer como tu dices pero seleccionando la zona para poder usar el histograma :P.

Y que me dices de crear las capas con opacidad 50 para poder retocar después las zonas si no convencen??. Yo creo que funcionaría.

Un saludote
Tomy
"Hay tres maneras de adquirir sabiduría: primero, por la reflexión, que es la más noble; segundo, por imitación, que es la más sencilla; y tercero, por la experiencia, que es la más amarga". Confucio

javielinux

  • Comenzando
  • *
  • Mensajes: 20
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #23 on: 02 nov 2006, 21:05 pm »
a ver que te parece esto. Pon esta línea al final

pdb.plug_in_autocrop_layer(img, layer_mask)

Código: [Seleccionar]
pdb.plug_in_gauss_iir(img, mask, gauss, TRUE, TRUE)

pdb.gimp_layer_remove_mask(layer_mask, MASK_APPLY)

pdb.plug_in_autocrop_layer(img, layer_mask)


# agrupamos UNDO

pdb.gimp_image_undo_group_end(img)


lo que hace es hacer un recorte y creo que mejora el tema de ajuste de niveles. No me gusta la idea de poner la máscara, ya que imaginate que quieres modificar varias zonas, si le cambias una y luego cambias otra, y después quieres cambiar la primera, tienes que hacer de nuevo explicitamente el "alfa a seleccion". Creo que con este soluciona el tema ¿no? Aunque se quedan algunas zonas tranparentes de la capa no se si afecta demasiado al histograma

¿que te parece?

saludos

tomas.senabre

  • Papá del Mes
  • Trimilenari@
  • *
  • Mensajes: 3370
    • La Mirada Hecha Pedazos
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #24 on: 05 nov 2006, 19:43 pm »
Hola Javi,

Muchas gracias por tus indicaciones y por la ayuda que me has prestado, me ha servido para avanzar muucho en el mundo de los script de Gimp. Estudiando tu script y otros muchos he conseguido hacer un script-fu que hace lo que yo buscaba. Deja la elección del tipo de desenfoque para el usuario y simplemente duplica la capa, crea una máscara a partir de la selección, selecciona la opacidad al 50% y cambia el modo de  fusión a valor si es una imagen RGB y lo deja en normal si es escala de grises, selecciona la imagen de la capa y por último coloca la capa arriba del todo.

Te pongo aquí el código por si se te crees que puedes añadir algo, o crees que he hecho algo mal:

Código: [Seleccionar]
; capa_ajuste_niveles.scm    version 1.00    5 Noviembre de 2006
;
; TRATAMIENTO DIGITAL DE IMÁGENES POR ZONAS:
;
; 1.- Seleccionar la zona que queremos ajustar, por ejemplo con la herramienta de selección a mano alzada.
;         1.1.- Si necesitas rectificar la selección. Máscara rápida Sift+Q y pintas en negro o blanco para añadir o quitar
;         1.2.- Para suavizar la transición entre la zona ajustada y la imagen puedes desenfocar la máscara con Desenfoque gaussiano
;         1.3.- Quitar Máscara rápida. Sift+Q
;
; 2.- Duplicar la capa desde la capa del fondo
;
; 3.- Añadir máscara de capa a partir de la selección
;
; 4.- Cambiar el modo de fusión de la capa dependiendo del ajuste que queremos hacer:
;         4.1.- Ajuste con herramientas de Niveles o Curvas
;                   - Modo de fusión NORMAL si es una foto en escala de grises.
;                   - Modo de fusión VALOR si se trata de una foto RGB.
;          4.2.- Ajustes con herramientas de color: Equilibrio de color, mezcladores de canales, etc.
;                   - Modo de fusión en COLOR.
;          4.3.- Ajuste de la saturación modo de fusión SATURACIÓN.
;          4.4.- Ajuste del tono modo de fusión en TONO.
;
; 5.- Cambiamos la opacidad de la capa al 50%.
;
; 6.- Hacemos los ajustes que queremos con la herramienta que hemos elejido.
;
; 7.- Volvemos al paso 1 para la siguiente zona
;
; Cambiamos la opacidad de la capa al 50% porque nos permitirá hacer ajustes "a posteriori" cuando tengamos ya hecho el trabajo podemos cambiar la opacidad de las capas para un ajuste más fino.
;
;
;
; Este Plugin está hecho para Gimp-2.0.
;
; Log de cambios:
; 1.00 - Script inicial
;
; Copyright 2005 Tomás Senabre <tomas.senabre@gmail.com>
;

(define (script-fu-capa-ajuste-niveles aimg drawable)

  (gimp-image-undo-group-start aimg)

  (let* (
(image-type (car (gimp-image-base-type aimg)))
(aimg-layers (car (gimp-image-get-layers aimg)))
(background-dup (car (gimp-layer-copy drawable 1)))
(layer-mask (car (gimp-layer-create-mask background-dup ADD-SELECTION-MASK)))
)

     (gimp-image-add-layer aimg background-dup -1)
     (gimp-layer-add-mask background-dup layer-mask)
     (gimp-layer-add-alpha background-dup)
     (gimp-layer-set-name background-dup "Zona de ajuste ")
     (if (= image-type 0) (gimp-layer-set-mode background-dup VALUE))
     (gimp-layer-set-opacity background-dup 50)
     (gimp-image-set-active-layer aimg background-dup)
     (gimp-layer-set-edit-mask background-dup FALSE)
     (if (> aimg-layers 1) (gimp-image-raise-layer-to-top aimg background-dup))
)
         
  (gimp-image-undo-group-end aimg)

  (gimp-displays-flush))

(script-fu-register "script-fu-capa-ajuste-niveles"
    "<Image>/Script-Fu/_Capa de ajuste"
    "Crea una capa con máscara a partir de una selección para ajustar con niveles o curvas una imagen RGB."
    "Tomas Senabre <tomas.senabre@gmail.com>"
    "Tomas Senabre"
    "Nov 05, 2005"
    "RGB*, GRAY*"
    SF-IMAGE "Input Image" 0
    SF-DRAWABLE "Input Drawable" 0)


Funciona bien todo, lo único que no he conseguido todavía es que duplique siempre a partir del fondo, no sé si a ti se te ocurre algo...

Repito mi agradecimiento Javi por el tiempo que me has dedicado y por ayudarme a avanzar con eso  ;) ;)

Un saludote
Tomy
"Hay tres maneras de adquirir sabiduría: primero, por la reflexión, que es la más noble; segundo, por imitación, que es la más sencilla; y tercero, por la experiencia, que es la más amarga". Confucio

javielinux

  • Comenzando
  • *
  • Mensajes: 20
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #25 on: 06 nov 2006, 12:48 pm »
buenas

me alegro que te sirva lo que hemos estado viendo. A mi tb me ha servido mucho para trabajar con los scripts y para aplicarlo en el retoque fotográfico. Yo lo del Scheme es que me duele la cabeza. Tantos paréntesis me marea, por eso prefiero python. Así que no lo entiendo muy bien, aunque leyendo mas o menos se ve la idea

Yo para pillar capa de fondo, cuando iba a duplicar cuento el número de capas que tiene la imagen y selecciono la última.

Código: [Seleccionar]
layer_work = img.layers[len(img.layers)-1]

img.layers es un array de capas. El metodo len() si le pasa el array te dice el número de elementos. Luego le resto uno para que me de la última capa.

No se si te servirá pero así es como lo hago

saludos y a disfrutar de gimp




tomas.senabre

  • Papá del Mes
  • Trimilenari@
  • *
  • Mensajes: 3370
    • La Mirada Hecha Pedazos
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #26 on: 07 nov 2006, 09:41 am »
Pues siguiendo tus indicaciones he conseguido hacerlo funcionar al 100%, ya va todo. Al final se ha quedado así:

Código: [Seleccionar]
; capa_ajuste_niveles_rgb.scm    version 1.00    5 Noviembre de 2006
;
; TRATAMIENTO DIGITAL DE IMÁGENES POR ZONAS:
;
; 1.- Seleccionar la zona que queremos ajustar, por ejemplo con la herramienta de selección a mano alzada.
;         1.1.- Si necesitas rectificar la selección. Máscara rápida Sift+Q y pintas en negro o blanco para añadir o quitar
;         1.2.- Para suavizar la transición entre la zona ajustada y la imagen puedes desenfocar la máscara con Desenfoque gaussiano
;         1.3.- Quitar Máscara rápida. Sift+Q
;
; 2.- Duplicar la capa desde la capa del fondo
;
; 3.- Añadir máscara de capa a partir de la selección
;
; 4.- Cambiar el modo de fusión de la capa dependiendo del ajuste que queremos hacer:
;         4.1.- Ajuste con herramientas de Niveles o Curvas
;                   - Modo de fusión NORMAL si es una foto en escala de grises.
;                   - Modo de fusión VALOR si se trata de una foto RGB.
;          4.2.- Ajustes con herramientas de color: Equilibrio de color, mezcladores de canales, etc.
;                   - Modo de fusión en COLOR.
;          4.3.- Ajuste de la saturación modo de fusión SATURACIÓN.
;          4.4.- Ajuste del tono modo de fusión en TONO.
;
; 5.- Cambiamos la opacidad de la capa al 50%.
;
; 6.- Hacemos los ajustes que queremos con la herramienta que hemos elejido.
;
; 7.- Volvemos al paso 1 para la siguiente zona
;
; Cambiamos la opacidad de la capa al 50% porque nos permitirá hacer ajustes "a posteriori" cuando tengamos ya hecho el trabajo podemos cambiar la opacidad de las capas para un ajuste más fino.
;
;
;
; Este Plugin está hecho para Gimp-2.0.
;
; Log de cambios:
; 1.00 - Script inicial
;
; Copyright 2005 Tomás Senabre <tomas.senabre@gmail.com>
;

(define (script-fu-capa-ajuste-niveles aimg drawable)

  (gimp-image-undo-group-start aimg)

  (let* (
(layers (gimp-image-get-layers aimg))
(nb-layers (car layers))
(layers-array (cadr layers))
(image-type (car (gimp-image-base-type aimg)))
(background-dup (car (gimp-layer-copy drawable TRUE)))
(background-dup (car (if (> nb-layers 0) (gimp-layer-copy (aref layers-array (- nb-layers 1)) TRUE))))
(layer-mask (car (gimp-layer-create-mask background-dup ADD-SELECTION-MASK)))
)

     (gimp-image-add-layer aimg background-dup -1)
     (gimp-layer-add-mask background-dup layer-mask)
     (gimp-layer-add-alpha background-dup)
     (gimp-layer-set-name background-dup "Zona de ajuste ")
     (if (= image-type 0) (gimp-layer-set-mode background-dup VALUE))
     (gimp-layer-set-opacity background-dup 50)
     (gimp-layer-set-edit-mask background-dup FALSE)
)
         
  (gimp-image-undo-group-end aimg)

  (gimp-displays-flush))

(script-fu-register "script-fu-capa-ajuste-niveles"
    "<Image>/Script-Fu/_Capa de ajuste"
    "Crea una capa con máscara a partir de una selección para ajustar con niveles o curvas una imagen RGB."
    "Tomas Senabre <tomas.senabre@gmail.com>"
    "Tomas Senabre"
    "Nov 05, 2005"
    "RGB*, GRAY*"
    SF-IMAGE "Input Image" 1
    SF-DRAWABLE "Input Drawable" 0)

Y lo he hecho como tu me digiste definiendo un array del número de capas y luego restando 1 para quedarme con la capa del fondo. Gracias Javi
"Hay tres maneras de adquirir sabiduría: primero, por la reflexión, que es la más noble; segundo, por imitación, que es la más sencilla; y tercero, por la experiencia, que es la más amarga". Confucio