2010年9月2日木曜日

PILを用いた画像の重ね合わせ

Python Image Libraryを使って、少し画像処理をしてみた。
透過画像(png)を読み込んで、透過部分を維持したまま、重ね合わせる。

まずはimport
>>> import Image

画像を開く
>>> img1 = Image.open("../test.png")

重ね合わせる画像(透過png)を用意する。
※ここではimg1を180度回転させただけのもの。
>>> img2 = img1.rotate(180)

alpha値情報を用いた状態に変換しておく
>>> img3 = img2.convert("RGBA")

重ね合わせ。paste(Image型の重ねる画像, img1のどの位置に左上を合わせるか, マスク)
マスクはまだよく分かっていないけど、img3を同じく指定しておけば問題ない
>>> img1.paste(img3, (0,0), img3)

保存
>>> img1.save("../test_new.png", 'PNG')

以下、ビフォーアフター。

元画像


処理後

1 件のコメント:

casablanca さんのコメント...

教えてください。下記のようなエラーの対処方法は?
>>> from PIL import Image
>>> import Image
>>> background =Image.open('C:/Imaging-1.1.7/Images/lena.jpg')
>>> surface = Image.open('C:/Imaging-1.1.7/Images/himawari.png')
>>> surface = surface.resize((128, 128))
>>> surface_mask = surface.split()
>>> background.paste(surface, (0, 0, 128, 128), mask=surface_mask)
Traceback (most recent call last):
File "", line 1, in
File "C:\Users\mtg-1\Anaconda2\lib\site-packages\PIL\Image.py", line 1102, in paste
mask.load()
AttributeError: 'tuple' object has no attribute 'load'