05 abril 2008

Script Para Redimensionar Imágenes Por Lotes

Para redimensionar muchas imágenes a la vez tengo una solución sencilla. El problema es que las fotos horizontales y las fotos verticales tienen un ancho diferente y no se pueden tratar de la misma manera. Se podría redimensionar por lotes las fotos verticales en una carpeta y las fotos horizontales en otra, pero he encontrado una solución global que lo hace todo de un tirón.
  • Para evitar fotos duplicadas usaremos una sola extensión. Pongamos jpg.
  • Cuando hacemos una foto, la cámara le pone un nombre que no significa nada para nosotros, así que se me ha ocurrido cambiar esos nombres por la fecha en que se hizo.
  • Como las fotos que tomamos con la cámara tienen demasiada resolución para las páginas web vamos a hacer copias a un tamaño menor. En mi caso 720 pixels de ancho es suficiente. La altura se calcula automáticamente quedando la foto escalada proporcionalmente.
  • Dependiendo de si la foto la tomamos horizontalmente o verticalmente el script que he escrito creará miniaturas con unas dimensiones o con otras. Si son verticales las miniaturas son de 240x135 pixels. Si son horizontales las miniaturas son de 180x240 pixels.

La manera de utilizarlo es copiarlo en un archivo que irá dentro de la carpeta que tenga las imágenes a redimensionar. Lo ejecutas desde la terminal y te hace el trabajo. Imagínate hacerlo con Gimp o Photoshop de una en una. Tardarías horas. Con este Script son unos minutos.

#!/bin/bash
# script creado por http://webyfoto.blogspot.com
# puedes usar o publicar este script libremente.
# solo pido que digas que lo has sacado de webyfoto.blogspot.com

# renombra JPG ajpg (puedes poner otra extension)
rename 's/\.JPG/.jpg/' *.JPG
# renombra ficheros segun su fecha
# jhead -autorot -nf%y%m%d%H%M%S *.jpg

jhead -autorot -nf%m%d%H%M *.jpg
for n in *.jpg; do convert -quality 70 -scale 720x $n 720x$n; done

# mueve los archivos creados al escritorio
for n in 720*.jpg; do mv $n ~/Escritorio/; done

for IMAGE in *.jpg
do
WIDTH=$(identify -format %w $IMAGE)
HEIGHT=$(identify -format %h $IMAGE)

# Resultado da 0 si es cierto y 1 si es mentira
let "WIDTH>HEIGHT"; let Resultado=$?
if [[ "$Resultado" -ne "1" ]]
then convert -size 300x300 $IMAGE -thumbnail 240x -gravity center -crop 240x135+0+0 +repage 240x$IMAGE; echo "horizontal: $IMAGE $WIDTH x $HEIGHT"
else convert -size 300x300 $IMAGE -thumbnail x240 -gravity center -crop 180x240+0+0 +repage 180x$IMAGE; echo "vertical: $IMAGE $WIDTH x $HEIGHT"
fi
Podeis votar esta noticia marcando la V

Enlaces relacionados:

No hay comentarios:

Publicar un comentario