在使用PIL做绘画边界和文本偏移量检测时出现的问题

发现问题:

在“借鉴”别人的项目的时候,使用pillow库会出现以下问题

drawSize = draw.textsize(writeText, font)
AttributeError: 'ImageDraw' object has no attribute 'textsize
  
offset = font.getoffset(writeText)[0]
AttributeError: 'FreeTypeFont' object has no attribute 'getoffset'

之后我也查询了百度,大致问了下AI,也没有得到满意的结果,百度一搜千篇一律让降级,诶,那就试试降级吧。


问题分析

不想改变主环境?那好办,建立一个虚拟环境,然后通过pip安装旧版本的PIL,测试大概在9.3.0左右的版本还支持这样的语法。

virtualenv piltest
pip install pillow==9.3.0

然后呢?降级了之后让我们复制原来的代码来跑一下

drawSize = draw.textsize(writeText, font)
offset = font.getoffset(writeText)[0]
print(f"绘画大小:{drawSize},文字偏移量:{offset}")

然后看到了以下的输出
在这里插入图片描述
大致的意思就是,在ImageDraw中的textsize方法,和在ImageFont中的getoffset方法会被在新版本中废除,所以这就是为什么我们之前跑的时候会报那两个问题


解决方法:

那显而易见,解决方法无非就两种:

  1. 按照百度上的其他教程,降级你的pillow库至9.3.0或以下的版本
pip install pillow==9.3.0
  1. 把你的程序代码修改为类似以下形式
writeText = "这是写入的句子"

image = Image.new('RGB', (300, 200), (255, 255, 255))
font = ImageFont.truetype("simhei.ttf", 20)
draw = ImageDraw.Draw(image)

if __name__ == "__main__":
    drawSize = draw.textbbox((0,0),writeText, font)
    offset = font.getbbox(writeText)[
    print(drawSize)
    print(offset)

关于 draw.textbbox( ) 中不按照上述提示,而多传入一个xy参数的原因:
实际运行测试中,发现只传两个参数会出现参数缺失的异常,而缺失的正是第一位参数xy
所以第一位要传入一个元组(x,y),后续参数与原来的方法一致

输出结果如下,与旧版本使用的方法输出一致:

> (0,0,140,21) # 后两位为大小
> (0,0,140,21) # 偏移量为前两位

总结:

虽然确实不是什么很大的问题,但不降级确实也看不出来,百度一大堆都是劝降版本,但是降版本有些依赖又会出问题,所以还是从程序代码上更新比较好,部分专业术语我可能不是很熟悉,文中可能有误,请大佬多多指教。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值