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里使用正则表达式的分组命名方式
Oct 24 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 Python
Python 实现使用dict 创建二维数据、DataFrame
Apr 13 Python
Python Series从0开始索引的方法
Nov 06 Python
Python实现通过解析域名获取ip地址的方法分析
May 17 Python
Python参数类型以及常见的坑详解
Jul 08 Python
python误差棒图errorbar()函数实例解析
Feb 11 Python
python实现电子词典
Mar 03 Python
python读取mysql数据绘制条形图
Mar 25 Python
Python如何创建装饰器时保留函数元信息
Aug 07 Python
Python用requests库爬取返回为空的解决办法
Feb 21 Python
Python如何把不同类型数据的json序列化
Apr 30 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下实现伪 url 的超简单方法[转]
2007/09/24 PHP
prototype Element学习笔记(篇二)
2008/10/26 Javascript
关于COOKIE个数与大小的问题
2011/01/17 Javascript
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
jQuery中innerWidth()方法用法实例
2015/01/19 Javascript
jquery+javascript编写国籍控件
2015/02/12 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
jQuery事件详解
2017/02/23 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
Vue.extend 编程式插入组件的实现
2019/11/18 Javascript
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
python实现快速排序的示例(二分法思想)
2018/03/12 Python
Python requests库用法实例详解
2018/08/14 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
Python3.7 新特性之dataclass装饰器
2019/05/27 Python
django-rest-framework 自定义swagger过程详解
2019/07/18 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
python分布式编程实现过程解析
2019/11/08 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
销售顾问工作计划书
2014/08/15 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
2021/03/31 Servers
如何使JavaScript休眠或等待
2021/04/27 Javascript
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记