Skip to content

Einfügen eines anderen Bildes in ein Bild mit Python, Pillow

Python

Das Image-Modul der Bildverarbeitungsbibliothek Pillow (PIL) von Python stellt paste() zum Einfügen eines Bildes zur Verfügung

Informationen zur Installation und einfachen Verwendung von Pillow (PIL) finden Sie im following Artikel.

Dieser Artikel hat folgenden Inhalt.

  • Normale Paste
  • Geben Sie die einzufügende Position an
  • Maskenbild verwenden

Bild aus PIL importieren und das Basisbild (Hintergrundbild) und das einzufügende Bild öffnen.

Mit ImageDraw und ImageFilter wird das zuletzt beschriebene Maskenbild gesetzt. Sie können es weglassen, wenn Sie es einfach einfügen.

from PIL import Image, ImageDraw, ImageFilter

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

Basisbild
Bild zum Einfügen

Normale Paste

Rufen Sie die Methode paste() aus dem Hintergrundbild auf und legen Sie das Bild zum Einfügen fest.

Standardmäßig WIRD das Bild an der Position eingefügt, an der die obere linke Seite des eingefügten Bildes der Ursprung (oben links) des Basisbildes IST.

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

Kissenbild.paste-Ergebnis

paste() überschreibt das Basisbild selbst. Wenn Sie auch das Originalbild behalten möchten, verwenden Sie das kopierte Bild mit 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)

Geben Sie die einzufügende Position an

Die einzufügende Position wird durch ein Tupel (x-Koordinate oben links, y-Koordinate oben links) im zweiten Parameterfeld angegeben.

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

Pillow Image.paste-Ergebnissatzposition

Wenn sich das eingefügte Bild über den Bereich des Basisbilds hinaus erstreckt, WIRD der sich erstreckende Bereich ignoriert.

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

Pillow Image.paste-Ergebnissatzposition erweitern

Maskenbild verwenden

Wenn als dritte Parametermaske ein Maskenbild angegeben WIRD, kann das eingefügte Bild nicht nur in einem Rechteck, sondern in verschiedenen Formen ausgeschnitten und eingefügt werden.

Das Bild, das als Maskenbild used Werden can, hat dieselbe Größe wie das eingefügte Bild und sterben following drei Modustypen.

  • 1: 1-Bit-Bild (Binärbild)
  • L: 8-Bit-Graustufenbild
  • RGBA: Bild mit Alphakanal

Wenn das Maskenbild 8-Bit-Graustufen (Modus = „L“) ist, wird das Basisbild ausgegeben, wenn der Wert des Maskenbilds 0 (schwarz) ist, und das eingefügte Bild wird ausgegeben, wenn 255 (weiß) ist. Bei anderen Werten werden die beiden Bilder entsprechend dem Wert gemischt.

Zeichnen Sie mit dem ImageDraw-Modul einen weißen Kreis auf schwarzem Hintergrund, um ein Maskenbild zu erzeugen.

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)

Kissenbild.paste Maskenkreis

Sehen Sie sich den following Artikel zum Zeichnen mit Kissen an.

Die Einfügeverarbeitung WIRD unter Verwendung dieses Bildes als Maske durchgeführt. Sie können das eingefügte Bild zu einem Kreis maskieren.

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)

Pillow Image.paste Ergebnis kreisförmige Maske

Wenn das Maskenbild mit dem ImageFilter-Modul unscharf gemacht wird, können die Grenzen gemischt und eingefügt werden.

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)

Pillow Image.paste Maske unscharfer Kreis
Pillow Image.paste Ergebnis unscharfe Kreismaske

Sie sind nicht auf von ImageDraw gezeichnete geometrische Figuren beschränkt, sie können in jeder Form eingefügt werden, solange ein Maskenbild vorbereitet WIRD.

Erhalten Sie es mit einem schwarz-weißen Bild in Form eines Pferdes (scikit-image sample: skimage.data.horse() ).

Kissenbild.paste Maske Pferd

Nachdem das Bild von open() gelesen wurde, wird es von resize() an die Größe des eingefügten Bildes angepasst und der Modus von convert() auf ‚L‘ (Graustufen) konvertiert.

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)

Pillow Image.paste Ergebnis Pferdemaske

Obwohl es kein gutes Beispiel ist, ist es in einer komplizierten Form eingefügt. Wenn Sie Bilder wie Stern- oder Herzform vorbereiten, kann es in verschiedenen Situationen verwendet werden.

Wenn Sie das Schwarzweiß des Maskenbildes umkehren möchten, lesen Sie bitte den folgenden Artikel.