1. Introduzione
Panoramica su Python e Pillow
Python è un linguaggio di programmazione ampiamente utilizzato da sviluppatori e data scientist grazie alla sua sintassi semplice e al supporto esteso delle librerie. Tra queste, Pillow (precedentemente PIL: Python Imaging Library) è una popolare libreria per l’elaborazione di immagini in Python.
Pillow supporta vari formati di immagine come JPEG, PNG e GIF, e consente un’ampia gamma di manipolazioni di immagini, tra cui ridimensionamento, ritaglio, filtraggio, aggiunta di testo e altro ancora. È comunemente utilizzato in applicazioni e progetti che richiedono caricamento, salvataggio ed editing di immagini.
Scopo di Questo Articolo
Questo articolo fornisce una guida completa sull’uso della libreria Pillow di Python per l’elaborazione di immagini, dalle operazioni di base alle tecniche avanzate. In particolare, copre compiti fondamentali come il caricamento e il salvataggio di immagini, il ridimensionamento, la rotazione, il filtraggio, il disegno di testo e la composizione di immagini.
Leggendo questo, acquisirete una comprensione approfondita su come utilizzare Pillow e otterrete le conoscenze e le competenze necessarie per applicarlo in progetti reali.
2. Come Installare Pillow
2.1 Installazione di Pillow nel Vostro Ambiente Python
Per utilizzare Pillow, è necessario installare la libreria nel vostro ambiente Python. Il processo di installazione è semplice: basta inserire il seguente comando nel terminale (o Prompt dei Comandi su Windows).
pip install Pillow
Il comando pip è uno strumento per la gestione dei pacchetti Python. Eseguendo questo comando, verrà installata automaticamente la libreria Pillow, consentendovi di eseguire compiti di elaborazione di immagini.
2.2 Come Verificare l’Installazione
Dopo aver installato Pillow, dovreste eseguire uno script semplice per verificare che funzioni correttamente. Scrivete ed eseguite il seguente codice in un file di script Python:
from PIL import Image
# Test code for verifying Pillow installation
img = Image.new('RGB', (100, 100), color = 'red')
img.save('test_image.png')
Questo codice crea un’immagine rossa di 100×100 pixel e la salva come “test_image.png”. Se il file immagine viene creato correttamente, Pillow è stato installato e funziona adeguatamente.
2.3 Problemi Comuni di Installazione e Soluzioni
Occasionalmente, potreste incontrare problemi durante l’installazione di Pillow. Di seguito sono elencati alcuni problemi comuni e le loro soluzioni:
- Utilizzo di una versione obsoleta di Python Pillow supporta Python 3.x e versioni successive. Se state utilizzando una versione più vecchia di Python, l’installazione potrebbe fallire. Utilizzate
python --versionper controllare la versione di Python e aggiornatela se necessario. - Problemi di dipendenze Durante l’installazione, potreste incontrare dipendenze mancanti. In tali casi, seguite il messaggio di errore per installare i pacchetti mancanti individualmente, o utilizzate il seguente comando per installare le dipendenze automaticamente:
pip install Pillow --upgrade
- Variabili d’ambiente errate Su Windows, Pillow potrebbe non funzionare correttamente se il percorso di Python o Pip non è impostato adeguatamente nelle variabili d’ambiente. Verificate che il percorso corretto sia configurato.

