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