求助:遇到PIL内部异常TypeError: getsize()仅接受1个参数(传入3个)
解决PIL调用
multiline_text时的字体参数异常 你遇到的问题核心是对PIL的ImageFont对象用法理解有误,我来一步步帮你排查和解决:
问题复现代码
from PIL import Image, ImageDraw, ImageFont img = Image.open('test_fixtures/image00161.jpg') draw = ImageDraw.Draw(img) font = ImageFont.load_default().font draw.multiline_text((20,20), 'some text', 'white', font)
错误堆栈
错误回溯(最近调用优先):
File "/home/davidparks21/opt/anaconda3/envs/xevo/lib/python2.7/unittest/case.py", line 329, in run testMethod() File "/home/davidparks21/ws/git/src/common...
问题原因
ImageFont.load_default()方法返回的已经是一个合法的ImageFont实例,而你额外获取的.font属性是PIL内部的底层字体结构(不是对外暴露的可用对象),draw.multiline_text的font参数要求传入的是标准ImageFont对象,传入底层结构自然会触发类型异常。
另外还要注意:draw.multiline_text的颜色参数规范写法是用fill关键字参数,位置参数可能在不同PIL版本中出现兼容性问题。
修复后的代码
from PIL import Image, ImageDraw, ImageFont img = Image.open('test_fixtures/image00161.jpg') draw = ImageDraw.Draw(img) # 直接使用load_default()返回的ImageFont对象,无需额外取.font属性 font = ImageFont.load_default() # 用fill关键字指定文本颜色,更规范 draw.multiline_text((20,20), 'some text', fill='white', font=font)
扩展:使用自定义字体
如果需要使用系统或本地自定义字体,可以用ImageFont.truetype()方法:
# 加载本地字体文件,第二个参数为字体大小 font = ImageFont.truetype("path/to/your/font.ttf", 24) draw.multiline_text((20,20), 'custom font text', fill='white', font=font)
内容的提问来源于stack exchange,提问作者David Parks
相关产品推荐
相关产品推荐

