pil-utils icon indicating copy to clipboard operation
pil-utils copied to clipboard

没有指定字体时绘制文字超级耗时

Open Misaka-Mikoto-Tech opened this issue 2 years ago • 2 comments

https://github.com/lgc-NB2Dev/nonebot-plugin-multincm 我在使用这个点歌插件时发现在docker上绘制歌曲列表耗时10s,绘制歌词耗时至少30s,使用 viztrace 进行性能分析后发现最大的耗时在 pil_utils 在绘制文字函数内,具体的说是 Text2Image.from_bbcode_text() 函数里调用的 get_proper_font(),我认为可以创建一个 Dict, 缓存所有的 Font 对象,这样可能会多占用一些内存,但是不会出现频繁切换 Font 耗时巨大的问题了

Misaka-Mikoto-Tech avatar Jun 04 '23 07:06 Misaka-Mikoto-Tech

耗时主要是需要对每个字符逐一判断字体中是否包含该字符,为了实现字体的 fallback 同时每个字符逐一绘制也比整段绘制耗时 可以指定字体并设置 font_fallback=False,可以减少字体fallback的耗时

总的来说这个用来绘制大段文字的时候很拉( 未来可能会使用别的库绘制文字来提升性能 https://github.com/MeetWq/pil-utils/issues/2

MeetWq avatar Jun 04 '23 11:06 MeetWq

这么设置后绘制时间并没有明显的提升,感觉还是其它地方有问题

Misaka-Mikoto-Tech avatar Jun 04 '23 15:06 Misaka-Mikoto-Tech