1. Caricamento e salvataggio delle immagini
Per caricare le immagini in Pillow si usa la classe Image. Dopo il caricamento, l'immagine può essere trasformata e salvata in diversi formati. Diamo un’occhiata alle operazioni base per il caricamento e il salvataggio delle immagini.
Caricamento di un'immagine
Per caricare un'immagine, usa il metodo Image.open(). Ti permette di aprire immagini in qualsiasi formato supportato.
from PIL import Image
# Apertura di un'immagine
image = Image.open("example.jpg")
# Stampa delle informazioni sul file
print(image.format) # Formato immagine, ad esempio JPEG o PNG
print(image.size) # Dimensioni immagine (larghezza, altezza)
print(image.mode) # Modalità colore, ad esempio RGB o Grayscale
Questo codice carica l'immagine example.jpg e mostra le sue caratteristiche principali: formato, dimensioni e modalità colore. Se l'immagine non si trova nella stessa cartella, specifica il percorso completo del file.
Salvataggio di un'immagine
Dopo aver caricato e modificato un'immagine, puoi salvarla in qualsiasi altro formato supportato, semplicemente specificando l'estensione desiderata nel nome del file. Il metodo save() consente di impostare il nome e il formato del file di output.
# Salvataggio dell'immagine in un altro formato
image.save("example.png") # Salva l'immagine come PNG
Puoi anche modificare la qualità dell'immagine salvata per ridurre la dimensione del file, particolarmente utile per immagini in formato JPEG.
# Salvataggio riducendo la qualità
image.save("compressed_example.jpg", quality=85) # Valore di quality varia da 1 a 95
2. Ridimensionamento delle immagini
Il ridimensionamento è uno dei compiti più comuni quando si lavora con le immagini. Pillow offre diversi modi per ridimensionarle, inclusa la modifica di larghezza e altezza specifiche, il ridimensionamento proporzionale e la creazione di miniature.
Ridimensionamento con il metodo resize()
Il metodo resize() consente di specificare le dimensioni esatte dell'immagine (larghezza e altezza), ma l'immagine può risultare distorta se le nuove dimensioni non mantengono le proporzioni originali.
# Impostazione di nuove dimensioni
new_size = (800, 600)
resized_image = image.resize(new_size)
# Salvataggio dell'immagine ridimensionata
resized_image.save("resized_example.jpg")
In questo esempio, l'immagine viene ridimensionata a 800x600 pixel e salvata in un nuovo file. Se l'immagine originale ha dimensioni diverse, verrà allungata o compressa per adattarsi alle nuove dimensioni.
Ridimensionamento proporzionale con il metodo thumbnail()
Per ridimensionare un'immagine mantenendo le proporzioni, usa il metodo thumbnail(). Questo metodo riduce automaticamente l'immagine per farla rientrare nelle dimensioni specificate, mantenendo le proporzioni originali. È particolarmente utile per creare miniature delle immagini.
# Creazione di una miniatura con dimensioni massime di 400x400 pixel
image.thumbnail((400, 400))
# Salvataggio della miniatura
image.save("thumbnail_example.jpg")
Il metodo thumbnail() modifica l'immagine "sul posto", il che significa che i cambiamenti avvengono nell'oggetto originale image. Dopo l'esecuzione di thumbnail(), Pillow riduce l'immagine in modo che le sue dimensioni non superino i 400x400 pixel, mantenendo le proporzioni.
Ridimensionamento con proporzioni tramite ImageOps.fit()
A volte è necessario ridimensionare un'immagine per adattarla esattamente a dimensioni specifiche, mantenendo le proporzioni e tagliando le parti in eccesso. In questi casi puoi usare il metodo ImageOps.fit().
from PIL import ImageOps
# Impostazione di nuove dimensioni
target_size = (400, 400)
fitted_image = ImageOps.fit(image, target_size, method=Image.LANCZOS)
# Salvataggio dell'immagine ritagliata
fitted_image.save("fitted_example.jpg")
Il metodo ImageOps.fit() taglia automaticamente l'immagine in modo che si adatti alle dimensioni specificate senza distorsioni. Ad esempio, se l'immagine originale è rettangolare, il metodo taglierà i bordi per renderla quadrata e conforme alle dimensioni 400x400 pixel.
3. Esempio di codice completo
Di seguito è riportato un esempio di codice che combina tutti i metodi discussi — dal caricamento al ridimensionamento e al salvataggio delle immagini.
from PIL import Image, ImageOps
# Apriamo un'immagine
image = Image.open("example.jpg")
# Ridimensionamento senza mantenere le proporzioni
resized_image = image.resize((800, 600))
resized_image.save("resized_example.jpg")
# Riduzione proporzionale
image.thumbnail((400, 400))
image.save("thumbnail_example.jpg")
# Ridimensionamento con ritaglio per adattarsi
fitted_image = ImageOps.fit(image, (400, 400), method=Image.LANCZOS)
fitted_image.save("fitted_example.jpg")
Spiegazione dei metodi di ridimensionamento
-
resize(): consente di specificare dimensioni arbitrarie, ma può distorcere l'immagine se le nuove dimensioni non corrispondono alle proporzioni dell'originale. -
thumbnail(): ridimensiona l'immagine mantenendo le proporzioni. Utile per creare miniature e ridurre immagini grandi. -
ImageOps.fit(): ridimensiona l'immagine alle dimensioni specificate tagliandone i bordi. Utile quando è importante che l'immagine rispetti esattamente le dimensioni desiderate, senza distorsioni.
4. Consigli:
Applicazioni pratiche del ridimensionamento immagini
- Ottimizzazione delle immagini per siti web: Immagini troppo grandi possono rallentare il caricamento della pagina, quindi è importante ottimizzarle riducendo le dimensioni senza perdere qualità.
- Creazione di miniature per gallerie: Usando
thumbnail()puoi creare rapidamente miniature da utilizzare come anteprime. - Adattamento delle immagini a dimensioni specifiche: Quando è necessario adattare un'immagine a dimensioni fisse, ad esempio per un avatar o un profilo, il metodo
ImageOps.fit()permette di tagliare e ridimensionare l'immagine per rispettare questi requisiti.
Consigli per la scelta dei metodi
Usa resize() quando hai bisogno di specificare esattamente larghezza e altezza dell'immagine e non ti importa se le proporzioni cambiano.
Usa thumbnail() per creare miniature o quando vuoi ridimensionare l'immagine mantenendo le proporzioni.
Usa ImageOps.fit() quando hai bisogno di un'immagine di dimensioni specifiche, senza distorcere le proporzioni. Questo metodo taglia le parti in eccesso, utile per adattare l'immagine alle cornici desiderate.
GO TO FULL VERSION