Tratamiento de imágenes desde consola

¡Hola! Inauguramos el blog con algo que hace unos días me resultó bastante útil, se trata de un script para la consola de Linux /bin/bash, que modifica el tamaño y calidad de las imágenes.

El script está basado en un paquete de utilidades para imágenes llamado ‘imagemagick’, podéis encontrar su web AQUÍ.

Para instalarlo en nuesto sistema, simplemente vamos a la consola y…
sudo apt-get install imagemagick

Bien, ahora vamos con el script, por una parte, la sintaxis sería (situándonos en el directorio del archivo):
./redimensionar.sh [ruta] [calidad] [tamXhorizontales] [tamXverticales]

Aclaraciones:

Hay que dar permisos de ejecución al archivo con chmod +x redimensionar.sh
./ es la dirección del directorio en el que nos encontramos
La ruta puede ser absoluta o relativa.
La calidad oscila entre 0-100 (el porcentaje), si queremos mantenerla, escribiremos 100 (%)
tamXhorizontales se refiere a la anchura que queremos ponerle a las imagenes que tienen un ancho mayor que el alto.
tamYhorizontales se refiere a la anchura que queremos ponerle a las imagenes que tienen un ancho menor que el alto.

El código:

#!/bin/bash
#primero nos movemos a la ruta introducida (primer parametro)
cd $1
#cuento el número de archivos del directorio, también podríamos hacerlo con 'ls'
tam=`find -type f | wc -l`
#inserto los nombres de los archivos en un vector (tam_vector=$tam)
vector=(`find -type f`)
#creo el directorio donde guardar las imágenes modificadas (dentro de la carpeta dada por parametro)
mkdir modificadas
for i in {0..$tam}
do
      ruta=`echo ${vector[$i]} | cut -c 3-` #guardo en ruta el nombre del archivo
      ancho=`identify $ruta | cut -c 19-22` #guardo el ancho
      alto=`identify $ruta | cut -c 24-27` #guardo el alto
      if ((ancho > alto))
      then
            new_alto=$(($3*$alto/$ancho))  #calculo el alto a partir de la relación del tamaño
            convert -quality $2 -resize $3x$new_alto $ruta modificadas/$ruta    #convierto el archivo
            if(($?!=0))    #con este if compruebo si el comando se realizó correctamente
            then
                 echo "No se pudo modificar el archivo " $ruta
            fi
       fi
       if((alto > ancho))
       then
             new_alto=$(($4*$alto/$ancho))
             convert -quality $2 -resize $4x$new_alto $ruta modificadas/$ruta
             if(($?!=0))
             then
                  echo "No se pudo modificar el archivo " $ruta
             fi
        fi
done

– ‘identify’ devuelve una cadena con información sobre el archivo, incluido el tamaño.
– ‘convert’ convierte un archivo de origen en uno de destino con los parámetros dados, podeis encontrar información sobre la sintaxis en la página de imagemagick.

Si detectáis algún error en el código dejad un comentario y lo arreglaré lo más pronto posible.

Aclaración: Este script no es totalmente genérico, ya que para conseguir el ancho y alto de las imagenes lo hago cortando un número fijo de caracteres de la salida del comando ‘identify’, que quiere decir esto, en mi caso todas las imagenes sobrepasaban el tamaño 1000×1000 así que extraigo 4 caracteres del ancho y 4 del alto, cosa que no serviría para tamaños menores, si queremos implementarlo totalmente genérico habria que tratar la cadena que devuelve identify, si es el caso de que lo necesitéis y no sepais como hacerlo, dejad un comentario 😉

HackSaludos

Anuncios

Acerca de Darkvidhck

Estudiante de ingeniería informática, haciendo mis pinitos como desarrollador web, programador, gamer y Linuxero. Aficionado a la seguridad. Eterno viciado al conocimiento.
Esta entrada fue publicada en Bash. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s