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

Python PIL 0.5不透明度、透明度、alpha,python,transparency,python-imaging-library,opacity,alpha,Python,Transparency,Python Imaging Library,Opacity,Alpha,有没有办法使图像半透明 伪代码如下所示: from PIL import Image image = Image.open('image.png') image = alpha(image, 0.5) from PIL import Image img = Image.open(image) img.putalpha(127) # Half alpha; alpha argument must be an int img.save(dest) 我在谷歌上搜索了几个小时,但找不到任何有用的东

有没有办法使图像半透明

伪代码如下所示:

from PIL import Image
image = Image.open('image.png')
image = alpha(image, 0.5)
from PIL import Image
img = Image.open(image)
img.putalpha(127)  # Half alpha; alpha argument must be an int
img.save(dest)

我在谷歌上搜索了几个小时,但找不到任何有用的东西

你能这样做吗

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
绝对不是最有效的做事方式,但它可能会奏效。我在浏览器中编写了代码,所以它可能不是无错误的,但希望它能给您一个想法


编辑:刚刚注意到这个问题有多老了。将答案留给以后的帮助。:)

我把山核桃的答案和cr333从这个问题中提出的问题放在一起:

。。。我想到了这个:

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")

我只是自己做的…虽然我的代码可能有点奇怪…但它工作得很好。所以我在这里分享。希望它能帮助任何人

想法是:透明的pic意味着更低的alpha,这是元组中的第四个元素

我的帧代码:

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

我意识到这个问题确实很老了,但在当前版本的枕头(v4.2.1)中,有一个函数名为
putalpha
。这对我来说似乎很管用。我不知道它是否适用于所有需要更改alpha的情况,但它确实有效。它为图像中的每个像素设置alpha值。不过,似乎可以使用掩码:

像这样使用
putalpha

from PIL import Image
image = Image.open('image.png')
image = alpha(image, 0.5)
from PIL import Image
img = Image.open(image)
img.putalpha(127)  # Half alpha; alpha argument must be an int
img.save(dest)

答案必须使用PIL吗?我不相信有任何方法可以通过特定模块实现这一点。帮助中的
是否减少了不透明度()