Manipular la calidad de fotografías con Python

  
9 de Enero de 2015   0  

Actualmente el creciente uso de cámaras profesionales y el fácil acceso a su compra ha producido que las personas utilicen de manera cotidiana este gadget que contiene una calidad de imagen mucho mejor que la de los móviles, sin embargo esta calidad de imagen tiene un costo: El tamaño en MB.

 

Estoy seguro que la mayoría de los usuarios que gustan de tomar fotografía tienen el objetivo de “trepar” alguna a Facebook, este acto tan sencillo implica tal vez un dolor de cabeza si tenemos en cuenta que cada fotografía pesa más o menos 4mb (Dependiendo de los ajustes de la cámara), si quisiéramos agilizar el proceso tendríamos que hacer la tarea de comprimir o disminuir la calidad de imagen de las fotografías que quisiéramos trepar mediante programas editores de fotografías y por lo general se realiza por cada foto, supongo que a muchos se nos vendrá la pregunta ¿Cómo podríamos automatizar este proceso sencillo pero aburrido? La respuesta está en realizar un simple script de  python con ayuda de una librería con PIL.

PIL no sólo permite disminuir la calidad de imagen para reducir el tamaño de las fotografías, sino que tiene un sinfín de características de manejo y manipulación de imágenes que encontrarás aquí, sin embargo en este momento nos interesa disminuir el tamaño de megas de nuestras fotos navideñas para subir al “face”.

PIL nos permite tomar una foto de nuestra computadora mediante código y manipular la calidad afectando directamente el tamaño de nuestro archivo, ¿interesante?,  pues lo más interesante de todo es que solamente necesitamos un script de 24 líneas de código para automatizar esta tarea.

Este código siguiente lo he realizado en no más de una hora y el uso que le doy es casi de todos los días.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import sys , os, glob
from PIL import Image
cont =0
 
### Configuracion
diri = "C:\\Users\\JoseGaspar\\Pictures\\fotosNavidad\\ejemplo\\" #directorio donde tendremos nuestras imagenes
qualityimg = 80 #calidad de salida de las imagenes
### termina configuracion
print "comprimiendo..."
for img in glob.glob(diri+'*.jpg'+ glob.glob(diri+'*.png')+glob.glob(diri+'*.gif'):
    try:
        namefile =os.path.basename(img)
        splitname =  os.path.splitext(namefile)
        namefile = splitname[0]
        extens = splitname[1]
        = Image.open(img)
        i.save(diri+"compress_"+namefile+extens,quality=qualityimg)
    except ValueError:
        print ValueError
        cont=cont +1
if cont >0:
    print "Algunos archivos no se puedieron comprimir"
else:
    print "todos los ficheros fueron comprimidos con exito"

En el código anterior podemos visualizar que tenemos una sección de configuración en donde solamente  tenemos que modificar dos parámetros para personalizar nuestras salidas.

1
2
3
4
5
6
7
8
</pre>
### Configuracion
 
diri = "C:\\Users\\JoseGaspar\\Pictures\\fotosNavidad\\ejemplo\\" #directorio donde tendremos nuestras imagenes
 
qualityimg = 80 #calidad de salida de las imagenes
 
### termina configuracion

En la variable diri seleccionaremos nuestra ruta donde están ubicadas las fotografías que quisiéramos convertir y en la variable qualityimg configuramos la calidad que quisiéramos obtener, en el ejemplo utilizamos el valor de 80 ya que con este valor la diferencia de calidad de imágenes entre la original y la nueva es casi nula visualmente y reduce de 4MB a 1MB comprobado.

Este proceso de reducción de calidad la realiza la siguiente línea:

1
2
= Image.open(img)
i.save(diri+"compress_"+namefile+extens,quality=qualityimg)

 

la primera linea nos permite obtener una imagen de una ruta en específico y la segunda nos permite guardarla modificando su nombre y su calidad con el parámetro quality.

¿Sencillo?, ahora con este pequeño script podrás seguir utilizando tu cámara profesional sin tanto remordimiento ya que tenemos automatizado el proceso de reducción de calidad para trepar las imágenes a cualquier red social en donde no se requiera tanta calidad de imagen.



Gaspar Dzul

Desarrollador Front End y Móvil.

Temas relacionados