Python图像处理库PIL的ImageFont模块使用介绍


Posted in Python onFebruary 26, 2020

ImageFont模块定义了相同名称的类,即ImageFont类。这个类的实例存储bitmap字体,用于ImageDraw类的text()方法。

PIL使用自己的字体文件格式存储bitmap字体。用户可以使用pilfont工具包将BDF和PCF字体描述器(Xwindow字体格式)转换为这种格式。

从版本1.1.4开始,PIL可以配置是否支持TrueType和OpenType字体(和FreeType库支持其他的字体格式一样)。对于更早的版本,只在imToolkit包中支持TrueType字体。

TrueType采用几何学中二次B样条曲线及直线来描述字体的外形轮廓,其特点是:TrueType既可以作打印字体,又可以用作屏幕显示;由于它是由指令对字形进行描述,因此它与分辨率无关,输出时总是按照打印机的分辨率输出。无论放大或缩小,字符总是光滑的,不会有锯齿出现。但相对PostScript字体来说,其质量要差一些。特别是在文字太小时,就表现得不是很清楚。

OpenType也叫Type 2字体,是由Microsoft和Adobe公司开发的另外一种字体格式。它也是一种轮廓字体,比TrueType更为强大,最明显的一个好处就是可以在把PostScript字体嵌入到TrueType的软件中。并且还支持多个平台,支持很大的字符集,还有版权保护。可以说它是Type 1和TrueType的超集。OpenType的主要优点:1)增强的跨平台功能 2)更好的支持Unicode标准定义的国际字符集 3)支持高级印刷控制能力 4)生成的文件尺寸更小 5)支持在字符集中加入数字签名,保证文件的集成功能。

OpenType标准还定义了OpenType文件名称的后缀名。包含TureType字体的OpenType文件后缀名为.ttf,包含PostScript字体的文件后缀名为.OTF。如果是包含一系列TrueType字体的字体包文件,那么后缀名为.TTC。

一、ImageFont模块的函数

1、  Load

定义:ImageFont.load(file)⇒ Font instance

含义:从指定的文件中加载一种字体,该函数返回对应的字体对象。如果该函数失败,将产生IOError异常。

2、  Load_path

定义:ImageFont.load_path(file)⇒ Font instance

含义:和函数load()一样,但是如果没有指定当前路径的话,会从sys.path开始查找指定的字体文件。

3、  Truetype

定义1:ImageFont.truetype(file,size)⇒ Font instance

含义1:加载一个TrueType或者OpenType字体文件,并且创建一个字体对象。这个函数从指定的文件加载了一个字体对象,并且为指定大小的字体创建了字体对象。

在windows系统中,如果指定的文件不存在,加载器会顺便看看windows的字体目录下是否存在。

这个函数需要_imagingft服务。

定义2:ImageFont.truetype(file,size, encoding=value)⇒ Font instance

含义2:(New in 1.1.5)加载一个TrueType或者OpenType字体文件,并且使用指定的编码方式创建一个字体对象。通常的编码方式有“unic”(Unicode),“symb”(Microsoft Symbol),“ADOB”(Adobe Standard),“ADBE”(Adobe Expert)和“armn”(Apple Roman)。

下面的例子使用MicrosoftSymbol字体,即变量encoding为“symb”,在oxF000和0xF0FF之间绘制一个字符。

font = ImageFont.truetype("symbol.ttf", 16, encoding="symb")
draw.text((0, 0), unichr(0xF000 + 0xAA))

4、  Load_default

定义:ImageFont.load_default()⇒ Font instance

含义:(New in 1.1.4)加载一个默认的字体。

二、ImageFont模块的方法

Font对象必须实现下面的方法,供ImageDraw层使用。

1、  Getsize

定义:font.getsize(text)⇒ (width, height)

含义:返回给定文本的宽度和高度,返回值为2元组。

2、  Getmask

定义:font.getmask(text,mode=”“)⇒ Image object

含义:为给定的文本返回一个位图。这个位图是PIL内部存储内存的实例(为Image.core接口模块定义)。

