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装饰器使用实例:验证参数合法性
Jun 24 Python
使用Python对Excel进行读写操作
Mar 30 Python
windows10下python3.5 pip3安装图文教程
Apr 02 Python
利用Python如何实现数据驱动的接口自动化测试
May 11 Python
python实现一组典型数据格式转换
Dec 15 Python
远程部署工具Fabric详解(支持Python3)
Jul 04 Python
Python循环结构的应用场景详解
Jul 11 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 Python
python 日志 logging模块详细解析
Mar 31 Python
Pycharm中如何关掉python console
Oct 27 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
Feb 22 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 COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
2014/06/12 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
php计算一个文件大小的方法
2015/03/30 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
2016/11/04 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
js 异步处理进度条
2010/04/01 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
javascript if条件判断方法小结
2014/05/17 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
NodeJs下的测试框架Mocha的简单介绍
2017/02/22 NodeJs
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
Python函数中定义参数的四种方式
2014/11/30 Python
Python中使用items()方法返回字典元素对的教程
2015/05/21 Python
python利用smtplib实现QQ邮箱发送邮件
2020/05/20 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
Dlib+OpenCV深度学习人脸识别的方法示例
2019/05/14 Python
python多线程同步实例教程
2019/08/11 Python
Django中modelform组件实例用法总结
2020/02/10 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
魔幻般冒泡背景的CSS3按钮动画
2016/02/27 HTML / CSS
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
自荐书格式
2013/12/01 职场文书
揭牌仪式主持词
2014/03/19 职场文书
鼓舞士气的口号
2014/06/16 职场文书
班级读书活动总结
2014/06/30 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
三行辞职书范文
2015/02/26 职场文书
Golang获取List列表元素的四种方式
2022/04/20 Golang