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

tomas.senabre

  • Papá del Mes
  • Trimilenari@
  • *
  • Mensajes: 3370
    • La Mirada Hecha Pedazos
Necesito un Script ¿Alguien sabe hacerlo?
« on: 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
« Última Modificación: 26 oct 2006, 10:35 am por tomas.senabre »
"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 #1 on: 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

javielinux

  • Comenzando
  • *
  • Mensajes: 20
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #2 on: 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

tomas.senabre

  • Papá del Mes
  • Trimilenari@
  • *
  • Mensajes: 3370
    • La Mirada Hecha Pedazos
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #3 on: 26 oct 2006, 14:47 pm »
Gracias por contestar tan rápido,

Te he dejado un video (mpg) en este enlace 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
"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 #4 on: 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
« Última Modificación: 26 oct 2006, 15:32 pm por javielinux »

tomas.senabre

  • Papá del Mes
  • Trimilenari@
  • *
  • Mensajes: 3370
    • La Mirada Hecha Pedazos
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #5 on: 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

« Última Modificación: 26 oct 2006, 18:52 pm por tomas.senabre »
"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 #6 on: 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

tomas.senabre

  • Papá del Mes
  • Trimilenari@
  • *
  • Mensajes: 3370
    • La Mirada Hecha Pedazos
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #7 on: 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
"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 #8 on: 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

tomas.senabre

  • Papá del Mes
  • Trimilenari@
  • *
  • Mensajes: 3370
    • La Mirada Hecha Pedazos
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #9 on: 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
"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 #10 on: 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
« Última Modificación: 29 oct 2006, 08:36 am por tomas.senabre »
"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 #11 on: 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

javielinux

  • Comenzando
  • *
  • Mensajes: 20
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #12 on: 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

tomas.senabre

  • Papá del Mes
  • Trimilenari@
  • *
  • Mensajes: 3370
    • La Mirada Hecha Pedazos
Re: Necesito un Script ¿Alguien sabe hacerlo?
« Respuesta #13 on: 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

"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 #14 on: 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
"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