为什么pillow的ImageFont.truetype函数打开字体会报错(“cannot open resource”)?怎么解决?

提示:仅个人浅浅根据文档分析得出结果, 如无法解决读者问题, 欢迎反馈在评论区. (网上还有一种方法是把字体的路径改为绝对路径, 如果我的方法不行, 可以试试这个)


官方の解释: Pillow官方文档里的解释

传送门


这里大概的意思就是"Windows限制C一次最多打开512个文件, 如果很多字体被同事打开, 达到了这个限制, 就会抛出OSError, 但是可以先内存中打开, 再传给ImageFont.truetype"

二. 微软的文档中对这一限制的描述

三. 怎么解决?

1.看看ImageFont.truetype的参数列表

来, 主公请看:

 参数列表里指示font可以是BinaryIO类型, 所以我们可以把font参数从路径改成BinaryIO类型的对象, 应该就没问题了.

2.那么问题来了, BinaryIO是啥?

主公再看:

这里的大概意思就是, BinaryIO指的是IO[AnyStr]及其子类TextIO(IO[str]), Binary(IO[bytes])表示像被open()函数返回的IO流, 那我们就拿open()把字体打开, 再传给ImageFont.truetype()就好.

3. 开搞!!!

from PIL import ImageFont
f = open("./AliPuHui-Bold.ttf", "rb")    # 我演示用的是"AliPuHui-Bold.ttf"这个字体
font = ImageFont.truetype(f)
f.close()

 ps: 要以"rb"模式打开


总结

        truetype函数遇到的问题可以通过预先把字体通过open函数(返回的是一个file-like)打开, 给再传给truetype解决

        PS网上还有一种方法是把字体的路径改为绝对路径, 如果我的方法不行, 可以试试这个

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值