viernes, 28 de noviembre de 2008

Mi primer script en Python...

Hola, aunque ya hace mucho tiempo no posteaba algo fue por una buena razon. Estaba un poco ocupado en un gran viaje, estuve en Australia estudiando inglés y bueno... ya habra tiempo de charlar los detalles. El motivo de este post es algo técnico pero que tiene que ver con mi viaje. Resulta que a mi regreso tome un monton de fotografias y no me percate que el formato de la cámara estaba en alta calidad.

Como resultado tenia una carpeta con más de 570 fotos cada una de 3264x2448 pixeles pesando en promedio 4Mb para un total de más de 2Gb, un gran problema si queria subir estas fotos a la web. Modificar una a una las imagenes no era una opción. La solución lógica era que un script hiciera el trabajo sucio. Después de infructuosos intentos con convert y bash scripting, me decidí a hacer mis pinitos programando en Python...

Con unas cuantas busquedas en la red encontre la libreria Image y usando el método thumbnail este fue el resultado...


#! /usr/local/bin/python
import os, sys
import Image

size = 800, 600

for infile in os.listdir(sys.argv[1]):
outfile = sys.argv[2] + os.path.splitext(infile)[0] + "_resize.jpeg"
if infile != outfile and os.path.splitext(infile)[1] == '.JPG':
try:
im = Image.open(infile)
im.thumbnail((size)
im.save(outfile, "JPEG")
print "resizing ", infile, "to %dx%d... Ok\n" % size
except IOError:
print "cannot resize ", infile


como argumentos el script recibe la ruta del directorio que contiene las imagenes (sys.argv[1]) y la ruta donde se quiere guardar las nuevas imagenes (sys.argv[1]).

Si nuestro script se llama pyresize.py la llamada ...
and@and-laptop:~/Projects$ python2.5 pyresize.py . resizables/
redimensionaria a 800x600 todas las imagenes con extension .JPG de la carpeta actual (.) y las pondria en la carpeta resizables/

Como pueden ver la sintaxis de python es muy intuitiva y no seria dificil mejorar el script para que pida las nuevas dimensiones y el formato de las imagenes como argumentos de la línea de comandos... talvez otro día =).

Free software lives, Free software rules!!!