Script cambiar resolucion de fotos

Hace tiempo hice un script para comprimir fotos automáticamente poco tiempo despues RoyalTux lo mejoró
. Ya me ha pasado un par de veces que he hecho las fotos con mi cámara a la máxima resolución(6mp) y sólo quería las fotos a la mínima (1mp), ya que son fotos de los amigos y no me hace falta grandes resoluciones para verlas en el ordenador. Entonces lo que hacia era cambiar la resolución con el programa convert y la opción -resize. Pero había un pequeño problema, y es que las fotos estaban tomadas tanto en horizontal como en vertical, entonces la resolución de la foto cambia y el proceso de cambiar resoluciones se hacia un poco rollo.

Pues hoy que estaba un tanto aburrido me ha venido a la cabeza una idea. Todas las cámaras digitales añaden a las fotos que toman una información digital sobre cómo ha sido tomada la foto (exif) entre esa información se encuentra si la foto esta horizontal o vertical. Para poder leer esta información es necesario instalar el paquete exif (aptitude install exif).Bien al hacer un exif de una foto tomada con mi cámara:

darkomen@carax:~/fotos$ exif P1070094.JPG
EXIF tags in ‘P1070094.JPG’ (‘Intel’ byte order):
——————–+———————————————————-
Tag |Value
——————–+———————————————————-
Fabricante |Panasonic
Modelo |DMC-FX01
|arriba – izquierda
|72,00
|72,00
|Pulgada
Software |Ver.1.0
Fecha y hora |2007:08:18 02:14:53
Posicionamiento YCbC|co-situado
Desconocido |
|
|arriba – izquierda
|72,00
|72,00
|Pulgada
Posicionamiento YCbC|co-situado
|1/30 seg.
|f/2,8
ExposureProgram |Programa normal
Velocidad ISO |100
|
Fecha y Hora (origin|2007:08:18 02:14:53
Fecha y Hora (digita|2007:08:18 02:14:53
ComponentsConfigurat|Y Cb Cr –
Bits comprimidos por|4,00
|0,0
MaxApertureValue |3,00
|
Fuente de luz |4
Flash |89
Distancia focal |4,6 mm
Nota del fabricante |5978 bytes de datos desconocidos
FlashPixVersion |FlashPix Version 1.0
Espacio de color |sRVA
PixelXDimension |1280
PixelYDimension |960
|
Fuente de archivo |DSC
Tipo de escena |
Render personalizado|Proceso normal
|
Balance de blanco |
|0,00
Distancia focal en p|28
Tipo de captura de e|
Control de ganancia |Normal
Contraste |Normal
|
Nitidez |Duro
InteroperabilityInde|R98
InteroperabilityVers|
——————–+———————————————————-
EXIF data contains a thumbnail (6653 bytes).

Bien si os fijais en la tercera línea pone ‘|arriba – izquierda’ eso quiere decir que se ha tomado en horizontal si vemos otra vertical, en esa misma línea pone ‘|izquierda – abajo’. Al menos así es en mi cámara. Una vez que sabemos esto y con ayuda de grep, filtraremos esa información. En este caso me ha resultado mas sencillo hacer un filtro de ‘|arriba – izquierda’, ver cuantas veces se repite en exif, si se repite más de una vez, es que está tomada en horizontal, si por el contrario no se repite es vertical, para muestra un botón:

for i in `ls *.JPG `;do #Hacemos un for con todas las fotos del directorio
VALOR=$(exif $i |grep -c arriba) #Hacemos el grep de ‘arriba’ de la información exif de la foto
if [ $VALOR != 0 ] #si el valor es distinto de 0
then
convert -resize 1250×980 $i $i; #la foto es horizontal y ponemos resolución horizontal
else
convert -resize 980×1250 $i $i; #la foto es vertical y ponemos resolución vertical
fi
echo «$i cambiada la resolución» #nos muestra información sobre qué foto se ha cambiado
done

y con eso automáticamente cambiará la resolución de todas las fotos, el tamaño es el que se indique en el script para mi caso ese es el correcto, lo podría haber hecho personalizable.. pero ya no sería tan automático. 😀

El último paso es copiar el fichero a ‘/urb/bin’ para que el script pueda estar disponible desde cualquier carpeta del pc

Script cambiar resolucion de fotos

6 comentarios en “Script cambiar resolucion de fotos

  1. Umm ¿ese script te pisotea las fotos originales?
    convert -resize 1250×980 $i $i;
    Origen y destino el mismo archivo? …

    Bueno, sea lo que sea, podemos terminar de mejorar ese script copiando la info exif de la foto original a la foto redimensionada.
    Para ellos nos vamos a esta pagina y nos descargamos ExifTool, un tgz con un ejecutable que nos permite hacer muchas cosas ^^

    Para copiar la informacion de una imagen a otra basta con hacer

    exiftool -TagsFromFile a.crw a.jpg

    Con a.crw = origen, a.jpg = destino.

    Al menos eso utilizo yo para copiar la EXIF a las imagenes que redimensiono.

    Un saludo!!!

  2. maria dijo:

    quiero saber si alguien me contesta, si la informacion sobre imagen en un jpg se puede modificar, es decir, yo abro una foto en HP image zone, y veo todos los detalles de ella, puedo modificar la fecha y hora de creación???
    mi mail es l-apopa@hotmail.com, contestar ahi si se puede, muchas muchas gracias..

Deja un comentario