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获取CPU和内存信息的思路与实现(linux系统)
Jan 03 Python
Python实现Youku视频批量下载功能
Mar 14 Python
PyQt5 pyqt多线程操作入门
May 05 Python
python安装模块如何通过setup.py安装(超简单)
May 05 Python
用python脚本24小时刷浏览器的访问量方法
Dec 07 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
Python PyCharm如何进行断点调试
Jul 05 Python
利用rest framework搭建Django API过程解析
Aug 31 Python
pygame实现俄罗斯方块游戏(对战篇1)
Oct 29 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 Python
python爬虫之selenium库的安装及使用教程
May 23 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设计模式 FlyWeight (享元模式)
2011/06/26 PHP
PHP实现HTML生成PDF文件的方法
2014/11/07 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
php导出生成word的方法
2015/12/25 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
js通过地址栏给action传值(中文乱码全是问号)
2013/05/02 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
jquery mobile开发常见问题分析
2016/01/21 Javascript
jquery trigger实现联动的方法
2016/02/29 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
js实现简单的碰壁反弹效果
2016/08/30 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
微信小程序select下拉框实现效果
2019/05/15 Javascript
js回调函数原理与用法案例分析
2020/03/04 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
简单实现python爬虫功能
2015/12/31 Python
python实现超级马里奥
2020/03/18 Python
Keras load_model 导入错误的解决方式
2020/06/09 Python
Python 如何在字符串中插入变量
2020/08/01 Python
python如何绘制疫情图
2020/09/16 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
static关键字的用法
2013/10/07 面试题
优秀教师先进事迹
2014/01/22 职场文书
打架检讨书2000字
2014/02/22 职场文书
实习指导老师评语
2014/04/26 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
会计继续教育培训心得体会
2016/01/19 职场文书
60句有关成长的名言
2019/09/04 职场文书
Java使用jmeter进行压力测试
2021/07/09 Java/Android