-1

我正在向这样的图像添加多边形:

image = Map.objects.all()[0].image
back = Image.open(image.path)
draw = ImageDraw.Draw(back)
poly = Image.new('RGBA', (image.width,image.height))
pdraw = ImageDraw.Draw(poly)
pdraw.polygon(list(group(self.coords.split(","), 2)),fill=(255,255,255,127),outline=(255,255,255,255))
back.paste(poly,mask=poly)
back.show()

所以这会在正确的区域等中打开带有多边形的图像。

但我希望多边形本身是半透明的,比如不透明度为 0.8,这样多边形只是一个颜色叠加层,你仍然可以看到它。

我心目中的透明度的不透明度小于1?或者这不是它的意思

我错过了什么吗?

这就是图像现在的样子

在此处输入图像描述

4

1 回答 1

2

我怀疑您的源图像的模式不支持透明度。您可以通过在打开图像后添加以下行来纠正问题。

if back.mode not in ['RGB','RGBA']:
  back = back.convert('RGB')

引用Image.paste的PIL 文档:

如果模式不匹配,则将粘贴的图像转换为该图像的模式

更新:我已经改变了条件,如果模式已经是 RGBA,它就不会执行convert,显然不需要转换。可能还有其他不需要转换的模式,但这些模式似乎确实可以正常工作。

于 2013-05-30T17:40:12.600 回答