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重新引入被覆盖的自带function
Jul 16 Python
Python自动化测试ConfigParser模块读写配置文件
Aug 15 Python
Python生成随机数组的方法小结
Apr 15 Python
Django权限机制实现代码详解
Feb 05 Python
神经网络相关之基础概念的讲解
Dec 29 Python
Python定义函数功能与用法实例详解
Apr 08 Python
python numpy 反转 reverse示例
Dec 04 Python
numpy实现神经网络反向传播算法的步骤
Dec 24 Python
python函数定义和调用过程详解
Feb 09 Python
python 安装移动复制第三方库操作
Jul 13 Python
Python3爬虫里关于代理的设置总结
Jul 30 Python
Python绘制散点图之可视化神器pyecharts
Jul 07 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网站提速三大“软”招
2006/10/09 PHP
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
php在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
Laravel学习教程之本地化模块
2017/08/18 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
JS 获取select(多选下拉)中所选值的示例代码
2013/08/02 Javascript
Table冻结表头示例代码
2013/08/20 Javascript
javascript实现颜色渐变的方法
2013/10/30 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
2016/12/16 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
在django-xadmin中APScheduler的启动初始化实例
2019/11/15 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
露营世界:Camping World
2017/02/02 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
合伙协议书
2014/04/23 职场文书
冬季安全检查方案
2014/05/23 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers