我正在尝试使用这种方法向图像添加半透明多边形,但问题在于该图像是JPEG格式。我知道JPEG没有alpha通道,所以我希望有一种方法可以让PIL接收JPEG格式,将其转换为具有alpha通道的形式,添加半透明遮罩,然后将遮罩与图像合并并将其转换回JPEG格式进行保存。PIL能够实现吗?如果不能,我该如何处理?谢谢!
Image()
中即可:#!/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()
这还会在图像中添加一个带透明度的png文件。
logo
),我发现如果我想保存back
,我必须使用png
(jpg
会引发错误)。然而,back
的大小比原始图像大5倍。我们有办法减小back
的大小吗? - Yvesback.show()
替换为back.save('back.jpg', 'JPEG')
时,图像会按预期保存。也许您应该发布一个新问题,并提供完整的错误描述。(您可以添加一条以 @tnt 开头的评论,这样我就会收到通知。) - TNTpillow 4.1.1
升级到4.2.1
后,我也遇到了异常(解决方案在新的问题的答案中)。 - TNT