Pillowを使用して画像を透過して一部だけ重ねる


はじめに

業務で画像を一部だけ重ねる必要があり、方法を調べたのでメモとして残しておきます。

最初はopencvを使用して、重ねる予定でしたが、調べているうちにPillowを使用したほうが楽そうだったのでそちらを使用する方法に切り替えました。

使用する画像は以下
 

画像を透過する

まずは、画像を透過する。
これは検索すれば結構出てくるのですぐにできると思います。

実装は以下。

from PIL import Image

im1 = Image.open("test1.png")
im2 = Image.open("test2.png")

im1.putalpha(128)
im2.putalpha(128)

やっていることは、

  1. Image.open("ファイル名")で画像を読み込む
  2. putalpha(alpha)で透過している

画像を重ねる

次に透過した画像を重ねる。
重ねるときに1枚もとになる画像を作成して、それに透過した画像を張り付ける感じで重ねます。

実装は以下。


bg = Image.new("RGBA", (1000, 1000), (255, 255, 255, 0))

bg.paste(im1, (200, 200), im1)
bg.paste(im2, (400, 400), im2)

bg.save("join.png")

やっていることは、
1. Image.new()で画像を重ねるためのべーずになる画像を作成します。
2. paste()でベースの画像に透過した画像を重ねます。
3. save()で画像を保存します。

保存された画像が以下。

いい感じに透過された画像が重ねっているのが分かりますね!