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标准日志模块logging的使用方法
Nov 01 Python
Python正则表达式匹配ip地址实例
Oct 09 Python
Python的Django框架中的数据库配置指南
Jul 17 Python
深入理解python try异常处理机制
Jun 01 Python
深入解析Python中的descriptor描述器的作用及用法
Jun 27 Python
详解python中requirements.txt的一切
Mar 03 Python
Python动态生成多维数组的方法示例
Aug 09 Python
Python数据集切分实例
Dec 08 Python
python 用户交互输入input的4种用法详解
Sep 24 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
Nov 29 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
深入了解Python enumerate和zip
Jul 16 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电台频率大全 - 21 海南省
2020/03/11 无线电
PHP中$_SERVER的详细参数与说明
2008/07/29 PHP
解析MySql与Java的时间类型
2013/06/22 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
javascript中对对层的控制
2006/12/29 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
bootstrap中使用google prettify让代码高亮的方法
2016/10/21 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
2018/12/23 Javascript
微信小程序登录session的使用
2019/03/17 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
python pdb调试方法分享
2014/01/21 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
2017/11/01 Python
python3+PyQt5使用数据库表视图
2018/04/24 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
Python 中的lambda函数介绍
2018/10/10 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
Python 从attribute到property详解
2020/03/05 Python
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
2017/03/15 HTML / CSS
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
教师党员一句话承诺
2014/03/28 职场文书
心理咨询承诺书
2014/05/20 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
小学优秀班主任材料
2014/12/17 职场文书
创业计划书之水果店
2019/07/18 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS