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 相关文章推荐
如何解决django配置settings时遇到Could not import settings 'conf.local'
Nov 18 Python
python实现学生信息管理系统
Apr 05 Python
详谈python3 numpy-loadtxt的编码问题
Apr 29 Python
Scrapy框架使用的基本知识
Oct 21 Python
解决Django一个表单对应多个按钮的问题
Jul 18 Python
Django 在iframe里跳转顶层url的例子
Aug 21 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
浅谈python出错时traceback的解读
Jul 15 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
Python中pass的作用与使用教程
Nov 13 Python
使用Python画了一棵圣诞树的实例代码
Nov 27 Python
python如何进行基准测试
Apr 26 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
信用卡效验程序
2006/10/09 PHP
php 生成文字png图片的代码
2011/04/17 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
Opacity.js
2007/01/22 Javascript
Javascript 篱式条件判断
2008/08/22 Javascript
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
JS数组去掉重复数据只保留一条的实现代码
2016/08/11 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
2017/01/22 Javascript
javascript中的面向对象
2017/03/30 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
儿童编程python入门
2018/05/08 Python
详解python3中tkinter知识点
2018/06/21 Python
Python BS4库的安装与使用详解
2018/08/08 Python
CSS3改变浏览器滚动条样式
2019/01/04 HTML / CSS
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
巴西本土电商平台:Americanas
2020/06/21 全球购物
公司股东合作协议书
2014/09/14 职场文书
中学生的1000字检讨书
2014/10/11 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书
Python趣味挑战之实现简易版音乐播放器
2021/05/28 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python
Nginx反向代理、重定向
2022/04/13 Servers