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 自动提交和抓取网页
Jul 13 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
Feb 14 Python
pandas数据分组和聚合操作方法
Apr 11 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
python 自动批量打开网页的示例
Feb 21 Python
Python爬取爱奇艺电影信息代码实例
Nov 26 Python
关于Django Models CharField 参数说明
Mar 31 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
Apr 03 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
Apr 07 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
python音频处理的示例详解
Dec 23 Python
python unittest单元测试的步骤分析
Aug 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
摩卡咖啡
2021/03/03 咖啡文化
Could not load type System.ServiceModel.Activation.HttpModule解决办法
2012/12/29 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
JS代码格式化和语法着色V2
2006/10/14 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
获得Javascript对象属性个数的示例代码
2013/11/21 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
javascript复制粘贴与clipboardData的使用
2014/10/16 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
Koa 使用小技巧(小结)
2018/10/22 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python函数返回多个值的示例方法
2013/12/04 Python
Python批量按比例缩小图片脚本分享
2015/05/21 Python
简单的python后台管理程序
2017/04/13 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
快速查找Python安装路径方法
2020/02/06 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
生物化工工艺专业应届生求职信
2013/10/08 职场文书
歌唱比赛获奖感言
2014/01/21 职场文书
二年级数学教学反思
2014/01/21 职场文书
初中英语教学反思
2014/01/25 职场文书
军训考核自我鉴定
2014/02/13 职场文书
老人节标语大全
2014/10/08 职场文书
中小学生学籍证明
2014/10/25 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
小学作文指导之如何写人?
2019/07/08 职场文书
SQL基础查询和LINQ集成化查询
2022/01/18 MySQL
Python必备技巧之字符数据操作详解
2022/03/23 Python