martes, 17 de mayo de 2011

Añadir marcas de agua a imágenes con ImageMagick

ImageMagick es una librería con un conjunto de utilidades que permiten manipular imágenes a través de la linea de comandos aunque también tiene librerías para usarlo desde los lenguajes de programación más conocidos (Java, .NET, Python, C, C++, PHP, ...) y tiene binarios para Windows, Linux y Mac. Mediante estas utilidades se pueden añadir marcas de agua a las imágenes entre otras muchas cosas, a decir verdad, prácticamente se puede hacer muchas de las cosas que una herramienta de retoque fotográfico puede pero a través de la linea de comandos o como decía desde alguno de los lenguajes para el que tenga «bindings» y con la posibilidad de automatizar el proceso. Las marcas de agua consisten en aplicar un patrón o estampado a una imagen, pueden ser muy visibles, pasar prácticamente desapercibidas o estar ocultas sirviendo para:

- Anotar sobre la imagen alguna información.
- Resaltar algún aspecto de la imagen.
- Añadir derechos de autor o logos como una forma de proteción anticopia.

Una buena marca de agua tiene que tener las siguientes características:

- La marca de agua debería ser visible (si la marca de agua no está oculta) independientemente de si la imagen es clara u oscura.
- Debería ser difícil de eliminar de la imagen.
- No debería ser muy molesta para los usuarios.

¿En que situación práctica querriamos añadir marcas de agua? Pues una de ellas es si tenéis un blog quizá en algún momento habéis pasado por la situación de que alguna página os ha copiado el contenido de alguna entrada, hay páginas que se dedican exclusivamente a actuar como directorios o como agregadores de contenido en los que a veces ni siguiera ponen un enlace a la fuente original. Por mucha licencia de uso que tengamos en nuestro blog el que nos copien el contenido no lo podemos evitar pero si podemos añadir marcas de agua a las imagenes para al menos que se identifique el origen de las mismas.

Con los siguientes comandos crearemos una marca de agua con un texto, repartido por toda la imagen o posicionado al sudeste de la imagen:

$ convert -size 700x370 xc:none -family Cantarell -fill white -colorize 40 -gravity NorthWest -draw "text 10,100 '(CC) BY-NC-SA http://elblogdepicodev.blogspot.com'" -gravity SouthEast -draw "text 10,100 '(CC) BY-NC-SA http://elblogdepicodev.blogspot.com'" watermark.png
$ composite -tile -dissolve 20 watermark.png imagen.jpg imagen-watermark.jpg
$ composite -gravity SouthEast -dissolve 20 watermark.png imagen.jpg imagen-watermark.jpg

Con el primer comando creamos la imagen de marca de agua con un texto pero también la podemos crear con alguna otra herramienta como Gimp, al final la marca de agua es una imagen y la podemos obtener por cualquier medio no hace falta que la generemos con ImageMagick. En el segundo aplicamos la marca de agua en forma de embaldosamiento a toda la imagen en la que la queremos incluir. En el tercero aplicamos la marca de agua en el sudeste de la imagen.

Si estamos añadiendo la misma marca de agua a muchas imágenes necesitaremos automatizar el proceso para que las marcas de agua se apliquen de la misma forma y queden todas igual, también para tardar prácticamente nada de tiempo en hacerlo comparado con una herramienta de retoque fotográfico evitando además un proceso que es aburrido, repetitivo y manual. En Linux lo podemos hacer de la siguiente forma que busca todas las imágenes que su nombre cumpla el patrón imagen*.png y ejecuta el comando composite para cada una de ellas:

find . -name "imagen*.png" -type f -exec composite -gravity SouthEast -dissolve 20 watermark.png {} {} \;

La cantidad de posibilidades que ofrecen estas herramientas de ImageMagick a través de sus numerosos parámetros y opciones puede llegar a ser abrumadora por lo que es recomendable encontrar algún ejemplo con lo que necesitemos hacer o partir de algo similar al resultado final que queramos.

En el siguiente ejemplo puedes ver el resultado de aplicar una marca de agua a una imagen posicionándola en el sudeste de la imagen original usando el último comando composite de los ejemplos.

+
+
Image Magick
=
 

Otro asunto relacionado con automatizar tareas con ImageMagick es cambiar el formato, tamaño o realizar escalado de forma masiva a muchas imágenes.

Referencia:
ImageMagick
ImageMagick Watermarking
Convertir imágenes entre formatos y cambiar tamaño con ImageMagick