Tutorial de ImageMagick

Convertir imágenes desde terminal


Cuando hablamos de convertir entre formatos de imagen, ImageMagick es el software por excelencia. Es muy potente y permite hacer todo tipo de operaciones con imágenes, no sólo conversiones, sino creación de imágenes paso a paso, gestión de capas, animaciones, modificaciones de colores, transparencias, aspectos técnicos de formatos, etc.

Instalación de imagemagick

Lo primero es instalar ImageMagick en tu sistema. Normalmente viene incluido en los repositorios oficiales, por lo que basta con utilizar apt:

$ sudo apt install imagemagick

$ convert --version

En algunas versiones modernas, en lugar de convert debemos utilizar el comando magick. ImageMagick viene con varios comandos: convert, identify, display, etc... Puedes utilizar cualquiera de ellos, indicando el parámetro --version para comprobar si ha sido instalado correctamente.

Conversión entre formatos

Para convertir entre diferentes formatos gráficos, simplemente debemos colocar la extensión del nuevo archivo, e ImageMagick lo hará automáticamente. Veamos algunos ejemplos.

Imaginemos que tenemos un archivo en formato .png. Queremos convertirlo a formato .webp. Para ello, simplemente llamamos al comando convert e indicamos la imagen original y la imagen de destino:

$ convert imagen.png imagen.webp

Como hemos indicado imagen.webp, ImageMagick ya sabe a que formato convertir y que nombre ponerle al archivo, así que lo realiza automáticamente.

Si no nos muestra ningún mensaje, significa que todo ha ido bien. En el caso de tener algún tipo de error, nos saldría por pantalla, tras ejecutar el comando.

Aunque depende de los formatos que estemos utilizando, la mayoría de ellos permiten indicar la calidad resultante de nuestra imagen. ImageMagick nos permite indicarla mediante un parámetro denominado -quality:

$ convert imagen.jpg -quality 75 output.jpg

Esto hará que que nuestra imagen resultante tenga una calidad del 75% respecto a la original, siendo 0% una calidad peor y tamaño más pequeño, y 100% una calidad mejor pero mayor tamaño de imagen.

En formatos como JXL o WEBP se puede indicar el parámetro -lossless para que utilice la modalidad de compresión sin pérdidas, similar a como se hace con PNG. Esta es una opción que puede funcionar muy bien con imágenes con pocos colores, sin texturas o con regiones muy grandes de un solo color.

Recuerda que la extensión de los archivos sólo es una sugerencia. Nada impide que tengamos un archivo con extensión .png, que realmente sea un JPG, por ejemplo. Una buena forma de asegurarnos de esto, es utilizar el comando identify, que nos muestra información sobre la imagen:

$ identify logo.png
logo.png PNG 512x512 512x512+0+0 8-bit sRGB 44127B 0.000u 0:00.000

Observa que en este caso, nos está diciendo que el archivo es formato PNG, que tiene un tamaño de 512x512 píxels y que ocupa aproximadamente 44KB, entre otras cosas. Esto nos puede venir muy bien para realizar comprobaciones tras alguna conversión.

Dependiendo de nuestro sistema y la versión de ImageMagick, puede soportar ciertos tipos de formatos de imagen diferentes. Para saber exactamente cuales son los formatos que soporta nuestro ImageMagick, escribiremos el siguiente comando:

$ identify -list format

Nos saldrá una lista gigante con formatos soportados, indicando incluso si soporta sólo lectura o también es capaz de generarlos. Vamos a utilizar el comando grep para filtrar y consultar sólo la información que nos interesa:

$ identify -list format | grep -i AVIF
     AVIF* HEIC      rw+   AV1 Image File Format (1.15.1)

En este caso, nos está mostrando que ImageMagick soporta el formato de imagen AVIF, tanto de lectura r como de escritura w.

Redimensionar imágenes

Algo bastante común cuando estamos convirtiendo imágenes es redimensionarlas y hacerlas más pequeñas para que ocupen menos. Esto se puede hacer muy facilmente con ImageMagick. Observa que simplemente añadimos el parámetro -resize indicando luego el tamaño deseado (ancho x alto):

$ convert -resize 500x500 imagen.png imagen.jpg

De hecho, podemos incluso obviar el ancho o el alto, e ImageMagick lo redimensionará proporcionalmente, leyendo el tamaño real de la imagen y garantizando la proporción de aspecto, sin deformarla:

$ convert -resize 500x imagen.png imagen.jpg

Esto hace que las redimensiones sean muy sencillas de realizar.

Añadir una marca de agua

Si necesitamos añadir marcas de agua a una imagen, podemos utilizar ImageMagick. Simplemente, escribimos el siguiente comando:

$ convert imagen.jpg watermark.png -gravity southeast -composite imagen-con-watermark.jpg

Observa que hemos hecho varias cosas:

  • 1️⃣ La imagen imagen.jpg es nuestra imagen original, y watermark.png es la marca de agua.
  • 2️⃣ El parámetro -gravity indica donde añadir la marca de agua. Abajo a la derecha, en este caso.
  • 3️⃣ El parámetro -composite indica que se añada la marca de agua sobre la imagen original.
  • 4️⃣ La imagen resultante se llamará imagen-con-watermark.jpg.

Recortar una zona (crop)

Si necesitamos recortar una zona de una imagen podemos utilizar la funcionalidad crop de ImageMagick. Simplemente, escribimos el siguiente comando:

$ convert imagen.jpg -crop 200x200+50+50 output.jpg

Con el parámetro -crop indicamos que queremos recortar un fragmento de la imagen, donde, de la imagen original, nos vamos a desplazar al punto 50x50 y luego, vamos a recortar un fragmento que se desplaza un tamaño de 200x200.

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev