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


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)

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)

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)

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)

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)

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)


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

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)

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.
