Pillow(PIL)是Python平台事实上的图像处理标准库,支持多种格式,并提供强大的图形与图像处理功能。PIL 模块全称为 Python Imaging Library,是Python中一个免费的图像处理模块。PIL 仅支持到 Python 2.7。Python3用的是PIL的兼容版本Pillow。本文主要介绍Pillow(PIL) ImageFont的使用。

1、Pillow(PIL)的安装及常用操作

参数文档:Python Pillow(PIL)安装及Image 类的使用

2、ImageFont

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

1)PIL.ImageFont.load(font_file)

ImageFont.load(font_file):从指定的文件中加载一种字体 ,返回字体对象。

from PIL import ImageFont, ImageDraw

# 导入字体,加载bitmap font
font = ImageFont.load("arial.pil")
draw.text((10, 10), "python", font=font)

# 导入字体并设置字体大小
font = ImageFont.truetype("arial.ttf", 15)
draw.text((10, 25), "cjavapy", font=font)

2)PIL.ImageFont.load_path(font_file)

ImageFont.load_path(font_file):和函数load()一样,但如没有指定当前路径的话,会从sys.path开始查找指定的字体文件。
from PIL import ImageFont, ImageDraw # 导入字体,加载bitmap font font = ImageFont.load_path('/data/fonts/pilfonts/timR08.pil') draw.text((10, 10), "python", font=font) # 导入字体并设置字体大小 font = ImageFont.truetype("arial.ttf", 15) draw.text((10, 25), "cjavapy", font=font)

3)PIL.ImageFont.truetype(file, size[, encoding=None])

参数:

file: 加载一个TrueType或者OpenType字体文件
size: 为指定大小的字体创建了字体对象
encoding:字体编码,主要字体编码有: “unic”(Unicode),“symb”(Microsoft Symbol),“ADOB”(Adobe Standard),“ADBE”(Adobe Expert)和“armn”(Apple Roman)

from PIL import ImageFont, ImageDraw

# 导入字体,加载bitmap font
font = ImageFont.load_path('/data/fonts/pilfonts/timR08.pil')
draw.text((10, 10), "python", font=font)

# 导入字体并设置字体大小
font = ImageFont.truetype("arial.ttf", 18)
draw.text((11, 25), "cjavapy", font=font)

4)PIL.ImageFont.load_default()

ImageFont.load_default():加载一个默认字体,返回一个字体对象。

from PIL import ImageFont, ImageDraw

# 加载一个默认字体bitmap font
font = ImageFont.load_default()

draw.text((11, 25), "cjavapy", font=font)

5)font.getsize(text)

font.getsize(text):返回给定文本的宽度和高度,返回值为2元组。

from PIL import ImageFont, ImageDraw

# 加载一个默认字体bitmap font
font = ImageFont.load_default()
print(font.getsize("cjavapy"))

6)font.getmask(text, mode=None)

font.getmask(text, mode=None):为给定的文本返回一个位图。这个位图是PIL内部存储内存的实例

参数:

text :要渲染的文本。
mode:某些图形驱动程序使用它来指示驱动程序喜欢哪种模式;如果为空,渲染器可能返回任一模式。请注意,模式始终是字符串。

from PIL import Image, ImageDraw, ImageFont

im = Image.new('RGB', (400, 300), (200, 200, 200))
text = 'cjavapy'
font = ImageFont.truetype('arial.ttf', size=220)
ascent, descent = font.getmetrics()
(width, height), (offset_x, offset_y) = font.font.getsize(text)
draw = ImageDraw.Draw(im)
draw.rectangle([(0, 0), (width, offset_y)], fill=(237, 127, 130))  # Red
draw.rectangle([(0, offset_y), (width, ascent)], fill=(202, 229, 134))  # Green
draw.rectangle([(0, ascent), (width, ascent + descent)], fill=(134, 190, 229))  # Blue
draw.rectangle(font.getmask(text).getbbox(), outline=(0, 0, 0))  # Black
draw.text((0, 0), text, font=font, fill=(0, 0, 0))
im.save('result.jpg')

print(width, height)
print(offset_x, offset_y)
print('Red height', offset_y)
print('Green height', ascent - offset_y)
print('Blue height', descent)
print('Black', font.getmask(text).getbbox())

推荐文档