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 self,cls,decorator的理解
Jul 13 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
Jun 28 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
Sep 19 Python
python编程实现希尔排序
Apr 13 Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
python实现知乎高颜值图片爬取
Aug 12 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
Jan 10 Python
python中scrapy处理项目数据的实例分析
Nov 22 Python
Python 流媒体播放器的实现(基于VLC)
Apr 28 Python
Matplotlib绘制混淆矩阵的实现
May 27 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
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
基于PHP文件操作的详解
2013/06/05 PHP
基于php split()函数的用法详解
2013/06/05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
2014/06/23 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
php提取微信账单的有效信息
2018/10/01 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
jquery tab插件精简版分享
2011/09/10 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
jquery html动态添加的元素绑定事件详解
2016/05/24 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
pandas数值计算与排序方法
2018/04/12 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
将matplotlib绘图嵌入pyqt的方法示例
2020/01/08 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
大学毕业的自我鉴定
2013/10/08 职场文书
函授教育个人学习的自我评价
2013/12/31 职场文书
《二泉映月》教学反思
2014/04/15 职场文书
交通事故协议书范文
2014/04/16 职场文书
新闻报道策划方案
2014/06/11 职场文书
体育口号大全
2014/06/18 职场文书
单位授权委托书范文
2014/08/02 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
餐饮食品安全责任书
2015/01/29 职场文书
小区保洁员岗位职责
2015/04/10 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
HashMap实现保存两个key相同的数据
2021/06/30 Java/Android
SQL Server使用导出向导功能
2022/04/08 SQL Server