如果字体使用了抗锯齿,位图的模式为“L”,且其最大值为255。否则,它的模式为“1”。

(New in 1.1.5)可选参数mode用于一些显卡驱动指定自己喜欢的模式;如果为空,渲染器可能会返回任意模式。注意:该模式总是一个字符串。

三、ImageFont模块的实例

>>> from PIL import Image, ImageDraw, ImageFont
>>> im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> draw = ImageDraw.Draw(im02)
>>> ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\SIMYOU.TTF", 20)
>>> draw.text((30,30), u"Python图像处理库PIL从入门到精通",font = ft, fill = 'red')
>>> ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\SIMYOU.TTF", 40)
>>> draw.text((30,100), u"Python图像处理库PIL从入门到精通",font = ft, fill = 'green')
>>> ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\SIMYOU.TTF", 60)
>>> draw.text((30,200), u"Python图像处理库PIL从入门到精通",font = ft, fill = 'blue')
>>> ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\SIMLI.TTF", 40)
>>> draw.text((30,300), u"Python图像处理库PIL从入门到精通",font = ft, fill = 'red')
>>> ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\STXINGKA.TTF", 40)
>>> draw.text((30,400), u"Python图像处理库PIL从入门到精通",font = ft, fill = 'yellow')
>>> im02.show()

在windows系统下,字体文件位于C:\Windows\Fonts文件夹下。本实例中用到的SIMYOU.TTF为幼圆字体文件,SIMLI.TTF为隶书字体文件,STXINGKA.TTF为行楷字体文件。用户可以根据自己的需要,从Fonts文件夹下选择所需字体文件。

字体的大小,可以根据定义字体时的第二个参数来设定。

本实例中图像im02如下图所示:

Python图像处理库PIL的ImageFont模块使用介绍

到此这篇关于Python图像处理库PIL的ImageFont模块使用介绍的文章就介绍到这了,更多相关PIL ImageFont模块内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python列表list数组array用法实例解析
Oct 28 Python
python遍历小写英文字母的方法
Jan 02 Python
Python实现将HTML转成PDF的方法分析
May 04 Python
使用Python实现文字转语音并生成wav文件的例子
Aug 08 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
Aug 26 Python
Python中BeautifuSoup库的用法使用详解
Nov 15 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
Dec 18 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 Python
利用Python pandas对Excel进行合并的方法示例
Nov 04 Python
python实现Thrift服务端的方法
Apr 20 Python
Python+Pillow+Pytesseract实现验证码识别
May 11 Python
Python利用FFT进行简单滤波的实现
Feb 26 #Python
Python图像处理库PIL的ImageGrab模块介绍详解
Feb 26 #Python
Python图像处理库PIL的ImageDraw模块介绍详解
Feb 26 #Python
PIL包中Image模块的convert()函数的具体使用
Feb 26 #Python
Pandas —— resample()重采样和asfreq()频度转换方式
Feb 26 #Python
python实现银行实战系统
Feb 26 #Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 #Python
You might like
让php处理图片变得简单 基于gb库的图片处理类附实例代码下载
2011/05/17 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
PHP设计模式之调解者模式的深入解析
2013/06/13 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
给大家分享几个常用的PHP函数
2017/01/15 PHP
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
jquery div 居中技巧应用介绍
2012/11/24 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
JS表格组件神器bootstrap table详解(强化版)
2016/05/26 Javascript
vue-router 手势滑动触发返回功能
2018/09/30 Javascript
electron制作仿制qq聊天界面的示例代码
2018/11/26 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
javascript中如何判断类型汇总
2019/05/14 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
Python二分查找详解
2015/09/13 Python
Python快速排序算法实例分析
2017/11/29 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
美国最大的骑马用品零售商:HorseLoverZ
2017/01/12 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
财务管理专业应届毕业生求职信
2013/09/22 职场文书
养生餐厅创业计划书范文
2014/03/26 职场文书
幼儿园家长寄语
2014/04/02 职场文书
运动会跳远广播稿
2015/08/19 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
Java详细解析==和equals的区别
2022/04/07 Java/Android
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS