[Comunidad FotoLibre]

Ayuda => Pide ayuda aquí => Mensaje iniciado por: tomas.senabre en 26 oct 2006, 07:04 am

Título: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: tomas.senabre en 26 oct 2006, 07:04 am
Hola a todos(as),

En mi trabajo rutinario con Gimp hay dos rutinas (una para color y otra para BN) que se repiten hasta la saciedad (una vez por cada zona que trato enla foto), el proceso es el siguiente:

1.- Selección a mano alzada con el lazo (F) de una zona concreta de mi foto en la que quiero ajustar los niveles.
2.- Duplicar la capa de fondo (nombre = ajuste niveles zona 1, 2, 3, 4....). Cada duplicación es siempre a partir de la capa de fondo y se coloca sobre la previa (o sea encima de todas las que le preceden).
3.- Modo de fusión en: valor (para fotos color), normal (para fotos B&N)
4.- Crear máscara de capa
5.- Selección a canal (también puedo hacerlo con máscara rápida). Sería genial que Gimp tuviera la opción de guardar selección en máscara, me evitaría el paso 6.
6.- Selecciono todo el canal creado (en el menú canales), lo copio y pego en la máscara de capa (menú capas). (Así me queda una capa con la máscara de mi selección)
7.- Quitar selección
8.- Desenfoque gaussiano de la máscara
9.- Ajuste de niveles de la imagen de la nueva capa.

De esta manera trabajo por zonas las fotografías. En realidad desde los puntos 2 al 7 equivaldría a lo que llaman capa de ajuste de niveles en otros programas, pero que en Gimp no existe y hay que hacerlo a mano, y se pone un poquillo pesaoo. Los pasos 8 y 9 como requieren un ajuste manual de valores accedo a ellos a través de teclas rápidas ALT+N (Niveles) ALT+B (desenfoque gausiano)

¿Se le ocurre a alguien cómo automatizar con un par de scripts (uno para color y otro para BN) los pasos del 2 al 7?.

Otra opción sería admitir que en Gimp no existen máscaras de ajuste y el procedimiento quedaría:

1.- Selección a mano alzada con el lazo (F) de una zona concreta de mi foto en la que quiero ajustar los niveles.
2.- Duplicar la capa de fondo (nombre = ajuste niveles zona 1, 2, 3, 4....). Cada duplicación es siempre a partir de la capa de fondo y se coloca sobre la previa (o sea encima de todas las que le preceden).
3.- Modo de fusión en: valor (para fotos color), normal (para fotos B&N)
4.- Máscara rápida
5.- Desenfoque gaussiano de la máscara rápida
6.- Guardar selección en canal (por si queremos hacer modificaciones posteriores)
7.- Ajuste de niveles de la imagen de la nueva capa.

De este modo se hace más complejo retocar las selecciones creadas pero sería igualmente válido. Aquí lo bueno sería automatizar con un script los pasos 2 al 4. Aunque al final se nos quedaría un paso más el 6 para conservar las selecciones.

Un saludote
Tomy
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: javielinux en 26 oct 2006, 11:48 am
Que tal:

Intento seguir todos los pasos, pero es que no los entiendo. Por ejemplo el paso 2 ¿cuantas duplicaciones hay que hacer? ¿para que?. En el 5 no lo entiendo. El 6 ¿seleccionar el canal creado? ¿que canal?

Me estoy liando. Si no te importa, ¿podrías hacer un vídeo de todo el proceso para que me quedara más claro? Podrías usar http://xvidcap.sourceforge.net/ y viendo el vídeo seguro que me queda más claro

La verdad que no he trabajado con canales desde script, pero vamos se puede hacer. Lo que pasa que me has pillado en mal momento, a partir de mañana estoy de vacaciones, acaba de salir ubuntu 6.10 y estoy deseando instalarla.... pero bueno, a ver si me queda claro y busco un rato y te hago el script que creo que puede ser útil para todos

salu2
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: javielinux en 26 oct 2006, 14:21 pm
mas o menos lo estoy pillando, me había liado con lo de seleccion a canal. Lo he hecho, pero el resultado que me sale es muy raro. A lo mejor la foto no era la mas adecuada. ¿podrías poner algún ejemplo de una foto para ver el resultado? Voy a seguir haciendo pruebas a ver si lo pillo

