pil-utils
pil-utils copied to clipboard
没有指定字体时绘制文字超级耗时
https://github.com/lgc-NB2Dev/nonebot-plugin-multincm
我在使用这个点歌插件时发现在docker上绘制歌曲列表耗时10s,绘制歌词耗时至少30s,使用 viztrace 进行性能分析后发现最大的耗时在 pil_utils 在绘制文字函数内,具体的说是 Text2Image.from_bbcode_text() 函数里调用的 get_proper_font(),我认为可以创建一个 Dict, 缓存所有的 Font 对象,这样可能会多占用一些内存,但是不会出现频繁切换 Font 耗时巨大的问题了
耗时主要是需要对每个字符逐一判断字体中是否包含该字符,为了实现字体的 fallback
同时每个字符逐一绘制也比整段绘制耗时
可以指定字体并设置 font_fallback=False,可以减少字体fallback的耗时
总的来说这个用来绘制大段文字的时候很拉( 未来可能会使用别的库绘制文字来提升性能 https://github.com/MeetWq/pil-utils/issues/2
这么设置后绘制时间并没有明显的提升,感觉还是其它地方有问题