PIL - 在JPEG上添加半透明多边形

3 投票
1 回答
1937 浏览
提问于 2025-04-18 04:22

我想用一种方法在一张图片上添加一个半透明的多边形。问题是这张图片是JPEG格式的。我知道JPEG格式不支持透明通道,所以我希望能找到一种办法,让PIL(一个处理图片的库)先把JPEG格式的图片转换成一种支持透明通道的格式,然后加上半透明的遮罩,最后再把这个遮罩和原图合并,最后再转换回JPEG格式保存。请问PIL能做到这一点吗?如果不能,还有什么其他方法可以实现呢?谢谢!

1 个回答

7

这很简单。只需要把jpeg图片粘贴到一个新的rgba 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图片添加到这个图像中。

撰写回答