Cómo redimensionar imágenes en masa en Ubuntu con Imagemagik

Mayores dimensiones de una imagen suelen significar un mayor tamaño lo que a su vez se traduce en mayores tiempos de carga al subirlas a la nube o para los usuarios de un sitio web al descargarlas. Si deseas redimensionar una carpeta llena de imágenes para convertirlas todas a un ancho o alto específico y algunas modificaciones más, este artículo te permitirá lograrlo en Ubuntu usando Imagemagik. 

Instalar Imagemagik

El primer paso es obviamente instalar esta reconocida herramienta y para esto debes ejecutar el siguiente comando:

sudo apt-get install imagemagick -y

Redimensionar imágenes individualmente

El proceso para imágenes individuales es sumamente sencillo. Solamente debes ejecutar el siguiente comando e Imagemagik redimensionará la imagen manteniendo la relación aspecto. Es decir, las proporciones no van a cambiar sino que se conservará la mayor de las medidas. 

convert imagen.jpg -resize 600x400\> imagen.jpg

Si la imagen medía más de 600 pixeles de ancho y el alto era menor al ancho, entonces el nuevo ancho será de 600 pixeles y el alto se ajusta de acuerdo a la necesidad sin modificar las proporciones. 

Si la imagen medía más de 400 pixeles de alto y el ancho era menor al alto, entonces el nuevo alto será de 400 pixeles y el ancho se ajusta de acuerdo a la necesidad sin modificar las proporciones. 

Precisamente, \> es la señal que le indica al comando que, si encuentra una imagen de un tamaño menor al especificado, no debe hacerla más grande sino dejarla intacta. Es decir, solo redimensiona las imágenes más grandes. Si quieres redimensionar solo las imágenes más pequeñas. 

convert imagen.jpg -resize 600x400\< imagen.jpg

Si no quieres mantener las proporciones de la imagen entonces debes usar el comando así:

convert imagen.jpg -resize 600x400\! imagen.jpg

\! es el que indica que las proporciones deben ser ignoradas.

Este proceso va a reescribir la imagen original, así que si lo vas a ejecutar recuerda realizar un respaldo antes para evitar imprevistos. 

Redimensionar imágenes en masa

Para este caso es necesario utilizar el siguiente script que puedes modificar de acuerdo a tu necesidad:

#! /bin/bash

# esta es la ruta a la carpeta donde están las imágenes
CARPETA="/ruta/a/la/carpeta"

# ancho máximo
ANCHO=540

# alto máximo
ALTO=300

# este comando hace lo mismo que en el caso individual pero con todas las imágenes de la carpeta
find $CARPETA -iname '*.jpg' -o -iname '*.png' -exec convert \{} -resize $ANCHOx$ALTO\> \{} \;

Igual que en el caso del comando para redimensionar individualmente, este comando sobrescribe la imagen original por lo que querrás tener un respaldo de las imágenes. En el caso de que no sepas como ejecutar un script en Ubuntu puedes leer este artículo que escribí sobre el tema. Es muy fácil. En resumen solo debes crear un archivo con gedit, pegar el script, guardar con al extensión .sh y dar permisos de ejecución (chmod +x script.sh) y ejecutar (./script.sh).

Todas las opciones del comando convert las puedes leer y estudiar utilizando el comando: 

man convert

Más allá de las dimensiones

Muchas de las opciones del comando convert son avanzados y no pretendo explicar todos aquí. Únicamente voy a mencionar algunos que te podrían ser de utilidad. En todos los casos debes realizar un respaldo para estar preparado en caso de resultados inesperados.

Recortar imágenes

Si quieres recortar imágenes con cierto patrón a un tamaño específico puedes usar este comando:

convert imagen.jpg -crop 600x400+0+0 imagen.jpg

En este caso evidentemente hay que indicarle a Imagemagik a partir de cual pixel debe recortar. En el ejemplo usé +0+0 que quiere decir esquina superior izquierda. Si quieres encontrar la posición exacta para recortar puedes, por ejemplo, usar GIMP. Si ubicas el cursor en la imagen, en la esquina inferior izquierda deberías ver la ubicación en ancho y alto. 

 

Si solo vas a recortar una imagen no tiene mucho sentido usar el comando ya que hay métodos más rápidos. Sin embargo, si vas a recortar imágenes en masa nada más debes editar el script y en lugar del comando final debes usar este: 

find $CARPETA -iname '*.jpg' -o -iname '*.png' -exec convert \{} -crop $ANCHOx$ALTO+0+0 \{} \;

Otra opción que se puede usar con -crop es -gravity ya que de esta forma podrás definir un punto de referencia a partir del cual se recortaría la imagen. Puedes usar el comando así:

convert imagen.jpg -gravity Center -crop 600x400+0+0 imagen.jpg

En el ejemplo anterior, la imagen será recortada al tamaño especificado a partir del centro de la misma que es un uso bastante común. 

Eliminar bordes

La opción -trim es muy útil para eliminar bordes de imágenes en masa. Si tienes un grupo de imágenes con bordes indeseados, puedes ejecutar el comando de la siguiente forma:

convert imagen.jpg -trim imagen.jpg

Puedes probarla antes y verás como es un tipo de recortado automático para eliminar bordes sin información importante para una fotografía o imagen. 

Si tienes dudas sobre el uso de alguno de los comandos expuestos y tienes alguna sugerencia para añadir al artículo, no dudes en indicarlo por medio de los comentarios. 

 

Fundador
Seguidor de Jesús. Escribo artículos en mi tiempo libre sobre temas de tecnología que me interesan.