saludos
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: tomas.senabre en 26 oct 2006, 14:47 pm
Gracias por contestar tan rápido,

Te he dejado un video (mpg) en este enlace (http://www.taxon.es/~tomy/video.mpg) son más de 7 MB, lo he capturado con el programilla que me has comentado, está chulo y creo que puede ser útil para los tutoriales.

Como puedes comprobar en el vídeo, siempre se repite la misma secuencia por cada zona que se quiera ajustar, en esta ocasión el ejemplo es de dos zonas, pero pueden haber 10 o más y se hace muy pesado.

Como me decías que no habías usados canales, el ejemplo lo he hecho rellenando la selección de blanco sobre la máscara de la capa que para el caso es lo mismo.

Además señalarte que es importante lo del modo de fusión de la capa, se utiliza valor para fotografía en color y normal para BN.

Si te interesa esta técnica de tratamiento por zonas te recomiendo el libro de José María Mellado. Fotografía Digital de Alta Calidad, es muy bueno.

Un saludo y ya me dices si todo está correcto
Tomy
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: javielinux en 26 oct 2006, 15:30 pm
Creo que el proceso lo haces un poco más largo de lo normal. Fijate así

El proceso sería:

1. Duplicar capa de fondo y poner el "valor"
2. Seleccion a mano o como sea
3. Difuminar selección
4. Botón derecho en la zona de capas y pulsar en "Añadir nueva capa". Te sale una ventana que pone "Iniciar máscara a", y tiene varios radiobutton, y marcas "Selección", tu marcas "Negro" por lo que después tienes que hacer más cosas.
5. Modificar niveles a la capa

Si lo haces así creo que es lo mismo. Podría hacer un script que duplicara la capa, difuminara la selección y creara la máscara

¿te parece bien así?

saludos

PD: lo de los vídeos está muy bien la verdad. Se podría crear una cuenta de youtube donde meter un montón de vídeo de gimp para que la gente pueda ir viendolos y podéis meter un apartado en la página con enlaces a los vídeos. Yo no soy muy bueno con gimp, pero a lo mejor podría hacer algún vídeo. El amigo Guillermo (http://www.hachemuda.com) tiene bastante de todas formas, y están muy bien, supongo que lo conoceréis
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: tomas.senabre en 26 oct 2006, 18:17 pm
Gracias Javielinux por tu prontitud

Puede parecer lo mismo pero no lo es, la herramienta de difuminar la selección no hace exactamente lo mismo que el difuminado gaussiano, este último es más efectivo para difuminar los bordes y suavizar la transición entre la zona con el nuevo ajuste y la de debajo.  Además, a veces, no quieres difuminar toda la selección por igual, o necesitas pintar en la máscara rápida para quitar y poner, también me ayuda a determinar cual es el desenfoque que necesita la selección para no pasarme (lo ves).

Pero sí tienes razón en que hago un paso más cuando genero la máscara, no me había dado cuenta de que está la opción de "selección" que directamente te pone en la capa lo que tienes seleccionado, eres monstruo  ;). No sabes los dolores de cabeza  que me había dado eso, yo buscaba algo parecido a "guardar selección en máscara" o algo así, no veas las vueltas que le he dado.

Podría quedar el flujo de trabajo de la siguiente forma:

1.- Selección a mano alzada con el lazo (o como sea) de una zona concreta de mi foto en la que quiero ajustar los niveles.
2.- Duplicar la capa de fondo (nombre = ajuste niveles zona 1, 2, 3, 4....). Cada duplicación es siempre a partir de la capa de fondo y se coloca sobre la previa (o sea encima de todas las que le preceden).
3.- Crear máscara de capa a partir de "selección".
4.- Modo de fusión en: valor (para fotos color), normal (para fotos B&N)
5.- Quitar selección
5.- Máscara rápida y desenfoque Gaussiano
6.- Ajuste de niveles o curvas en la imagen de la nueva capa.

Si pudieramos automatizar los pasos 2, 3, 4 y 5 se adelantaría un montón, me explico. Es importante  mantener el control del punto 5 porque, a veces, aplicas un difuminado o un desenfoque gaussiano y tienes que repasar con los pinceles pintando en la máscara rápida, o símplemente no quieres difuminar toda la selección de igual manera, porque una parte del motivo necesita más transición que otra. El punto 1 es obvio que hay que hacerlo a mano porque además existen infinidad de maneras de seleccionar que nos pueden ayudar. Y el punto 6 igualmente podemos elegir  varias herramientas de ajuste.

Me queda la duda de si es interesante automatizar también lo del modo de fusión, o es mejor dejarlo para cambiarlo a mano. Lo digo porque las fotos en color hay que ajustar los niveles zonales (no los generales) en modo valor para que no suba la saturación en la zona, en cambio en las fotos de BN se hace en modo normal. Pero podríamos querer usar el script para hacer una capa de ajuste de equilibrio de color, o mezclador de color, con lo que el modo de fusión sería color. Estoy pensando que quizás sea más rentable dejar la elección del modo de fusión a mano, después de todo no es tan difícil y está a mano. Entonces se quedaría en:

2.-Duplicar la capa de fondo (nombre = ajuste niveles zona 1, 2, 3, 4....). Cada duplicación es siempre a partir de la capa de fondo y se coloca sobre la previa (o sea encima de todas las que le preceden).
3.- Crear máscara de capa a partir de "selección".
4.- Quitar selección

No sé si es muy complicado hacer que la capa duplicada siempre se coloque encima de las demás  :P. Si lo conseguimos voy ha escribir un manualillo con tu script y lo publico en fotolibre.net :) :) :).

Un saludote
Tomy

Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: javielinux en 28 oct 2006, 17:48 pm
a ver que te parece el script:

Código: [Seleccionar]
#!/usr/bin/env python

# Script para Gimp en Python

# Realizado por Fco. Javier Pérez Pacheco

# Este script crea un capa nueva de la capa seleccionada y crea
# una máscara de la seleccion aplicandole un desenfoque a la máscara



# importamos los módulos necesarios

from gimpfu import *



def Mascara(img, drawable, type_img, gauss):

# comenzamos a agrupar el UNDO

pdb.gimp_image_undo_group_start(img)


layer_mask = drawable.copy(TRUE)

layer_mask.name = "Ajuste zona "

img.add_layer(layer_mask, 0)

if type_img == 0:

pdb.gimp_layer_set_mode(layer_mask, VALUE_MODE)

elif type_img == 1:

pdb.gimp_layer_set_mode(layer_mask, NORMAL_MODE)



mask = pdb.gimp_layer_create_mask(layer_mask, ADD_SELECTION_MASK)

pdb.gimp_layer_add_mask(layer_mask, mask)

pdb.gimp_selection_clear(img)

pdb.plug_in_gauss_iir(img, mask, gauss, TRUE, TRUE)


# agrupamos UNDO

pdb.gimp_image_undo_group_end(img)



# función principal

if __name__ == '__main__':



# llamada a función register

register(

"mascara_seleccion",

"Mascara de seleccion",

"Mascara de seleccion",

"Javi Pacheco",

"Javi Pacheco",

"2005",

"<Image>/Python-Fu/Mascara de seleccion",

"RGB*, GRAY*",

[

(PF_RADIO, "type_img", "Tipo de imagen:", 0, (("Color", 0), ("Blanco y negro", 1))),
(PF_SPINNER, "gauss", "Desenfoque", 10, (0, 100, 1))

],

[],

Mascara)

main()

Crea un nuevo archivo y llamalo como quieras, por ejemplo "mascara.py", dale permisos de ejecución y metelo en el directorio /home/usuario/.gimp2.2/plug-ins

Te tiene que salir en el menu "Python-Fu" de la imagen. Lo único que no he conseguido es una vez que crea la máscara y le hace el desenfoque, en la capa dejar seleccionada la imagen (NO la máscara) para que cuando hagas el "Ajuste de niveles", no tengas que seleccionarla. A ver si veo como es, pero me he jartao de mirar la documentación y no lo encuentro

ya me dices que te parece para hacer algun cambio si es necesario

saludos
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: tomas.senabre en 29 oct 2006, 03:39 am
Hola Javielinux,

