Ridimensionare immagini con Python e Pillow

Ridimensionare immagini con Python e Pillow

Per ridimensionare le immagini con Python, tutti consigliano l'uso di PIL / Pillow.

Pillow, in realtà, è un fork di PIL, e funziona bene anche con Python 3.

Oggi vediamo qualche esempio di utilizzo.

Prima di tutto installiamo la libreria:

$ sudo pip install pillow

Pillow ha parecchie funzioni e moduli interni, e noi andremo ad usare il modulo Image.

Sostanzialmente, per ridimensionare, abbiamo due funzioni:

  • resize -> ridimensiona impostando le dimensioni passate, senza considerare l'aspect ratio; inoltre lavora su una copia dell'immagine
  • thumbnail -> ridimensiona mantenendo l'aspect ratio, e lavora su una copia

Noi useremo la seconda.

Facendo diversi test, di questa funzione ho capito questo:

  • se W > H, ridimensiona partendo dalla larghezza, e proporziona l'altezza
  • se H > W fa l'operazione opposta

Questo avviene a prescindere dalle dimensioni passate.

Inoltre, entrambe le funzioni, non accettano dimensioni pari a zero.

Questo un esempio di codice:

import glob, os
from PIL import Image
 
class ResizeImage:
    def resize(self, dir, w, h):
        if os.path.isdir(dir):
            if w > h:
                h = w + 1
            elif h > w:
                w = h + 1
 
            size = (w, h)
            print(size)
            for infile in glob.glob(dir + "*.png"):
                try:
                    print(infile)
                    file, ext = os.path.splitext(infile)
                    im = Image.open(infile)
                    im.thumbnail(size, Image.ANTIALIAS)
                    im.save(file + "_R.png")
                except IOError as e:
                    print(e)
        else:
            print("La directory non esiste")

Prima controlliamo se la directory esiste.

Se esiste, prendiamo in automatico tutti i file con estensione indicata; per fare questo usiamo glob.

Poi iteriamo su tutti i files identificati da glob.glob, e su ogni immagine facciamo il resizing.

Con il metodo save, salviamo l'immagine ridimensionata.

Se a questo metodo non passiamo l'estensione di salvataggio, questa viene presa in automatico dal file.

Se esplorate la documentazione, vi renderete conto che Pillow può fare molto di più di questo!

Enjoy!