Skip to content

Incollare un’altra immagine in un’immagine con Python, Pillow

Python

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')

immagine di base
immagine da incollare

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)

Cuscino Image.paste risultato

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)

Posizione del set di risultati Pillow Image.paste

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)

Posizione del set di risultati Pillow Image.paste estesa

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)

Cuscino Image.paste maschera cerchio

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)

Cuscino Image.paste risultato maschera circolare

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)

Cuscino Image.paste maschera cerchio sfocato
Cuscino Image.paste risultato maschera cerchio sfocato

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() ).

Cuscino Image.paste maschera cavallo

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)

Cuscino Image.paste risultato maschera cavallo

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.