Pues no consigo que funcione en mi Gimp  :-\. Lo he probado poniéndolo en los directorios:

/home/tomy/.gimp-2.2/plug-ins
/usr/lib/gimp/2.0/python

Les he dado permisos de ejecución y reinicio Gimp y no me aparece nada en el menú Phyton-Fu, no sé si tengo que tener instalado algún paquete más sobre Phyton.

Gracias por tu esfuerzo para ayudarme, en cualquier caso estoy estudiando tu script para ver cómo lo has haces, y aprender  ;)

Un saludote
Tomy
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: javielinux en 29 oct 2006, 06:42 am
Mira en el menu "Exts" de la caja de herramientas, y comrpueba que tienes un menu llamado "Python-fu". Si es así tienes instalado en Gimp los script para Python. Si no, tienes que instalar esto:

http://www.jamesh.id.au/software/pygimp/

Si tienes una distro basada en Debian, instala un paquete que se llama "gimp-python"

Eso es para tener Python-Fu instalado. Luego, en el menú de la imagen tiene que salir en "Python-fu". Si no es así hemos hecho algo mal. A mi algunas veces me dan un poco de por culo los script con Gimp. A lo mejor copio y pego el texto en otro archivo y ya funciona. Puede ser por problemas de encoding y eso.

Bajate mi archivo, que funciona, a ver que tal:

http://www.javielinux.com/mascara.py

saludos
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: tomas.senabre en 29 oct 2006, 07:41 am
TIOOOOOOOOOOOOOOOOOOOO funciona de perassss (debio de ser los códigos de las narices, a mi también me han dado problemas con los script de bash)

Si que es una put... que no se quede seleccionada la imagen en vez de la máscara, pero creo que podré superarlo  ;D ;D ;D ;D

Y si lanzara la herramienta de niveles como final del script, ¿podrías indicarle que fuera sobre la imagen y no sobre la máscara?. De esta forma todavía lo dejamos más reducido el curro de edición. ¿No sé si se puede hacer?

Un saludote
Tomy
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: tomas.senabre en 29 oct 2006, 07:52 am
Acabo de observarle algunas cosillas, que molaría afinar:

1.- El enfoque gausiano está limitado a 100, y hay veces que se llega a superar valores de 250 o 300 para crear gradientes entre la selección y la imagen.

2.- Para lanzar el script, siempre hay que seleccionar la capa de fondo para que funcione el script. Normalmente, esto no sería un problema muy grande, pero si le asignamos una combinación de teclas para lanzar el script (estas sólo funcionan cuando estás en la ventana de imagen) implica ticar en la capa de fondo, ticar en la ventana de imagen y después lanzar el script con la convinación de teclas.

3.- En la ventana del script el tipo de imagen se refiere a color y blanco y negro como yo te comenté, pero ahora que lo veo sería más correcto cambiar color por "RGB" y Blanco y negro por "Escala de grises". Esto es porque pueden haber imágenes en blanco y negro que conservan los datos RGB para realizar virados y cosas así. Este cambio, creo que es el más sencillo, creo que hasta podría hacerlo yo, después de haber estudiado tu script ;D ;D ;D.

4.- Veo interesante, lo que te comenté anteriormente que el script terminara con el lanzamiento de la herramienta de niveles sobre la imagen de la capa creada, pero si te da muchos problemas, lo dejamos como está.

Voy a seguir dándole caña a ver que más se me ocurre
Tomy
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: javielinux en 29 oct 2006, 09:41 am
1.- El enfoque gausiano está limitado a 100, y hay veces que se llega a superar valores de 250 o 300 para crear gradientes entre la selección y la imagen.

Ok. Esto lo puedes cambiar ahora tu rápidamente modificando la línea que pone

(PF_SPINNER, "gauss", "Desenfoque", 10, (0, 100, 1))

y poner

(PF_SPINNER, "gauss", "Desenfoque", 10, (0, 1000, 1))

he cambiado el 100 por el 1000 y ya tienes suficiente

2.- Para lanzar el script, siempre hay que seleccionar la capa de fondo para que funcione el script. Normalmente, esto no sería un problema muy grande, pero si le asignamos una combinación de teclas para lanzar el script (estas sólo funcionan cuando estás en la ventana de imagen) implica ticar en la capa de fondo, ticar en la ventana de imagen y después lanzar el script con la convinación de teclas.

