2016-12-03 24 views
0

を使用して透明度に垂直にフェードインします。透明な背景を持つ画像をフェードアウトしたいと思います。透明な背景を持つ画像をPython PILライブラリ

私はthis questionの不透明画像の解を見つけましたが、透明な背景の画像では機能しません。では、透明な背景を持つ画像を透明に垂直フェードさせるにはどうすればよいですか?

たとえば、old imageこの画像は透明な背景を持つnew imageになります。ここで

は、私は透明画像

bg = Image.new("RGBA", (width, height), (r,g,b,inputBgAlpha)) 
... 
bg.paste(deviceBg, devicePadding, mask=deviceBg) 

を作成するために使用されるコードで、次は私が試したものです。それは、透明ではなく色付きの背景になります。

# https://stackoverflow.com/a/19236775/2603230 
arr = numpy.array(bg) 
alpha = arr[:, :, 3] 
n = len(alpha) 
alpha[:] = numpy.interp(numpy.arange(n), [0, 0.55*n, 0.05*n, n], [255, 255, 0, 0])[:,numpy.newaxis] 
bg = Image.fromarray(arr, mode='RGBA') 

答えて

0

コードhereにほとんど変化はそれが動作することができます:)

from PIL import Image 

im = Image.open('bird.jpg') 
width, height = im.size 
pixels = im.load() 
for y in range(int(height*.55), int(height*.75)): 
    for x in range(width): 
     alpha = pixels[x, y][3]-int((y - height*.55)/height/.20 * 255) 
     if alpha <= 0: 
      alpha = 0 
     pixels[x, y] = pixels[x, y][:3] + (alpha,) 
for y in range(y, height): 
    for x in range(width): 
     pixels[x, y] = pixels[x, y][:3] + (0,) 
bg.save('birdfade.png') 
関連する問題