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设置socket代理的方法
Jan 14 Python
Python3一行代码实现图片文字识别的示例
Jan 15 Python
Python安装模块的常见问题及解决方法
Feb 05 Python
Python 读取某个目录下所有的文件实例
Jun 23 Python
Python实现将HTML转成PDF的方法分析
May 04 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
Jan 10 Python
tensorflow 实现打印pb模型的所有节点
Jan 23 Python
Python基于QQ邮箱实现SSL发送
Apr 26 Python
浅谈Python3多线程之间的执行顺序问题
May 02 Python
Python用dilb提取照片上人脸的示例
Oct 26 Python
scrapy在python爬虫中搭建出错的解决方法
Nov 22 Python
python中filter,map,reduce的作用
Jun 10 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输出一个等腰三角形的方法
2015/05/12 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
基于jQuery实现滚动刷新效果
2017/01/09 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2017/12/11 Python
用Python写一段用户登录的程序代码
2018/04/22 Python
python  文件的基本操作 菜中菜功能的实例代码
2019/07/17 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
python xlwt如何设置单元格的自定义背景颜色
2019/09/03 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
Python 找出出现次数超过数组长度一半的元素实例
2020/05/11 Python
Python与C/C++的相互调用案例
2021/03/04 Python
HTML5学习笔记之History API
2015/02/26 HTML / CSS
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
Yahoo的PHP面试题
2014/05/26 面试题
物流专业大学生的自我鉴定
2013/11/13 职场文书
事业单位接收函
2014/01/10 职场文书
2014年涉外离婚协议书范本
2014/11/20 职场文书
个人年终总结怎么写
2015/03/09 职场文书
全民创业工作总结
2015/08/13 职场文书
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python