Rotar una colección de imágenes

May 7, 2007 at 14:37

Actualizado. Gracias a CP por el apunte.

Resulta que, aunque mi cámara de fotos detecta la orientación respecto al suelo cuando tomas la foto (es decir, que si la haces en vertical la guarda como foto tomada en vertical), no siempre funciona correctamente, ya que necesita un tiempo para “darse cuenta” de que la cámara está en vertical, por lo que muchas fotos tomadas “al vuelo” salen tumbadas al verlas en el ordendor, lo cual resulta un poco molesto.

Para solucionar esto, nada mejor que un script 😉 . Usando el espectantisloso convert, que forma parte del paquete de programas de línea de órdenes de ImageMagick (aquí los teneis todos) y el no menos estupendo jhead, ambos disponibles vía apt, yum, etc, he hecho dos pequeños scripts que permiten rotar todas las imágenes que le lleguen como parámetros, bien automáticamente modificando el EXIF (es decir, sin pérdida de caldiad) o bien en un determinado número de grados pedido con una bonita ventana de diálogo, siguiendo la dirección de las agujas del reloj (es decir, con posible pérdida de calidad debido a que es necesario recodificar la imagen). El segundo sirve para cuando falla el primero (a veces no detecta correctamente si la foto debe ser vertical o no), y los grados se piden con dicha ventana por unas sencilla razón: si colocamos ambos como scripts de Nautilus, el gestor de archivos de Gnome, podremos seleccionar el conjunto de imágenes a golpe de ratón, mucho menos horroroso que escribir los nombres de las fotos a mano en una terminal 🙂 .

El código de los scripts es el siguiente:

#!/bin/bash
# autorotate_image - Script that autorotates each image passed as parameter.
# needs - jhead

[[ -d rotated ]] || mkdir rotated
exit 0
while [ $# -gt 0 ]; do
    cp $1 rotated/
    jhead -autorot $1
    shift
done

#!/bin/bash
# rotate_image - Script that rotates each image passed as parameter in
#                a number of degrees (asked using a dialog). Intended to
#                be used as a nautilus script
# needs - gdialog and ImageMagick

degrees=`gdialog --title "Rotate images" --inputbox "Degrees (clock direction)" 200 450 2>&1` |
|
exit

[[ -d rotated ]] || mkdir rotated

while [ $# -gt 0 ]; do
    cp $1 rotated/
    convert -rotate $degrees $1 $1
    shift
done

Para invocarlo desde la terminal basta con hacer:

$ rotate_image foto1.jpg ... fotoN.png
$ autorotate_image foto1.jpg ... fotoN.png
Pero lo realmente interesante es copiarlos al directorio de scripts de Nautilus, como ya he comentado antes:

$ cp rotate_image autorotate_image ~/.gnome2/nautilus-scripts/
A partir de ese momento, podremos seleccionar tantas imágenes como queramos y pinchar con el botón secundario del ratón para poder aplicar el script.

Descargar el script rotate_images

Descargar el script autorotate_images

Parecidos razonables