Pillow调用ImageDraw.Draw.textsize报'str'无'getsize'属性错误如何解决
问题原因
- 核心错误:你传递给
textsize方法的font参数是字体文件的路径字符串,但是该方法要求font参数必须是ImageFont实例,底层逻辑会调用字体对象的getsize方法计算尺寸,对字符串调用该方法自然会触发属性不存在的报错。 - 额外注意:Pillow 9.2.0及以上版本已经正式弃用
ImageDraw.textsize()方法,后续版本会直接移除该接口,建议替换为官方推荐的textbbox()方法计算文本尺寸。
修复方案
首先需要导入ImageFont模块,调用ImageFont.truetype()加载字体路径得到合法的字体实例,再传入尺寸计算方法即可,修复后代码如下:
from PIL import Image, ImageDraw, ImageFont txt_img = Image.new("RGBA", (320, 240), (255,255,255,0)) d = ImageDraw.Draw(txt_img) text = "abcabc" # 加载字体得到实例,第二个参数为字体大小,可根据需求调整 font_mono = ImageFont.truetype("Pillow/Tests/fonts/FreeMono.ttf", size=24) font_color_green = (0,255,0,255) # 旧版本Pillow可继续使用textsize(已弃用) txt_width, _ = d.textsize(text, font=font_mono) # 高版本Pillow推荐用法,替换textsize # bbox = d.textbbox((0, 0), text, font=font_mono) # txt_width = bbox[2] - bbox[0] # txt_height = bbox[3] - bbox[1]
内容的提问来源于stack exchange,提问作者TheTomer
相关产品推荐
相关产品推荐

