Skip to content

Coller une autre image dans une image avec Python, Pillow

Le module Image de la bibliothèque de traitement d’image Pillow (PIL) de Python fournit paste() pour coller une image

Veuillez vous référer à l’article suivant pour l’installation et l’utilisation de base de Pillow (PIL).

Cet article décrit le contenu suivant.

  • Pâte normale
  • Spécifiez la position à coller
  • Utiliser l’image du masque

Importez l’image à partir de PIL et ouvrez l’image de base (arrière-plan) et l’image à coller.

ImageDraw et ImageFilter sont utilisés pour définir l’image de masque décrite en dernier. Vous pouvez l’omettre si vous le collez simplement.

from PIL import Image, ImageDraw, ImageFilter

im1 = Image.open('data/src/rocket.jpg')
im2 = Image.open('data/src/lena.jpg')

image de base
image à coller

Pâte normale

Appelez la méthode paste() à partir de l’image d’arrière-plan et définissez l’image à coller.

Par défaut, l’image est collée à la position où le coin supérieur gauche de l’image collée est l’origine (supérieur gauche) de l’image de base.

im1.paste(im2)
im1.save('data/dst/rocket_pillow_paste.jpg', quality=95)

Oreiller Image.coller le résultat

paste() écrase l’image de base elle-même, donc si vous voulez conserver l’image d’origine, utilisez l’image copiée avec 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)

Spécifiez la position à coller

La position à coller est spécifiée par un tuple (coordonnée x en haut à gauche, coordonnée y en haut à gauche) dans la deuxième boîte de paramètre.

back_im = im1.copy()
back_im.paste(im2, (100, 50))
back_im.save('data/dst/rocket_pillow_paste_pos.jpg', quality=95)

Oreiller Image.coller la position de l'ensemble de résultats

Si l’image collée s’étend en dehors de la région de l’image de base, la zone qui s’étend est ignorée.

back_im = im1.copy()
back_im.paste(im2, (400, 100))
back_im.save('data/dst/rocket_pillow_paste_out.jpg', quality=95)

Oreiller Image.coller la position de l'ensemble de résultats étendre

Utiliser l’image du masque

Si une image de masque est spécifiée comme masque de troisième paramètre, l’image collée peut être découpée et collée non seulement dans un rectangle mais dans diverses formes.

L’image qui peut être utilisée comme image de masque a la même taille que l’image collée et les trois types de mode suivants.

  • 1 : image 1 bit (image binaire)
  • L : image en niveaux de gris 8 bits
  • RGBA : Image avec canal alpha

Lorsque l’image de masque est en niveaux de gris 8 bits (mode= »L »), l’image de base est émise lorsque la valeur de l’image de masque est 0 (noir) et l’image collée est émise lorsque 255 (blanc). Pour les autres valeurs, les deux images sont fusionnées en fonction de la valeur.

Dessinez un cercle blanc sur fond noir avec le module ImageDraw pour générer une image de masque.

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)

Oreiller Image.coller le cercle de masque

Voir l’article suivant pour dessiner avec Pillow.

Le traitement par collage est effectué en utilisant cette image comme masque. Vous pouvez masquer l’image collée dans un cercle.

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)

Oreiller Image.paste résultat masque circulaire

Lorsque l’image du masque est floue à l’aide du module ImageFilter, les limites peuvent être fusionnées et collées.

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)

Oreiller Image.paste masque cercle flou
Oreiller Image.paste résultat masque de cercle flou

Ne se limitant pas aux figures géométriques dessinées par ImageDraw, elles peuvent être collées sous n’importe quelle forme tant qu’une image de masque est préparée.

Essayez d’utiliser une image en forme de cheval en noir et blanc (exemple d’image scikit : skimage.data.horse() ).

Oreiller Image.paste masque cheval

Une fois l’image lue par open(), elle est ajustée à la taille de l’image collée par resize(), et le mode est converti en ‘L’ (niveaux de gris) par 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)

Oreiller Image.paste résultat masque de cheval

Bien que ce ne soit pas un bon exemple, il est collé dans une forme compliquée. Si vous préparez des images comme une étoile ou une forme de cœur, cela peut être utilisé dans diverses situations.

Si vous souhaitez inverser le noir et blanc de l’image du masque, veuillez vous référer à l’article suivant.