miércoles, 20 de julio de 2011

Extraer una imagen de otra con convert

Planteando el problema, tenia que eliminar el color magenta de casi 400 imagenes bmp y convertirlas a archivos png con transparencia. Claramente tenia que usar convert pero en el camino se interpusieron algunos obstáculos. 

-  =

De la siguiente manera podemos extraer cualquier imagen de otra, no solo un color.

convert imagen.bmp imagenMagenta.bmp -compose ChangeMask -composite imagen.png

Para seriar este procedimiento, probamos utilizar el comando for pero tenia problemas con los nombres de las imágenes con espacios en blanco en medio, así que el while anidado de un ls fué la solución.

ls *.bmp | while read i; do  convert "$i".bmp Transparente.bmp -compose ChangeMask -composite "$i".png; done

Aún quedaba quitar la extensión bmp de los nombres de los nuevos archivos, solucionado con una expresión regular:

ls *.bmp | sed -e 's/\.[a-zA-Z]*$//'

Finalmente, la linea completa:

ls *.bmp | sed -e 's/\.[a-zA-Z]*$//' | while read i; do  convert "$i".bmp Transparente.bmp -compose ChangeMask -composite "$i".png; done

No hay comentarios: