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())