Python PIL 0.5不透明度,透明度,alpha

时间:2014-07-14 06:55:34

标签: python transparency python-imaging-library opacity alpha

有没有办法让图像半透明?

伪代码是这样的:

from PIL import Image
image = Image.open('image.png')
image = alpha(image, 0.5)

我用Google搜索了几个小时,但我找不到任何有用的东西。

4 个答案:

答案 0 :(得分:13)

我意识到这个问题真的很旧,但是对于当前版本的Pillow(v4.2.1),有一个名为putalpha的函数。它对我来说似乎很好。我不知道是否适用于你需要更改alpha的每种情况,但它确实有效。它为图像中的每个像素设置alpha值。看来,虽然你可以使用面具:http://www.leancrew.com/all-this/2013/11/transparency-with-pil/

像这样使用putalpha

from PIL import Image
img = Image.open(image)
img.putalpha(128)  # Half alpha; alpha argument must be an int
img.save(dest)

答案 1 :(得分:2)

你可以这样做吗?

from PIL import Image
image = Image.open('image.png') #open image
image = image.convert("RGBA")  #convert to RGBA
rgb = image.getpixel(x,y) #Get the rgba value at coordinates x,y
rgb[3] = int(rgb[3] / 2) or you could do rgb[3] = 50 maybe? #set alpha to half somehow
image.putpixel((x,y), rgb) #put back the modified reba values at same pixel coordinates

绝对不是最有效的做事方式,但它可能有效。我在浏览器中编写了代码,因此可能没有错误,但希望它可以给你一个想法。

编辑:刚刚注意到这个问题有多久了。无论如何都要留下未来的帮助。 :)

答案 2 :(得分:1)

我从这个问题中把Pecan的答案和cr333的问题放在一起:

Using PIL to make all white pixels transparent?

......想出了这个:

from PIL import Image

opacity_level = 170 # Opaque is 255, input between 0-255

img = Image.open('img1.png')
img = img.convert("RGBA")
datas = img.getdata()

newData = []
for item in datas:
    newData.append((0, 0, 0, opacity_level))
else:
    newData.append(item)

img.putdata(newData)
img.save("img2.png", "PNG")

在我的情况下,我有黑色背景的文字,只想要背景半透明,在这种情况下:

from PIL import Image

opacity_level = 170 # Opaque is 255, input between 0-255

img = Image.open('img1.png')
img = img.convert("RGBA")
datas = img.getdata()

newData = []
for item in datas:
    if item[0] == 0 and item[1] == 0 and item[2] == 0:
        newData.append((0, 0, 0, opacity_level))
    else:
        newData.append(item)

img.putdata(newData)
img.save("img2.png", "PNG")

答案 3 :(得分:0)

我自己就是这样做的......尽管我的代码可能有点奇怪......但它运行正常。所以我在这里分享。希望它可以帮助任何人。 =)

这个想法:透明图片意味着降低alpha,这是元组中的第4个元素。

我的框架代码:

from PIL import Image 
img=open(image)
img=img.convert('RGBA')  #you can make sure your pic is in the right mode by check img.mode
data=img.getdata()  #you'll get a list of tuples
newData=[]
for a in data:
    a=a[:3] #you'll get your tuple shorten to RGB
    a=a+(100,) #change the 100 to any transparency number you like between (0,255)
    newData.append(a)
img.putdata(newData) #you'll get your new img ready
img.save(filename.filetype)

我找不到自动完成这项工作的正确命令,所以我自己写这个。希望它能再次起作用。 XD