Skip to main content

Redimensionar imagenes mayores que 1280x960px en batch - ssh

Alejo Sotelo - Developer
Alejo A. Sotelo - @alejoasotelo
Publicado el 01 Diciembre 2016

Una vez mas como comentaba en el post me encontre con que un usuario habia subido imagenes de gran tamaño por lo tanto cuando el Zoo (Joomla) intentaba redimensionar daba error de exceso de memoria. Se me vinieron 2 soluciones inmediatamente a la mente:

  • 1. Aumentar la memoria ram de la cuenta.
  • 2. Redimensionar las imagenes

Sin dudar por se un servidor que comparten varias cuentas, fui por la segunda opción. Cómo lo hice? Busqué algun comando que redimensione imagenes que sean mayores a un ancho mayor que 1280px (elegí este ancho porque era lo maximo que se mostraba en la web, podria haber sido 800px, 2000px, etc.). El comando que encontre fue:

# mogrify -resize '1280x960>' *.jpg

El comando anterior redimensiona (manteniendo la relacion de aspeco) las imagenes que tengan un ancho mayor que 1280px o 960px de alto a un ancho de 1280px o a un alto de 960px.

Con este comando ya podia solucionar mi problema, pero seguia teniendo otro inconveniente. Las imagenes no estaban todas en la misma ruta, si no que estaban en subcarpetas. Cómo lo resolví? con el comando "find" de la siguiente manera. Ya dentro de la ruta del usuario con el problema:

# cd /mijoomla/images/
# tar -czvf zoo.tar.gz zoo/
# cd zoo
# find ./ -name "*.jpg" -exec mogrify -resize '1280x960>' -quality 100 {} \;

Con el comando "cd /mijoomla/images/" me ubique en la carpeta de las imagenes. Con el comando "tar -czvf zoo.tar.gz zoo" hice un backup de la carpeta zoo. Luego con "cd zoo" me ubiqué dentro de la carpeta zoo donde estaban las imagenes en cuestion. Por último con el comando "find ./ -name "*.jpg" -exec mogrify -resize '1280x960>' -quality 100 {} \;" ejecuté el script que redimensionó las imagenes. Con find busque las imagenes en formato .jpg recursivamente (en subcarpetas) y luego con mogrify si la imagen tenia una resolucion mayor que 1280x960 la redimensioné a 1280x960 (manteniendo la relacion de aspeco de la imagen original).

Con estos comandos, le ahorre a mi cliente tener que descargar las imagenes, redimensionarlas a una resolucion mas chica y tener que subirlas una por una. En 10 minutos como maximo, le resolvi el problema a mi cliente que si lo tendria que hacer "manualmente" hubiese tardado 1 hora o mas.

Espero que les sirva a ustedes y no se olviden siempre de hacer un backup por las dudas.

Más artículos de Alejo A Sotelo - Desarrollo Web

19 Julio 2024

Cómo detuve un ataque de Bots en un Formulario de Contacto sin reCAPTCHA

Hoy quiero compartir una experiencia reciente que tuve con un ataque de bots a un formulario de contacto en uno de mis proyectos. Este incidente me llevó a profundizar en los logs de acceso y a implementar una solución rápida p...
20 Diciembre 2022

Liberar memoria ram en servidor CentOS

Cómo hacemos para liberar la memoria ram de nuestro servidor CentOS? Bueno, entramos por ssh al servidor y luego ejecutamos los siguientes comandos: free -m sudo sync && sudo sysctl -w vm.drop_caches=3 free -m ...
25 Febrero 2022

Cómo funciona React, Vue, Angular o frameworks parecidos a nivel técnico?

Alguna vez te preguntaste cómo funcionan los frameworks reactivos de javascript como Vue, React, Angular, etc. a nivel técnico? Si tuviste esta curiosidad te recomiendo leer este post del 2016 https://www.monterail.com/blog/20...
02 Octubre 2020

Soy Desarrollador Mercado Pago Certificado

Para Online Payments Checkout Pro. Esta semana participé del "Mercado Pago Developer Partner Program" y luego de realizar el examen correspondiente fuí aprobado para ser "Mercado Pago Certified Developer for Online Payments ...