为什么使用aggdraw绘制图像时得到的是空白画布?
问题解决方法
你遇到的问题是aggdraw的运行机制和PIL原生ImageDraw不同导致的,aggdraw的所有绘制操作都先在自身的离屏缓冲区执行,并不会自动同步到关联的PIL Image对象,必须主动调用同步方法才能把绘制结果写到图片里。
具体修复步骤
- 所有绘制操作完成后、调用
image.show()之前,添加draw.flush()代码,将aggdraw缓冲区的内容写入PIL图像,这个是aggdraw的强制要求步骤,PIL自带的ImageDraw无该要求所以你之前的原生Pillow代码可以正常运行。 - 额外可检查项:确认
ROW_SIZE、COL_SIZE两个常量已提前定义,且segments中存储的线段坐标全部在你定义的图像尺寸范围内,避免线段绘制到画布外不可见。
修正后的完整代码
import aggdraw from PIL import Image # 提前定义图像尺寸常量,可根据需求调整数值 ROW_SIZE = 800 COL_SIZE = 600 # 此处替换为你自己的segments数据 segments = [] image = Image.new("RGB", (ROW_SIZE, COL_SIZE), (255,255,255)) draw = aggdraw.Draw(image) pen = aggdraw.Pen("black", 2) # 线段绘制逻辑 for segment in segments: draw.line((segment.point1.x, segment.point1.y, segment.point2.x, segment.point2.y), pen) # 新增:同步绘制结果到PIL图像 draw.flush() image.show()
内容的提问来源于stack exchange,提问作者Tristan
相关产品推荐
相关产品推荐

