2012-05-17 20 views
9

私は正確に同じ大きさの2つの画像を持っています。私がしようとしているのは、1つを取り、50%透明にして、そう:Pythonで2つの同じサイズの画像をオーバーレイする

import Image 

background = Image.open("bg.png") 
overlay = Image.open("over.png") 

background = background.convert("RGBA") 
overlay = overlay.convert("RGBA") 

background_pixels = background.load() 
overlay_pixels = overlay.load() 

for y in xrange(overlay.size[1]): 
    for x in xrange(overlay.size[0]): 
     background_pixels[x,y] = (background_pixels[x,y][0], background_pixels[x,y][1], background_pixels[x,y][2], 255) 

for y in xrange(overlay.size[1]): 
    for x in xrange(overlay.size[0]): 
     overlay_pixels[x,y] = (overlay_pixels[x,y][0], overlay_pixels[x,y][1], overlay_pixels[x,y][2], 128) 

background.paste(overlay) 
background.save("new.png","PNG") 

しかし、私が得るすべては、50%の透明オーバーレイである(そうそこに半分の方法!)。

+1

透明度が0%になるようにバックグラウンドをループする必要はありません。 – jdborg

答えて

10

)(代わりにペーストのblend()を使用してみてください - それは(ペーストようです)ちょうどあなたがに貼り付けているもので、元の画像に置き換えられ

import Image 

background = Image.open("bg.png") 
overlay = Image.open("ol.jpg") 

background = background.convert("RGBA") 
overlay = overlay.convert("RGBA") 

new_img = Image.blend(background, overlay, 0.5) 
new_img.save("new.png","PNG") 
+0

'ファイル" ./overlay.py "、22行目、 geometry.blend(オーバーレイ) ファイル" /cfd/software/Python/272/lib/python2.7/site-packages/PIL/Image.py 」、__getattr__ レイズはAttributeError(名)でライン512、 はAttributeError:ブレンド ' – jdborg

+0

私は、最新の – jdborg

+0

をアップデートしてみてくださいよ!ありがとう。 – jdborg

0

オーバーレイアルファマスクパラメータを提供し、これは結果をもたらすかどうかを確認します。あなたが期待される:

background.paste(overlay, overlay.size, overlay) 
+1

2番目のパラメータは(0,0) –

3

たぶん、あまりにも古い質問を、opencv

cv2.addWeighted(img1, alpha, img2, beta, gamma) 
#setting alpha=1, beta=1, gamma=0 gives direct overlay of two images 
を使用して簡単に行うことができます

Documentation link

関連する問題