如何使用Python Imaging Library绘制半透明多边形?在PIL中绘制半透明多边形
11
A
回答
14
您可以在单独的RGBA图像上绘制多边形,然后使用Image.paste(图像,框,蒙版)方法吗? :
编辑:This Works。
from PIL import Image
from PIL import ImageDraw
back = Image.new('RGBA', (512,512), (255,0,0,0))
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,mask=poly)
back.show()
4
我觉得@Nick T的回答是不错的,但你需要使用作为写有一个非常大的背景图片他的代码的时候,尤其是在你可能会被标注数的情况下要小心在所述图像上的多边形。这是我在处理大量卫星图像时使用一些对象检测代码并使用透明矩形标注检测结果时所做的事情。为了使代码高效,不管背景图像的大小如何,我提出以下建议。
我会修改解决方案,指定您要粘贴的多边形图像的大小只有保留多边形所需的大小,与后面的图像大小不一样。多边形的坐标是相对于局部边界框指定的,而不是全局图像坐标。然后,将多边形图像粘贴到较大背景图像的偏移处。
import Image
import ImageDraw
img_size = (512,512)
poly_size = (256,256)
poly_offset = (128,128) #location in larger image
back = Image.new('RGBA', img_size, (255,0,0,0))
poly = Image.new('RGBA', poly_size)
pdraw = ImageDraw.Draw(poly)
pdraw.polygon([ (0,0), (256,256), (0,256), (256,0)],
fill=(255,255,255,127), outline=(255,255,255,255))
back.paste(poly, poly_offset, mask=poly)
back.show()
1
使用Image.paste(图像,框,掩模)方法获得转换的alpha通道在背景图像的粘贴区域到多边形图像的对应透明度值。
The Image.alpha_composite(im1,im2)方法利用“粘贴”图像的alpha通道,并且不会将背景变为透明。但是,这种方法再次需要两张尺寸相同的图像。
相关问题
- 1. 绘制半透明可绘制在Android中,但黑边
- 2. 如何在openGL中绘制透明多边形
- 3. 在wxwidgets中绘制半透明窗口
- 4. 带半透明(半透明)带的绘制路径
- 5. 如何用Python绘制透明多边形?
- 6. 如何在静态文本上绘制半透明的矩形?
- 7. 如何在图形对象上绘制半透明文本?
- 8. 用ImageMagick绘制半透明线条
- 9. 用半透明视图绘制阴影
- 10. UIButton半透明边框
- 11. 绘制多边形
- 12. 绘制多边形
- 13. 绘制多边形
- 14. 如何绘制像使用CGContextClearRect绘制透明矩形的透明圆形
- 15. 在画布上绘制透明形状
- 16. 多边形中的不透明度
- 17. jogl中的透明多边形
- 18. 半透明窗体形式
- 19. 如何在透明BitmapData上绘制透明图形?
- 20. 透明或半透明面板控制
- 21. 绘制透明NSImage中使得透明
- 22. 在OpenGL ES中绘制半透明曲线
- 23. 如何在processing.exe中绘制半透明箭头
- 24. 在AWT中绘制一个半透明的.png
- 25. 在p5.js中主动绘制“半透明区域下”
- 26. Matplotlib:绘制具有不透明边缘的透明直方图
- 27. 在pygame中绘制一个多边形
- 28. 在OpenCV中绘制多边形?
- 29. 如何在SDL中绘制多边形?
- 30. MonoGame/XNA在Spritebatch中绘制多边形