跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Python实现对比不同字体中的同一字符的显示效果

有人在 opensuse 中文论坛询问他的输入法打出的「妩媚」的「妩」字为什么显示成「女」+「元」。怀疑是字体的问题,于是空闲时用好友写的python-fontconfig 配合 pillow (pil 的一个 fork)写了个脚本,使用系统上所有包含这个「妩」字的字体来显示这个字,看看到底是哪些字体有问题。

(更新后的)脚本如下:

Google Chrome / Chromium 用户请注意:如果复制得到的代码中含有不间断空格(0xa0),请手动替换下。

Python 3.14.3微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。

下载#!/usr/bin/env python3# vim:fileencoding=utf-8 from PIL import Image, ImageDraw, ImageFont import fontconfig ch = '妩'def get_fonts():ret = []for f in fontconfig.query():f = fontconfig.FcFont(f) if f.has_char(ch):ret.append((f.file, f.bestname)) return ret w, h = 800, 20000 image = Image.new('RGB', (w, h), 'white') draw = ImageDraw.Draw(image) pos = 0 w = 0 strs = ch for fontfile, fontname in get_fonts():font = ImageFont.truetype(fontfile, 24) s = '%s: %s' % (fontname, strs) font_width, font_height = font.getsize(s) w = max((font_width, w)) draw.text((10, pos), s, font=font, fill='black') pos += font_height h = pos image = image.crop((0, 0, w+10, h)) image.save('fonts.png')寻找字体,然后渲染到当前目录下的fonts.png文件中。寻找字体的过程挺花时间的,要耐心等待。最后结果如下:我这里,文泉驿微米黑、方正魏碑ref、某个 Droid Sans Fallback 字体中「妩」字的字形不对。(我这里有三个字体文件都叫「Droid Sans Fallback」……)>

相关文章