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


Posted in Python onApril 23, 2015

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

(更新后的)脚本如下:

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

#!/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文件中。寻找字体的过程挺花时间的,要耐心等待。最后结果如下:

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

我这里,文泉驿微米黑、方正魏碑ref、某个 Droid Sans Fallback 字体中「妩」字的字形不对。(我这里有三个字体文件都叫「Droid Sans Fallback」……)>

Python 相关文章推荐
Python爬虫信息输入及页面的切换方法
May 11 Python
python 用opencv调用训练好的模型进行识别的方法
Dec 07 Python
浅析Python与Mongodb数据库之间的操作方法
Jul 01 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
Python+redis通过限流保护高并发系统
Apr 15 Python
python实现批量转换图片为黑白
Jun 16 Python
详解pyinstaller生成exe的闪退问题解决方案
Jun 19 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
Sep 28 Python
python 下载m3u8视频的示例代码
Nov 11 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
Jan 29 Python
Python 里最强的地图绘制神器
Mar 01 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 Python
Python3里的super()和__class__使用介绍
Apr 23 #Python
Python实现的飞速中文网小说下载脚本
Apr 23 #Python
Python中使用PyQt把网页转换成PDF操作代码实例
Apr 23 #Python
Python里disconnect UDP套接字的方法
Apr 23 #Python
Python实现的Google IP 可用性检测脚本
Apr 23 #Python
Python3.2中的字符串函数学习总结
Apr 23 #Python
Python与Redis的连接教程
Apr 22 #Python
You might like
php5.2时间相差8小时
2007/01/15 PHP
PHP实现算式验证码和汉字验证码实例
2015/03/09 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
PHP对象链式操作实现原理分析
2016/10/09 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
bootstrap multiselect 多选功能实现方法
2017/06/05 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
微信小程序 获取javascript 里的数据
2017/08/17 Javascript
js动态引入的四种方法
2018/05/05 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
python字符串替换示例
2014/04/24 Python
python selenium 弹出框处理的实现
2019/02/26 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
柏林通行证:Berlin Pass
2018/04/11 全球购物
阿拉伯书店:Jamalon
2019/07/24 全球购物
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
医学毕业生自我鉴定
2013/10/30 职场文书
十佳美德少年事迹材料
2014/02/05 职场文书
文案策划求职信
2014/03/18 职场文书
规范化管理年活动总结
2014/08/29 职场文书
北京故宫的导游词
2015/01/31 职场文书
八月一日观后感
2015/06/10 职场文书
安全教育的主题班会
2015/08/13 职场文书
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server