Mini-tutorial de ImageMagick

Lo prometido es deuda. Hace un tiempo le comenté a Arturo que modificar imágenes era muy sencillo en Linux y la semana pasada les adelanté porqué era tan fácil. Hoy le toca el turno al como con este tutorial básico.

Espero que les sea útil.

Consideraciones generales

Convert es una aplicación con grandes capacidades. Puede hacer demasiadas cosas a una imagen de un solo paso. Por lo tanto, es importante el orden en el que se le pasen algunos parámetros. La regla general es la siguiente:

Los parámetros forman una secuencia y son ejecutados en ese orden. Todos los parámetros que son archivos de imágenes son cargados en memoria salvo por el último, que es en el que se escriben los resultados y aquellos parámetros que son órdenes u operaciones son efectuados sobre todas las imágenes cargadas en memoria.

También van a tener que tener cuidado con los tamaños, no sólo el tamaño de la imagen en sí sino también el tamaño del archivo. Los efectos que se obtengan con cada parámetro pueden no ser lo que se espera si la imagen no tiene el tamaño adecuado. Si bien será exactamente lo que le indicamos al programa, puede no ser necesariamente lo que queremos (truco: la opción gravity les puede ser de ayuda en muchos casos ya que es la única que no actúa sobre toda imagen en memoria ;) ).

Por otro lado, si una imagen es muy grande, convert intentará cargarla completa en memoria (a menos que se le indique lo contrario). Por ello, si trabajan con imágenes muy grandes puede pasar que la máquina se vuelva insoportablemente lenta debido a que el programa no puede trabajar en la imagen con la imagen en la memoria. Esa paradoja, que hace que ambas partes peleen por los recursos, se conoce como hiperpaginación (thrashing en inglés).

Podría darles listas y listas de ejemplos; pero creo que va a ser mejor que experimenten por ustedes mismos. Está de mas aclarar que les conviene siempre hacer backups de las imágenes a utilizar y crear nuevos archivos al modificarlos; caso contrario es muy probable que no puedan recuperar la versión original.

Cambios de formato

El cambiar de un formato a otro es tan sencillo como pasarle como argumentos el nombre de la imagen original y el nombre destino asegurándose que la extensión (las 3 letras que están después del punto) sea una que concuerde con el formato que se desea obtener.

Por ejemplo, para cambiar de BMP a JPG, bastaría con escribir:

convert imagen.bmp imagen.jpg

Cambios de tamaño

Hay varios parámetros diferentes que sirven para cambiar el tamaño de una imagen, cada uno con sus detalles en cuanto a algoritmos utilizados para mantener diferentes propiedades de la imagen. En la mayoría de los casos con resize va a ser suficiente.

La diferencia es que resize toma como parámetros una geometría, esto es dos números separados por una x de la siguiente forma: anchoxalto. La geometría que uno da sería en pixeles, pero también se pueden dar en porcentajes. Existen, además, muchas variaciones para indicar que sólo redimensione la imagen si es más grande (o chica) que lo especificado o para dar el área en lugar de las dimensiones.

Es de aclarar que dichos valores son valores máximos (o mínimos), lo que quiere decir que se mantendrá el aspecto de la imagen (no la deformará) hasta que una de las medidas alcance el límite que indicamos. Si queremos que esto no ocurra sólo agregamos un signo de admiración (!) pegado al último número y se respetarán las medidas tal y como las pasamos.

Rotando y orientando imágenes

Para cuando la imagen queda mirando para el lado que no nos gusta, podemos cambiar la orientación de las mismas con alguna (o varias) de las siguientes 4 opciones:

  • flip: vertical
  • flop: horizontal
  • transpose: diagonal superior izquierda
  • transverse: diagonal inferior izquierda

Admás, podemos rotarlas con la opción rotate seguida de la cantidad de grados (sexagesimales) a rotar en sentido horario. Por ejemplo:

convert imagen_origen -rotate 90 imagen_destino

Obviamente, convert entiende números negativos para no tener que calcular tanto y hacer los giros antihorarios. Sin embargo, hay que tener cuidado porque si no se la rota un múltiplo de 90 grados las dimensiones pueden cambiar.

Superponiendo imágenes

Otra tarea muy engorrosa es el superponer imágenes. A pesar de que tenemos a composite como aplicación dedicada a la combinación de imágenes, convert lo hace muy sencillo si lo usamos de la siguiente forma:

convert imagen_fondo imagen_frente -composite imagen_destino

El resultado es el mismo y esta forma es más sencilla de utilizar. Básicamente respetará las transparencias de la imagen que va al frente y la pondrá encima de la del fondo. Existen muchas otras formas que permite obtener diferentes efectos (como diferencia de imágenes y muchas otras cosas), se los dejo para que los investiguen ustedes si los necesitan.

Marca de agua

Algo que sí pueden llegar a necesitar, especialmente aquellos que tiene fotoblogs o un montón de imágenes a publicar, son las marcas de agua. Para quien no lo sepa, básicamente es hacer que una imagen aparezca “como fantasma” sobre otra. Para esto sí necesitaremos utilizar a composite y, si bien posee un parámetro watermark, como éste sólo es útil para marcas de agua en blanco y negro, se recomienda el uso de dissolve.

Ésta opción toma sólo un parámetro, el porcentaje de visibilidad de la marca de agua sobre la imagen. Por ejemplo, si queremos que apenas se vea pondríamos una visibilidad del 10% de la siguiente forma:

composite -dissolve 10% marca_de_agua imagen_origen imagen_destino

Trabajando en serie

Si bien hay formas de hacer algunas cosas simples en serie a muchas imágenes al mismo tiempo, creo que se puede hacer más fácil y potente con otra herramienta más. No se pierdan primeros pasos en bash si quieren saber cómo hacerlo

One thought on “Mini-tutorial de ImageMagick

  1. Pingback: Ubuntu Life » Blog Archive » Crear una marca de agua a una imagen