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使用xauth方式登录饭否网然后发消息
Apr 11 Python
python使用PyFetion来发送短信的例子
Apr 22 Python
在Python程序中实现分布式进程的教程
Apr 28 Python
用Python实现一个简单的能够上传下载的HTTP服务器
May 05 Python
基于wxpython实现的windows GUI程序实例
May 30 Python
python中实现延时回调普通函数示例代码
Sep 08 Python
Window环境下Scrapy开发环境搭建
Nov 18 Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 Python
python中的print()输出
Apr 12 Python
11个Python3字典内置方法大全与示例汇总
May 13 Python
python+openCV利用摄像头实现人员活动检测
Jun 22 Python
Python流程控制常用工具详解
Feb 24 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
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
PHP删除HTMl标签的实现代码
2013/06/30 PHP
分享PHP守护进程类
2015/12/30 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
JS+CSS实现的经典tab选项卡效果代码
2015/09/16 Javascript
jQuery实现的仿百度分页足迹效果代码
2015/10/30 Javascript
理解javascript闭包
2015/12/15 Javascript
jQuery制作网页版选项卡
2016/07/28 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
pymysql之cur.fetchall() 和cur.fetchone()用法详解
2020/05/15 Python
Python 爬虫的原理
2020/07/30 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
Seavenger官网:潜水服、浮潜、靴子和袜子
2020/03/05 全球购物
如何查找和删除数据库中的重复数据
2014/11/05 面试题
入学生会自荐书范文
2014/02/05 职场文书
教师节演讲稿
2014/05/06 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
Elasticsearch 索引操作和增删改查
2022/04/19 Python