如何将PIL的ImageDraw对象转换回Image格式
操作方法
ImageDraw 本质是绑定到原始Image对象的绘制上下文,所有绘制操作都会直接修改传入的原始Image实例,不需要额外的转换方法,你遇到的问题是因为覆盖了存储原始Image对象的变量。
最佳实践写法(推荐)
不要覆盖存储Image的变量,单独用变量存储ImageDraw对象:
from PIL import Image, ImageDraw # 读取图像,保留原始Image对象 img = Image.open(...) # 单独创建绘制对象,不覆盖img变量 draw = ImageDraw.Draw(img) # 执行文字绘制操作,会直接修改img draw.text((0,0), 'text', (0,0,0)) # 此时img已经是添加文字后的Image格式,直接用于后续处理即可 img.save("result.png")
已覆盖变量的应急处理
如果你已经按现有写法把img变量覆盖为了ImageDraw对象,可以通过其内置的私有属性获取绑定的原始Image对象(该方法依赖内部实现,优先使用上面的最佳实践):
img = Image.open(...) img = ImageDraw.Draw(img) img.text((0,0), 'text', (0,0,0)) # 获取绑定的原始Image对象 processed_img = img._image
内容的提问来源于stack exchange,提问作者Carol Eisen
相关产品推荐
相关产品推荐