Lo que voy a poner es otro radiobutton que ponga:

* Trabajar sobre la capa de fondo
* Trabajar sobre la capa seleccionada

3.- En la ventana del script el tipo de imagen se refiere a color y blanco y negro como yo te comenté, pero ahora que lo veo sería más correcto cambiar color por "RGB" y Blanco y negro por "Escala de grises". Esto es porque pueden haber imágenes en blanco y negro que conservan los datos RGB para realizar virados y cosas así. Este cambio, creo que es el más sencillo, creo que hasta podría hacerlo yo, después de haber estudiado tu script ;D ;D ;D.

Si es así lo que puedo hacer es comprobar si la imagen es RGB o Escala de Grises y según uno u otro pues le ponemos VALOR o NORMAL. Así quitamos el radiobutton de imagen en color o imagen en b&n ¿que te parece?

4.- Veo interesante, lo que te comenté anteriormente que el script terminara con el lanzamiento de la herramienta de niveles sobre la imagen de la capa creada, pero si te da muchos problemas, lo dejamos como está.

Esto es que creo que no se puede hacer. Sería un punto que Gimp te dejara sacar ventana en modo modal, pero creo que no se puede. De todas formas investigaré pq si es así, sería un puntazo

saludos
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: javielinux en 29 oct 2006, 10:56 am
prueba con este:

http://www.javielinux.com/mascara.py

ya no hay que seleccionar si la foto es en blanco y negro o color, te lo hace solo. Y ahora si seleccionas si quieres trabajar sobre la capa de fondo o la capa seleccionada. Además está arreglado el rango del desenfoque

lo de seleccionar la imagen o sacar el ajuste de niveles, por ahora chungo. El primero supongo q se puede hacer, pero el segundo creo que no

saludos
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: tomas.senabre en 29 oct 2006, 11:00 am
Ok Javier

1.- Ya he cambiado yo mismo el límite de 100 a 1000 en el desenfoque gaussiano y he cambiado el ajuste por defecto a 50

2.- Lo de trabajar sobre capa de fondo a capa seleccionada, es que ahora el script sólo funciona si seleccionas manualmente la capa del fondo, parece que si tienes seleccionada la última que se creo no funciona. En cualquier caso lo correcto sería que siempre creara la nueva capa a partir de la del fondo para que no se acumulen las modificaciones. Me explico, si ejecutas una vez el script, haces un ajuste y vuelves a ajecutarlo para ajustar otra zona, tienes seleccionada la que acabas de modificar con su máscara y toda la pesca, lo normal es crear otra capa a partir de la del fondo con una nueva máscara de capa a partir de la selección de la segunda zona. De esta forma vas acumulando las capas individuales de cada zona modificada y puedes mediante la opacidad reajustar individualmente, por si te pasaste en los ajustes de alguna de ellas. No sé si me entiendes??

3.- Si puedes hacer que el script reconozca entre RGB y Escala de grises para evitar el ajuste, eso que le ganamos a Potochos  ;D ;D. Es una idea estupenda.

4.- Lo de arrancar las ventanas de herramientas en modo modal, sería cuestión de investigar. Lo veo interesante incluso para otros script

Gracias Javier por toda tu ayuda

Tomy

Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: tomas.senabre en 29 oct 2006, 11:03 am
Joer estábamos los dos escribiendo al mismo tiempo, voy a comer y esta tarde pruebo el script.

Pero con lo que hace creo que va ha ser la caña. Ya estoy escribiendo el manual para trabajar imágenes digitales por zonas con Gimp y tu script

Un saludote
Tomy
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: tomas.senabre en 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
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: javielinux en 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
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: tomas.senabre en 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
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: tomas.senabre en 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
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: javielinux en 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
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: tomas.senabre en 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
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: javielinux en 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
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: tomas.senabre en 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
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: javielinux en 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
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: tomas.senabre en 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
Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: javielinux en 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



Título: Re: Necesito un Script ¿Alguien sabe hacerlo?
Publicado por: tomas.senabre en 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