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工程师面试题 与Python Web相关
Jan 14 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
Jul 13 Python
Django框架中序列化和反序列化的例子
Aug 06 Python
django项目简单调取百度翻译接口的方法
Aug 06 Python
python爬虫 urllib模块url编码处理详解
Aug 20 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
python实现异常信息堆栈输出到日志文件
Dec 26 Python
tensorflow 重置/清除计算图的实现
Jan 19 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
python三引号如何输入
Jul 06 Python
pytorch 带batch的tensor类型图像显示操作
May 20 Python
python中的getter与setter你了解吗
Mar 24 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
php下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
php+js实现异步图片上传实例分享
2014/06/02 PHP
php关联数组快速排序的方法
2015/04/17 PHP
js加解密 脚本解密
2008/02/22 Javascript
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
2012/02/10 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
如何实现移动端浏览器不显示 pc 端的广告
2015/10/15 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
2018/11/14 jQuery
JavaScript箭头函数中的this详解
2019/06/19 Javascript
python访问纯真IP数据库的代码
2011/05/19 Python
使用python实现baidu hi自动登录的代码
2013/02/10 Python
haskell实现多线程服务器实例代码
2013/11/26 Python
你真的了解Python的random模块吗?
2017/12/12 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
Python3-异步进程回调函数(callback())介绍
2020/05/02 Python
python爬虫基础知识点整理
2020/06/02 Python
Python with语句用法原理详解
2020/07/03 Python
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
销售人员个人求职信
2013/09/26 职场文书
求职推荐信
2013/10/28 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
银行授权委托书格式
2014/10/10 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js
Golang日志包的使用
2022/04/20 Golang