ImageMagick, la poderosa suite de software libre para la edición no interactiva de imágenes, lleva a la línea de comandos todas las herramientas necesarias para trabajar con imágenes, sean estas de tipo raster o vectorial. Operaciones básicas como redimensionar una imagen, recortarla, voltearla o girarla y corregir su nivel de brillo, gama o contraste, pero también otras más complejas como añadir a una imagen textos, combinarla con otras o aplicar una matriz de convulsión son, todas ellas, tareas que podemos realizar con ImageMagick desde una terminal de Linux o desde el intérprete de comandos de Windows. Como programa de línea de comandos que es, ImageMagick expone todo su potencial cuando es necesario trabajar con decenas o centenas de imágenes en lote o integrar funciones de procesamiento de imágenes en una aplicación propia.
La contracara de esta multitud de funciones está, fuer es decirlo, en cierta dificultad de uso. Desde luego no será necesario conocer en su totalidad las características y opciones que ofrece —seamos sinceros, la mayoría de nosotros no domina tampoco la totalidad de opciones disponibles en una suite de edición con entorno gráfico—, pero para poder avanzar en el uso de estas herramientas debemos adquirir algunas nociones básicas, para lo cual ImageMagick dispone de una documentación profusa y de calidad aunque en inglés.
Una de estas nociones que es necesario manejar, ya sea para crear un lienzo en blanco, cambiar el tamaño de una imagen, añadir un borde, eliminar o extraer una porción de imagen, recortarla, entre otras operaciones en las que intervengan variables de tamaño o posición, es la de geometría (geometry). La geometría en ImageMagick es la especificación de dimensiones de un rectángulo, su desplazamiento o la ubicación de un punto dentro de una superficie.
Se recuerda que una imagen puede representarse sobre un plano cartesiano o una matriz de dos dimensiones (2D). Cada punto de color o pixel ocupa un lugar definido por un valor de X y uno de Y.
El formato de geometry puede tomar cualquiera de las formas que anticipamos aquí a modo de referencia y que más abajo desarrollaremos con algunos ejemplos.
Para probar la especificación de geometry en la práctica, crearemos dos imágenes o lienzos impresos con dos de los patrones de relleno incorporados a ImageMagick. Podemos consultar la lista completa de diseños en https://legacy.imagemagick.org/script/formats.php#builtin-patterns
magick -size 200x120 pattern:crosshatch fondo.png
Con el comando magick (proporcionado por la instalación de ImageMagick 7) hemos creado una superficie de 200 píxeles de ancho x 120 píxeles de alto y rellenado la misma con el patrón crosshatch. El resultado ha sido volcado al fichero fondo.png en el directorio actual.
He aquí un primer uso de la especificación de geometry para la opción -size, la cual establece el tamaño requerido para la imagen de salida.
Creamos el segundo lienzo de la misma manera pero especificando las dimensiones 50x50 píxeles.
magick -size 50x50 pattern:horizontalsaw plano.png
magick -size 50 pattern:horizontalsaw prueba.png
magick -size x50 pattern:horizontalsaw prueba.png
Ambos comandos crearán una imagen cuadrada de 50x50 píxeles.
magick -size 200x120+0+0 pattern:horizontalsaw prueba.png
Creará una imagen de 200x120 píxeles. La parte correspondiente al desplazamiento en -size (+0+0) es ociosa, ImageMagick la ignora y puede omitirse.
Las demás formas de geometry no tienen demasiado sentido para la opción -size. ImageMagick interpretará las especificaciones porcentuales como números enteros (número de píxeles); la relación de aspecto X:Y como XxY; e ignorará los modificadores '^', '!', '>' y '<'.
La especificación de área AREA@ producirá un error al usarla para crear lienzos con patrones de relleno, pero resultará en una imagen de AREAx1 píxeles al usarla con una superficie en blanco o de un color liso.
El comando identify es parte de la suite ImageMagick y proporciona información sobre un fichero de imagen. Añadiendo la opción -verbose antes del nombre de archivo, este comando desplegará una copiosa lista de propiedades de la imagen. Resulta muy útil para leer información de una imagen que pueda determinar el comportamiento ulterior de una edición, recomendamos, para esos casos, revisar la opción -format. https://imagemagick.org/script/identify.php
Ha llegado el momento de ocuparnos del comando que proporciona ImageMagick para combinar dos imágenes en una: composite. En su forma más simple recibe como argumentos el nombre de archivo de la imagen superior, el de la imagen inferior y el nombre del fichero de salida.
magick composite plano.png fondo.png resultado.png
Ahora podemos intentar otros valores de geometry.
magick composite plano.png -geometry '+30+10' fondo.png resultado.png
magick composite plano.png -geometry '130x40!+30+10' fondo.png resultado.png
composite plano.png -geometry '2:3+30+10' fondo.png resultado.png
Con la propiedad -gravity podemos posicionar una imagen dentro de otra haciendo coincidir sus vértices o centros. Esta propiedad es también conocida como anclaje.
composite plano.png -gravity Center fondo.png resultado.png
Para alinear las imágenes a partir de sus vértices los valores pueden ser: NorthWest (noroeste), que alinea las imágenes en torno a los vértices superiores del lado izquierdo; SouthWest (sudoeste), que lo hace en función de los vértices inferiores del mismo lado; NorthEast (noreste), para hacer coincidir las esquinas superiores del lado derecho; y SouthEast (sudeste), para las inferiores, también del lado derecho.
Para alinear las imágenes en relación a sus centros: West (oeste) y East (este) alinearán las imágenes sobre el eje horizontal y hará coincidir los bordes izquierdos o derechos; y North (norte) y South (sur), para hacer coincidir las imágenes en función de sus ejes verticales y bordes superiores o inferiores.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Una última cuestión de la que quisiéramos ocuparnos y que quizá sea la que más dudas genere es la de la relación entre -gravity y un desplazamiento u offset positivo o negativo en -geometry ([+|-]X[+|-]Y). Un desplazamiento +50+0 sobre una capa anclada en East, por ejemplo, no tendrá igual comportamiento que el mismo desplazamiento para una capa con gravity en West o Center.
Podemos formularlo de este modo:
El desplazamiento positivo en X moverá la capa hacia la derecha, excepto que esta tenga anclaje sobre el borde derecho (East, NorthEast, SouthEast), en cuyo caso moverá la capa hacia la izquierda. A la inversa, un desplazamiento negativo en X moverá la capa hacia la izquierda excepto en los casos mencionados, que lo hará hacia la derecha.
De forma similar, el desplazamiento positivo en Y moverá la capa hacia abajo, excepto que el anclaje esté establecido sobre alguno de los valores que hacen coincidir los bordes inferiores, en cuyo caso lo hará hacia arriba y, a la inversa, un offset negativo en Y desplazará la capa hacia arriba, excepto que gravity esté establecido en North, NorthWest o NorthEast.
Parece suficiente lo dicho hasta aquí para la especificación de dimensiones y ubicación de una imagen o superficie sobre otra en ImageMagick. Si ya realizaste pruebas por tu cuenta, es muy probable que se te haya presentado algún desafío cuya solución requieriese de conocimientos más avanzados acerca del funcionamiento de ImageMagick. Pero no te desanimes, como decíamos al principio, existe gran cantidad de información dando vueltas en la red. Puedes empezar consultando su documentación oficial y, en el caso de estar en la búsqueda de alguna solución en particular, revisar si alguno de los muchos scripts desarrollados por Fred Weinhaus se ajusta a tus requerimientos.
Te invitamos como siempre a compartir tus impresiones, opiniones o experiencias con ImageMagick en los comentarios y aportar valor a esta entrada. ¡Saludos internauta!