3. Caricamento e Visualizzazione di Immagini
3.1 Come Caricare un File Immagine in Python
Il caricamento di un’immagine è uno dei passaggi fondamentali nell’elaborazione di immagini con Pillow. Potete utilizzare il metodo Image.open() per aprire un file immagine.
Ecco un esempio di snippet di codice per caricare un’immagine:
from PIL import Image
# Load an image file
img = Image.open('sample.jpg')
# Display image information
print(img.format) # File format (e.g., JPEG, PNG)
print(img.size) # Size (width, height)
print(img.mode) # Color mode (e.g., RGB, L)
Questo codice utilizza Image.open() per aprire un file immagine e recuperare il suo formato, dimensione e modalità colore. Specificate semplicemente il percorso del file per caricare l’immagine.
3.2 Visualizzazione di un’Immagine
Dopo aver caricato un’immagine, potete visualizzarla utilizzando il metodo show(). Questo metodo apre l’immagine nel visualizzatore di sistema predefinito.
Guardate il seguente codice per visualizzare un’immagine:
from PIL import Image
# Load an image file
img = Image.open('sample.jpg')
# Display the image
img.show()
Questo codice visualizza l’immagine specificata utilizzando il visualizzatore di immagini predefinito del sistema, consentendoti di confermare visivamente il suo contenuto prima di procedere con ulteriori elaborazioni.
3.3 Recupero di informazioni dettagliate sull’immagine
Pillow ti permette di estrarre vari dettagli su un’immagine, come larghezza, altezza e formato del file.
Ecco come recuperare le informazioni sull’immagine:
from PIL import Image
# Load an image file
img = Image.open('sample.jpg')
# Display image details
print(f'Image Size: {img.size}') # (Width, Height)
print(f'File Format: {img.format}') # Image format (JPEG, PNG, etc.)
print(f'Color Mode: {img.mode}') # Color mode (RGB, L, etc.)
Questo aiuta a raccogliere informazioni essenziali su un’immagine, utili per ridimensionamento, ritaglio e altre manipolazioni.
3.4 Formati di immagine supportati in Pillow
Pillow supporta una varietà di formati di immagine, tra cui:
- JPEG
- PNG
- GIF
- BMP
- TIFF
Questo ampio supporto di formati rende Pillow una scelta flessibile per la gestione delle immagini in applicazioni web, elaborazione dati e altro.
4. Elaborazione di base delle immagini
4.1 Ridimensionamento di un’immagine
Il ridimensionamento è un’operazione comune di elaborazione delle immagini usata per adeguare la risoluzione per il web e le applicazioni. Con Pillow, puoi ridimensionare facilmente le immagini usando il metodo resize().
Ecco un esempio:
from PIL import Image
# Load an image
img = Image.open('sample.jpg')
# Resize the image (Width: 400px, Height: 300px)
resized_img = img.resize((400, 300))
# Save the resized image
resized_img.save('resized_sample.jpg')
Questo codice ridimensiona un’immagine a (400, 300) pixel e la salva come nuovo file.
4.2 Ritaglio di un’immagine
Il ritaglio è utile per estrarre una porzione specifica di un’immagine. Il metodo crop() di Pillow ti consente di specificare l’area da estrarre.
Ecco un esempio:
from PIL import Image
# Load an image
img = Image.open('sample.jpg')
# Crop the image (from top-left (100, 100) to bottom-right (300, 300))
cropped_img = img.crop((100, 100, 300, 300))
# Save the cropped image
cropped_img.save('cropped_sample.jpg')
Questo codice estrae una porzione dell’immagine e la salva separatamente.
4.3 Rotazione di un’immagine
Ruotare un’immagine è semplice con il metodo rotate() di Pillow. Puoi specificare l’angolo di rotazione e, se necessario, usare expand=True per evitare il ritaglio dell’immagine.
Ecco un esempio che ruota un’immagine di 45 gradi:
from PIL import Image
# Load an image
img = Image.open('sample.jpg')
# Rotate the image by 45 degrees (expanding to fit the entire image)
rotated_img = img.rotate(45, expand=True)
# Save the rotated image
rotated_img.save('rotated_sample.jpg')
Questo codice ruota l’immagine di 45 gradi garantendo che l’intera immagine rimanga visibile grazie all’uso di expand=True.
4.4 Flipping di un’immagine
Capovolgere un’immagine orizzontalmente o verticalmente può essere fatto facilmente usando il metodo transpose() di Pillow.
Ecco un esempio di flipping orizzontale di un’immagine:
from PIL import Image
# Load an image
img = Image.open('sample.jpg')
# Flip the image horizontally
flipped_img = img.transpose(Image.FLIP_LEFT_RIGHT)
# Save the flipped image
flipped_img.save('flipped_sample.jpg')
Questo codice capovolge l’immagine orizzontalmente, creando un’immagine speculare.
4.5 Altre funzionalità di elaborazione di base delle immagini in Pillow
Oltre al ridimensionamento, ritaglio, rotazione e flipping, Pillow supporta varie altre operazioni di elaborazione delle immagini, come la regolazione di luminosità, contrasto e modalità colore. Queste funzionalità consentono una modifica delle immagini più flessibile e automatizzata.

