Image Resize Script - Python

Python script para bajarle la resolución a un grupo de imágenes en un directorio manteniendo la misma proporción y también creando un archivo comprimido de las mismas en caso de querer.

Es algo muy básico, puede mejorarse aún mucho más pero al menos tiene lo que se necesita en estos casos. Quizás luego trabajemos en nuevas versiones con más features y un GUI.

El enlace en GitHub: https://github.com/ganmedia/python-image-resizer

 USO:

Sólo debemos copiar el archivo .py en el mismo directorio de las imágenes en alta resolución y correrlo desde este directorio.

Una vez hecho esto el script nos pide que introduzcamos el tamaño que queremos darle a las nuevas imágenes y las redimensiona respetando este size tanto para las horizontales como para las verticales.

Se crea un subdirectorio llamado /peq y dentro se salvan las nuevas imágenes.

El script también nos pregunta si deseamos comprimir las fotos nuevas y si es así crea un archivo comprimido con las mismas dentro de /peq

import PIL  # MODULO PARA PROCESAR IMAGENES
from PIL import Image
import os  # MODULO PARA HACER COSAS EN EL DIRECTORIO
import fnmatch  # MODULO PARA COMPARAR EXTENSIONES EN EL DIRECTORIO
import tarfile # MODULO PARA COMPRIMIR

current_dir = os.path.dirname(os.path.abspath(__file__)) # LEEMOS EL DIRECTORIO EN EL QUE ESTAMOS 
lista_archivos = fnmatch.filter(os.listdir(current_dir), '*') # CREAMOS UNA LISTA CON TODOS LOS ARCHIVOS DENTRO DEL DIRECTORIO
lista_archivos_nopy = lista_archivos[:] # CLONAMOS LA LISTA ORIGINAL PARA ITERAR SOBRE ELLA
no_py = ".py" # EXPECIFICAMOS NO INCLUIR LOS ARCHIVOS CON LA EXTENSIÓN .PY

# LOOP PARA ELIMINAR LOS ELEMENTOS QUE NO SEAN .JPG DE LA LISTA
for i in lista_archivos:
	if  no_py in i:
		lista_archivos_nopy.remove(i)

os.mkdir("peq") # CREAMOS EL DIRECTORIO DONDE VAMOS A PONER LAS IMAGENES PEQUEÑAS
os.chmod(current_dir + "/peq", 0777) # LE DAMOS PERMISO DE ESCRITURA
tamano = input("Tamaño: ") # PREGUNTAMOS EL TAMAÑO PARA LAS NUEVAS FOTOS 
comprimir = raw_input("¿Desea comprimir las fotos? (si/no): ").lower()

# COMENZAMOS EL LOOP PARA REDIMENSIONAR LAS IMAGENES
for x in lista_archivos_nopy: 
	img = Image.open(x)  # ABRIMOS LA IMAGEN PARA TRABAJAR SOBRE ELLA
	width = img.size[0] # CHEQUEAMOS EL ANCHO
	heigh = img.size[1] # CHEQUEAMOS EL ALTO
	if width > heigh: # SI EL ANCHO ES MAYOR QUE EL ALTO (FOTO HORIZONTAL), LO TOMAMOS COMO REFERENCIA
		basewidth = tamano 
		wpercent = (basewidth / float(img.size[0]))
		hsize = int((float(img.size[1]) * float(wpercent)))
		img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS)
		img.save("peq/" + x)  # SALVAMOS LA IMAGEN EN EL DIRECTORIO
		print x + " ---> OK!"  # IMPRIMIMOS UN . PARA QUE EL USUARIO NO SE DESESPERE Y QUE VEA EL PROCESO

	else: # SI EL ALTO ES MAYOR QUE EL ANCHO (FOTO VERTICAL) LO TOMAMOS COMO REFERENCIA
		baseheight = tamano
		hpercent = (baseheight / float(img.size[1]))
		wsize = int((float(img.size[0]) * float(hpercent)))
		img = img.resize((wsize, baseheight), PIL.Image.ANTIALIAS)
		img.save("peq/" + x) # SALVAMOS LA IMAGEN EN EL DIRECTORIO
		print x + " ---> OK!" # IMPRIMIMOS UN . PARA QUE EL USUARIO NO SE DESESPERE Y QUE VEA EL PROCESO

print ""

# COMPRIMIMOS LAS IMAGENES
if comprimir == "si" or comprimir == "s":
	os.chdir(current_dir + "/peq") # CAMBIAMOS AL DIRECTORIO DONDE ESTAN LAS PEQUEÑAS
	lista_archivos_comprimir = fnmatch.filter(os.listdir(os.getcwd()), '*')
	tar = tarfile.open("images.tar.gz", "w:gz")
	for name in lista_archivos_comprimir:
		tar.add(name)
	tar.close()
	os.chmod("images.tar.gz", 0777)
	print "Fotos comprimidas"


print "FIN" 

Artículos Relacionados