
Il modulo immagine della Pillow Image Processing Library (PIL) di Python fornisce putalpha() per aggiungere un canale alfa a un’immagine.
In questo articolo vengono descritti i seguenti contenuti.
- Vieni a usare Image.putalpha()
- Imposta una trasparenza uniforme su tutta la superficie
- Crea un canale alfa con ImageDraw
- Usa l’immagine esistente come canale alfa
Vedere il seguente articolo per l’installazione e l’uso di base di Pillow (PIL).
Importa l’immagine PIL e carica l’immagine originale.
ImageDraw e ImageFilter vengono utilizzati per disegnare forme e creare canali alfa. Possono essere saltati se il file immagine viene letto e utilizzato come canale alfa.
from PIL import Image, ImageDraw, ImageFilter
im_rgb = Image.open('data/src/lena.jpg')
Vieni a usare Image.putalpha()
Il parametro per putalpha() è solo alpha. Poiché lo strato del canale alfa viene posizionato sull’immagine originale.
Se la modalità dell’immagine originale è RGB (8 bit x 3: a colori) o L (8 bit x 1: bianco e nero), aggiunto viene di nuovo un canale alfa e, se è RGBA o LA, il canale viene aggiornato . alfa originale.
Specificato da una costante
Quando un valore intero a 8 bit (da 0 a 255) è impostato su alfa, la trasmittanza in base al valore viene impostato sull’intera superficie.
0 significa 100% di trasparenza, 255 significa 0% di trasparenza (nessuna trasparenza).
Specificato dall’oggetto immagine
Se imposti un oggetto Immagine della stessa dimensione dell’immagine originale in mode=”L” (scala di grigi a 8 bit) su alfa, puoi impostare il canale alfa in diversi modi.
Come nel caso costante, 0 significa 100% di trasparenza, 255 significa 0% di trasparenza (nessuna trasparenza).
Imposta una trasparenza uniforme su tutta la superficie
Se si imposta un valore intero su alfa, la trasparenza in base al valore verrà impostata sull’intera superficie.
Nota che putalpha() scrive l’immagine originale, quindi se vuoi mantenere l’immagine originale così com’è, usa quella che hai copiato con copy().
im_rgba = im_rgb.copy()
im_rgba.putalpha(128)
im_rgba.save('data/dst/pillow_putalpha_solid.png')
In questo esempio, alpha=128 fornisce circa il 50% di trasparenza (128/255 ~ 50%).
Crea un canale alfa con ImageDraw
Se vuoi aggiungere un canale alfa con una forma semplice, come un cerchio o un rettangolo, è utile disegnare nel modulo ImageDraw. Per ulteriori informazioni sul disegno, vedere il seguente articolo. Puoi anche disegnare poligoni.
Disegna un cerchio bianco su sfondo nero e impostalo sul canale alfa.
im_a = Image.new("L", im_rgb.size, 0)
draw = ImageDraw.Draw(im_a)
draw.ellipse((140, 50, 260, 170), fill=255)
im_rgba = im_rgb.copy()
im_rgba.putalpha(im_a)
im_rgba_crop = im_rgba.crop((140, 50, 260, 170))
im_rgba_crop.save('data/dst/pillow_putalpha_circle.png')
È possibile utilizzare ImageFilter per smussare i contorni.
im_a_blur = im_a.filter(ImageFilter.GaussianBlur(4))
im_rgba = im_rgb.copy()
im_rgba.putalpha(im_a_blur)
im_rgba_crop = im_rgba.crop((135, 45, 265, 175))
im_rgba_crop.save('data/dst/pillow_putalpha_circle_blur.png')
In ogni esempio, l’esterno del cerchio viene ritagliato in un rettangolo con crop(). Vedere il seguente articolo per raccolto().
Usa l’immagine esistente come canale alfa
Puoi caricare un’immagine esistente e impostarla come canale alfa.
Prova a utilizzare un’immagine di cavallo in bianco e nero (esempio di immagine scikit: skimage.data.horse() ).
In questo esempio, per creare l’immagine a forma di cavallo, utilizzare un’immagine con un cavallo bianco e uno sfondo nero (un’immagine invertita).
Una volta che open() legge l’immagine, viene ridotta sull’immagine incollata da resize() e la modalità viene convertita in ‘L’ (scala di grigi) da convert().
im_a = Image.open('data/src/horse_r.png').convert('L').resize(im_rgb.size)
im_rgba = im_rgb.copy()
im_rgba.putalpha(im_a)
im_rgba.save('data/dst/pillow_putalpha_horse.png')