You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:遇到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:47:26