
Il modulo Image della libreria di elaborazione delle immagini Pillow (PIL) di Python fornisce paste() per incollare un’immagine
Fare riferimento al seguente articolo per l’installazione e l’utilizzo di base di Pillow (PIL).
In questo articolo vengono descritti i seguenti contenuti.
- Pasta normale
- Specifica la posizione da incollare
- Usa immagine maschera
Importa immagine da PIL e aprile l’immagine di base (di sfondo) e l’immagine da incollare.
ImageDraw e ImageFilter vengono utilizzati per impostare l’immagine della maschera definita per ultima. Puoi ometterlo se lo incolli semplicemente.
from PIL import Image, ImageDraw, ImageFilter
im1 = Image.open('data/src/rocket.jpg')
im2 = Image.open('data/src/lena.jpg')


Pasta normale
Chiama il metodo paste() dall’immagine di sfondo e imposta l’immagine da incollare.
Per definizione predefinita, l’immagine viene incollata nella posizione in cui la parte superiore sinistra dell’immagine incollata è l’origine (in alto a sinistra) dell’immagine di base.
im1.paste(im2)
im1.save('data/dst/rocket_pillow_paste.jpg', quality=95)

paste() sovrascrive l’immagine di base stessa, quindi se vuoi mantenere l’immagine originale, usa l’immagine copiata con copy().
im1 = Image.open('data/src/rocket.jpg')
im2 = Image.open('data/src/lena.jpg')
back_im = im1.copy()
back_im.paste(im2)
back_im.save('data/dst/rocket_pillow_paste.jpg', quality=95)
Specifica la posizione da incollare
La posizione da incollare è specificata da una tupla (coordinata x in alto a sinistra, coordinata y in alto a sinistra) nella seconda casella del parametro.
back_im = im1.copy()
back_im.paste(im2, (100, 50))
back_im.save('data/dst/rocket_pillow_paste_pos.jpg', quality=95)

Se l’immagine incollata si estende al di fuori dell’area dell’immagine di base, l’area che si estende viene ignorata.
back_im = im1.copy()
back_im.paste(im2, (400, 100))
back_im.save('data/dst/rocket_pillow_paste_out.jpg', quality=95)

Usa immagine maschera
Se maschera viene specificata come terzo parametro maschera, l’immagine incollata può essere ritagliata e incollata non solo in un rettangolo ma in varie forme.
L’immagine che può essere utilizzata come immagine maschera ha le stesse dimensioni dell’immagine incollata ei seguenti tre tipi di modalità.
- Immagine 1: 1 bit (immagine binaria)
- L: immagine in scala di grigi a 8 bit
- RGBA: immagine con canale alfa
Quando l’immagine della maschera è in scala di grigi a 8 bit (mode=”L”), l’immagine di base viene emessa quando il valore dell’immagine della maschera è 0 (nero) e l’immagine incollata viene emessa quando 255 (bianco). Per altri valori, le due immagini vengono fuse in base al valore.
Disegna un cerchio bianco su sfondo nero con il modulo ImageDraw per generare un’immagine maschera.
mask_im = Image.new("L", im2.size, 0)
draw = ImageDraw.Draw(mask_im)
draw.ellipse((140, 50, 260, 170), fill=255)
mask_im.save('data/dst/mask_circle.jpg', quality=95)

Vedere il seguente articolo per disegnare con Pillow.
L’elaborazione della pasta viene eseguita utilizzando questa immagine come maschera. Puoi mascherare l’immagine incollata in un cerchio.
back_im = im1.copy()
back_im.paste(im2, (0, 0), mask_im)
back_im.save('data/dst/rocket_pillow_paste_mask_circle.jpg', quality=95)

Quando l’immagine della maschera è sfocata utilizzando il modulo ImageFilter, i contorni possono essere uniti e incollati.
mask_im_blur = mask_im.filter(ImageFilter.GaussianBlur(10))
mask_im_blur.save('data/dst/mask_circle_blur.jpg', quality=95)
back_im = im1.copy()
back_im.paste(im2, (0, 0), mask_im_blur)
back_im.save('data/dst/rocket_pillow_paste_mask_circle_blur.jpg', quality=95)


Non limitate alle figure geometriche disegnate da ImageDraw, possono essere incollate in qualsiasi forma purché venga preparata un’immagine maschera.
Prova a utilizzare un’immagine a forma di cavallo in bianco e nero (campione di immagine scikit: skimage.data.horse() ).

Dopo che l’immagine è stata letta da open(), viene adattata alla dimensione dell’immagine incollata da resize() e la modalità viene convertita in ‘L’ (scala di grigi) da convert().
mask_im = Image.open('data/src/horse.png').resize(im2.size).convert('L')
back_im = im1.copy()
back_im.paste(im2, (100, 50), mask_im)
back_im.save('data/dst/rocket_pillow_paste_mask_horse.jpg', quality=95)

sebbene non sia un buon esempio, è incollato in una forma complicata. Se prepari immagini come a forma di stella o di cuore, può essere utilizzato in varie situazioni.
Se si desidera invertire il bianco e nero dell’immagine della maschera, fare riferimento al seguente articolo.
