Aplicar sombras simultáneamente a un lote de imágenes (utilizando Gimp e ImageMagick)

nullSeguro que más de uno de los lectores asiduos al blog habrá observado que tiendo a poner una sombra en las capturas de pantalla que utilizo para ilustrar las publicaciones de modo que destaque sobre el fondo de la página.

Aunque es algo sencillo de conseguir con Gimp suele resultar tedioso tener que hacerlo manualmente por lo que optado por buscar un método que me permita automatizar su uso.

La idea es simple: colocar todas las imágenes en un mismo directorio y aplicar sobre ellas automáticamente el efecto de sombra.

Crear una sombra con ImageMagick

Como supuse que sería un problema ya resuelto me puse a buscar una solución en Internet encontrando la forma de hacerlo con ImageMagick publicado en Tux Training.

Funciona perfectamente pero le he incluido algunos cambios y mejoras

convert address_book.png \( +clone -background black -shadow %60×5+7+5% \) +swap -background none -layers merge +repage shadow.png

donde:

  • address_book.png es la imagen sobre la que quiero aplicar la sombra
  • -background black es para definir el color de la sombra
  • -shadow %60×5+7+5% un patrón que indica cómo aplicar la sombra. El significado del patrón “AxB+c+dâ€? es el siguiente:
    • A indica la transparencia de la sombra (0 totalmente transparente, 100 totalmente visible)
    • B indica la cantidad de blur que se aplica a la sombra.
    • c indica el desplazamiento en el eje x que se le da a la sombra
    • d indica el desplazamiento en el eje y de la sombra.

    Desde aquí agradecer a Tapule que haya aclarado con tanto detalle cómo funciona el parámetro shadow de imagemagick

  • -background none es para que el fondo sea transparente en lugar de meter un fondo blanco como ocurría en el truco original (-background white)
  • shadow.png es la imagen que resulta de aplicar a address_book.png el efecto de sombra

Sombra en modo batch con Gimp

Justificando el esfuerzo

Como me gusta complicarme la vida y quería

  1. Repasar/ampliar  los conocimientos que adquirimos sobre la creación de macros en Gimp con script-fu
  2. Aprender a utilizar el modo batch de Gimp.

pues me ha dado por crear un nuevo script en Scheme (podría hacerlo en Python pero, para una vez que tengo oportunidad de aprovechar el tiempo que invertí jugando con los paréntesis de Lisp en la facultad… ;))

Aportando la solución adoptada

Tras varios intentos el script quedó del siguiente modo.

Debes descargarlo y descomprimirlo (asegúrate que la extensión siga siendo .scm) en el directorio $HOME/.gimp-2.6/scripts.

Teniendo en cuenta:

  • $HOME es tu directorio de usuario.
  • .gimp-2.6 es un directorio oculto (comienza por . por lo que si no logras verlo en tu explorador de archivos prueba a activar la opción de mostrar archivos ocultos; en Nautilus basta con pulsar CTRL+H) y puede variar si la versión que tienes de Gimp no es la 2.6

He incluido bastantes comentarios en el script para que se entienda lo mejor posible pero si alguien tiene problemas para terminar de comprenderlo que no dude en preguntar (así aprendemos todos).

Aplicando la sombra a un lote de imágenes

Una vez que lo hemos “instalado” deberemos lanzar, utilizando el modo batch de Gimp, el siguiente comando desde la terminal

gimp --no-data -i -b '(batch-drop-shadow "/tmp/kk/*.png" 8 8 15)' -b '(gimp-quit 0)'

donde

  • /tmp/kk/*.png indica que procese todas las imágenes con extensión png del directorio /tmp/kk. Admite cualquier extensión soportada por Gimp e incluso podéis indicar el nombre de un único fichero sobre el que aplicar el efecto (p.e. /tmp/kk/captura.jpg) pero NO PUEDE indicarse únicamente el nombre de un directorio (p.e. /tmp/kk)
  • 8 8 15 son el desplazamiento de la sombra respecto a la imagen original en el eje X e Y y el radio de desenfoque que queremos que tenga la sombra

Tratando de evitar recordar el comando

Como el comando es algo complejo lo más acertado sería definir un alias (o una función) de modo que podamos invocarlo cómodamente con una sintaxis similar a

sombrear /tmp/kk/*.png

el problema es la expansión automática que hace Bash antes de invocar el comando que hace imposible que podamos implementarlo fácilmente; existen algunas soluciones (el comando set -f se encuentra entre ellas) pero complican la llamada más de lo necesario. Tras varias horas intentando encontrar una forma aceptable de simplificar su uso tuve que desistir por lo que si alguno de los lectores ya se ha peleado con el tema y ha encontrado una solución le agradecería la compartiese con el resto de “los mortales” ;). Siento no poder ofreceros algo mejor 😦

Conclusión

Dos alternativas que te permitirán procesar un conjunto de imágenes añadiéndoles automáticamente una sombra con poco esfuerzo. Si te sirve de referencia, el resultado de aplicar los dos métodos anteriores sobre la misma imagen es el siguiente null Evidentemente, el resultado puede cambiarse en función de los parámetros que utilicéis a la hora de invocar los scripts (es aconsejable experimentar hasta conseguir el resultado que más os satisfaga personalmente).

9 comentarios en “Aplicar sombras simultáneamente a un lote de imágenes (utilizando Gimp e ImageMagick)

  1. Pedro Felip dijo:

    Me ha gustado mucho la versión de GIMP. El único problema es que no he conseguido lanzar el comando desde la línea de comandos en Windows 7 (en Ubuntu ha funcionado sin problemas). Lo he intentado también desde dentro de un .BAT y nada:

    “C:\Program Files (x86)\GIMP-2.0\bin\gimp-2.6.exe” –no-data -i -b “(batch-drop-shadow 100_0003.JPG 8 8 15)” -b “(gimp-quit 0)”

    devuelve “batch command experienced an execution error”

    Mi próximo intento será desde un .vbs, que supongo que es lo que debería haber hecho desde un principio.
    Si conoces la manera de lanzarlo desde un .BAT te agradecería que me lo dijeras, porque me he quedado con el gusanillo.

      • Pedro Felip dijo:

        Pues sí, ha funcionado. ¡Muchas gracias!

        Para quien le interese, aquí está el comando:

        “C:\Program Files (x86)\GIMP-2.0\bin\gimp-2.6.exe” –no-data -i -b “(batch-drop-shadow \”pruebas*\” 8 8 15)” -b “(gimp-quit 0)”

        Comentarios:
        – las dobles comillas son las normales, las de la tecla 2
        – para más comodidad, el directorio de GIMP debería añadirse a la variable PATH
        – en Windows no hace falta poner \ antes del asterisco
        – aunque todo vaya bien, inevitablemente hay que pulsar una tecla para que se cierre la ventana que nos dice que todo ha ido bien.

  2. Pingback: BlogESfera.com
  3. Hola, quería decirte que este post me ha sido de mucha utilidad, sobre todo la parte de imagemagick.

    El parámetro -shadow $((60*5+0+5)), lo puedes simplificar de la siguiente manera -shadow %60×5+7+5%. El contenido del parámetro no es una operación aritmética, sino un patrón que indica como aplicar la sombra. El significado del patrón “AxB+c+d” es el siguiente:
    – A indica la transparencia de la sombra (0 totalmente transparente, 100 totalmente visible)
    – B indica la cantidad de blur que se aplica a la sombra.
    – c indica el desplazamiento en el eje x que se le da a la sombra
    – d indica el desplazamiento en el eje y que se le da a la sombra.

    Un saludo.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s