Python PIL-将半透明多边形添加到JPEG

Python PIL-将半透明多边形添加到JPEG,python,image,python-imaging-library,alpha-transparency,Python,Image,Python Imaging Library,Alpha Transparency,我试着用它来给图像添加一个半透明的多边形。问题是图像是JPEG格式的。我知道JPEG没有alpha通道,所以我希望有一种方法可以让PIL接收JPEG,将其转换为具有alpha通道的形式,添加半透明遮罩,然后将遮罩与图像合并,并将其转换回JPEG进行保存。PIL能做到这一点吗?如果没有,我还能怎么做呢?谢谢 那很容易。只需将jpeg粘贴到新的rgbaImage(): 这将为图像添加一个png(带透明度)。太棒了!我能问个问题吗?我刚刚使用了你的代码(没有logo),我发现如果我想将保存回(jpg将

我试着用它来给图像添加一个半透明的多边形。问题是图像是JPEG格式的。我知道JPEG没有alpha通道,所以我希望有一种方法可以让PIL接收JPEG,将其转换为具有alpha通道的形式,添加半透明遮罩,然后将遮罩与图像合并,并将其转换回JPEG进行保存。PIL能做到这一点吗?如果没有,我还能怎么做呢?谢谢

那很容易。只需将jpeg粘贴到新的rgba
Image()


这将为图像添加一个png(带透明度)。

太棒了!我能问个问题吗?我刚刚使用了你的代码(没有
logo
),我发现如果我想将
保存回
jpg
将调用一个错误),我必须使用
png
)。但是,
back
的大小比原始图像大5倍。我们有没有办法将
back
的大小最小化?@Yves无法重现您所描述的内容。当我将
back.show()
替换为
back.save('back.jpg','JPEG')
时,图像会按预期保存。也许你应该打开一个带有完整错误描述的新问题。(你可以添加一个以@tnt开头的注释,这样我会得到通知。)似乎是新的次要版本引入的一个新功能失败:在升级我的
pillow 4.1.1
4.2.1
之后,我也得到了异常(新版本答案中的解决方案)。
#!/usr/bin/env python3

from PIL import Image
from PIL import ImageDraw

im = Image.open("existing.jpg")
logo = Image.open("python-32.png")

back = Image.new('RGBA', im.size)
back.paste(im)
poly = Image.new('RGBA', (512,512))
pdraw = ImageDraw.Draw(poly)
pdraw.polygon([(128,128),(384,384),(128,384),(384,128)],
          fill=(255,255,255,127),outline=(255,255,255,255))

back.paste(poly, (0,0), mask=poly)
back.paste(logo, (im.size[0]-logo.size[0], im.size[1]-logo.size[1]), mask=logo)

back.show()