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中的__new__与__init__魔术方法理解笔记
Nov 08 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
Jun 17 Python
Python中内置的日志模块logging用法详解
Jul 12 Python
python的文件操作方法汇总
Nov 10 Python
python2.7+selenium2实现淘宝滑块自动认证功能
Feb 24 Python
pyQt4实现俄罗斯方块游戏
Jun 26 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
Oct 09 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
Jun 21 Python
python多线程共享变量的使用和效率方法
Jul 16 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
Aug 08 Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
Oct 28 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 错误处理经验分享
2011/10/11 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
简短几句 通俗解释javascript的闭包
2011/01/17 Javascript
javascript中关于执行环境的杂谈
2011/08/14 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
JS实现图片点击后出现模态框效果
2017/05/03 Javascript
详解node中创建服务进程
2017/05/09 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
2017/09/14 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
Vue组件库发布到npm详解
2018/02/17 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
Python中使用gflags实例及原理解析
2019/12/13 Python
python ftplib模块使用代码实例
2019/12/31 Python
python字符串替换re.sub()实例解析
2020/02/09 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
python 模拟登陆github的示例
2020/12/04 Python
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
小区文明倡议书
2014/05/16 职场文书
活动宣传策划方案
2014/05/23 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
高中班主任评语
2014/12/30 职场文书
明确岗位职责
2015/02/14 职场文书