5. Conversione e salvataggio dei formati immagine
5.1 Conversione dei formati immagine
Pillow rende semplice la conversione dei formati immagine. Ad esempio, puoi convertire un’immagine JPEG in formato PNG con poche righe di codice.
Ecco come:
from PIL import Image
# Load a JPEG image
img = Image.open('sample.jpg')
# Save it as a PNG file
img.save('converted_image.png', 'PNG')
Questo codice carica un file JPEG e lo salva come PNG.
5.2 Come salvare le immagini
Quando si salvano immagini con Pillow, è possibile specificare varie opzioni, come la qualità, l’ottimizzazione e le impostazioni JPEG progressivi.
Ad esempio, salvare un’immagine JPEG con impostazioni ottimizzate:
from PIL import Image
# Load an image
img = Image.open('sample.jpg')
# Save as JPEG with quality and optimization settings
img.save('optimized_image.jpg', 'JPEG', quality=95, optimize=True)
Il parametro quality (0-100) regola la qualità dell’immagine, mentre optimize=True riduce la dimensione del file.
5.3 Salvataggio di JPEG progressivi
I JPEG progressivi consentono alle immagini di caricarsi a tappe, migliorando l’esperienza dell’utente su reti lente.
Ecco come salvare un’immagine come JPEG progressivo:
from PIL import Image
# Load an image
img = Image.open('sample.jpg')
# Save as a progressive JPEG
img.save('progressive_image.jpg', 'JPEG', quality=85, progressive=True)
Ciò garantisce che l’immagine appaia gradualmente quando viene caricata su una pagina web.
5.4 Conservazione dei dati EXIF
I dati EXIF (Exchangeable Image File Format) contengono metadati come le impostazioni della fotocamera e le informazioni GPS. Pillow consente di mantenere i dati EXIF durante il salvataggio delle immagini.
Ecco un esempio:
from PIL import Image
# Load an image
img = Image.open('sample.jpg')
# Retrieve EXIF data
exif_data = img.info.get('exif')
# Save the image with EXIF data
img.save('exif_image.jpg', 'JPEG', exif=exif_data)
Questo mantiene intatti i dati EXIF originali.
6. Applicazione di filtri ed effetti
6.1 Regolazione della luminosità e del contrasto
Pillow fornisce il modulo ImageEnhance per regolare luminosità e contrasto.
Ecco come regolare la luminosità:
from PIL import Image, ImageEnhance
# Load an image
img = Image.open('sample.jpg')
# Increase brightness by 1.5 times
enhancer = ImageEnhance.Brightness(img)
bright_img = enhancer.enhance(1.5)
# Save the modified image
bright_img.save('bright_sample.jpg')
Per regolare il contrasto:
from PIL import Image, ImageEnhance
# Load an image
img = Image.open('sample.jpg')
# Increase contrast by 2.0 times
enhancer = ImageEnhance.Contrast(img)
contrast_img = enhancer.enhance(2.0)
# Save the modified image
contrast_img.save('contrast_sample.jpg')
6.2 Applicazione di filtri sfocatura e nitidezza
È possibile utilizzare ImageFilter per applicare vari filtri.
Per sfocare un’immagine:
from PIL import Image, ImageFilter
# Load an image
img = Image.open('sample.jpg')
# Apply blur filter
blurred_img = img.filter(ImageFilter.BLUR)
# Save the blurred image
blurred_img.save('blurred_sample.jpg')
Per aumentare la nitidezza di un’immagine:
# Apply sharpen filter
sharpened_img = img.filter(ImageFilter.SHARPEN)
# Save the sharpened image
sharpened_img.save('sharpened_sample.jpg')
6.3 Utilizzo di filtri di rilevamento dei bordi
È possibile utilizzare filtri di rilevamento dei bordi per l’analisi delle immagini.
Ecco un esempio:
from PIL import Image, ImageFilter
# Load an image
img = Image.open('sample.jpg')
# Apply edge detection filter
edge_img = img.filter(ImageFilter.FIND_EDGES)
# Save the modified image
edge_img.save('edge_sample.jpg')
7. Disegno di testo e forme
7.1 Disegnare testo su un’immagine
È possibile aggiungere testo usando il modulo ImageDraw.
Disegno di testo di base:
from PIL import Image, ImageDraw, ImageFont
# Load an image
img = Image.open('sample.jpg')
# Create a drawing object
draw = ImageDraw.Draw(img)
# Draw text
draw.text((10, 10), 'Hello, Pillow!', fill=(255, 255, 255))
# Save the image
img.save('text_sample.jpg')
7.2 Disegnare forme
Pillow supporta anche il disegno di linee, rettangoli e cerchi.
Esempio:
from PIL import Image, ImageDraw
# Load an image
img = Image.open('sample.jpg')
# Create a drawing object
draw = ImageDraw.Draw(img)
# Draw a line
draw.line((0, 0, 100, 100), fill=(255, 0, 0), width=5)
# Draw a rectangle
draw.rectangle((50, 50, 150, 150), outline=(0, 255, 0), width=3)
# Draw a circle
draw.ellipse((200, 200, 300, 300), outline=(0, 0, 255), width=3)
# Save the image
img.save('shape_sample.jpg')
8. Conclusione
Questa guida ha coperto tecniche di elaborazione delle immagini fondamentali e avanzate usando Pillow, includendo il caricamento delle immagini, il ridimensionamento, il ritaglio, il filtraggio e il disegno di testo. Con queste conoscenze, puoi implementare vari compiti di manipolazione delle immagini in modo efficiente.
Pillow rimane uno strumento potente per lo sviluppo web, la scienza dei dati e l’automazione. Continua a esplorare le sue funzionalità per applicazioni più avanzate!



![[Guida completa alla funzione len() di Python] Spiegazione approfondita dalle basi all’ avanzato](https://www.python.digibeatrix.com/wp-content/uploads/2024/09/0685743292b3fb3cddaf24e8d3a3b7ae-375x375.webp)
![[Guida completa al costrutto with di Python] Semplificare la gestione delle risorse](https://www.python.digibeatrix.com/wp-content/uploads/2024/09/a899e1b4cda16b8a13042ca3ec2153b5-375x375.webp)