Python-模块系列-pillow库-图像处理库-获取字体大小外包围矩形

插件开发 2022-05-14 13:48:28 阅读数:52

Python模块系列pillowpython-

1.概述

PIL,全称Python Imaging Library,已经是Python平台事实上的图像处理标准库。PIL功能非常强大,但API却非常简单易用。Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库。pillow可以说已经取代了PIL,将其封装成python的库(pip即可安装),且支持python2和python3。

2.常用对象

图像颜色:Pillow中的颜色采用一个包含3个元素的元组表示,如(R,G,B)。也可以用具有特定意义的字符串表示,如黑色:‘black’。
Image:它是Pillow库中最核心的类,表示图像。它有一些常用的方法,如读取图像,保存图像,图像参数等,如下所示:

from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
# 从文件读取图像
img = Image.open('E:/相册/尼康/花朵.jpg');
print((img.format, img.mode, img.size)) # 输出图片基本信息
data = list(img.getdata()) # 返回图像序列数据并转为rgb列表
img.show();
img_resize = img.resize((256, 256)) # 调整尺寸
img_resize.save("花朵256.jpg")
img_rotate = img.rotate(45) # 中心逆时针旋转
img_rotate.save("花朵45.jpg")
# 自定义新建图像
img2 = Image.new("RGB", (256, 256), "black") # 黑色背景
print((img2.format, img2.mode, img2.size)) # 输出图片基本信息

以上代码中有内容的注释,有几个常用函数功能描述。Pillow库图像处理功能非常强大,上面只是简单实例,后面会逐步更新在文字识别过程中涉及到的函数。

ImageFont: 它表示一个字体对象。用于在图像上绘制文字。一个简单创建字体的例子,如下所示:

from PIL import ImageFont, ImageDraw, Image
image = Image.new("RGB", (128, 128), "black") # 黑色背景
draw = ImageDraw.Draw(image) # 绘制对象
# use a truetype font
font = ImageFont.truetype('.\chinese_fonts\DroidSansFallbackFull.ttf', 15)
draw.text((10, 25), "world", font=font)
image.show();

ImageDraw: 它是一个基于Image的二维绘图类。可以用它生成包含文字,图形和其它需要的自定义图像。如上所示,它绘制一个文字在image上。text方法,原型如下:
PIL.ImageDraw.Draw.text(xy, text, fill=None, font=None, anchor=None)

Draws the string at the given position.–指定位置绘制文字。
参数:
xy – Top left corner of the text.–文字的左上角点
text – Text to be drawn.–需绘制的文本
font – An ImageFont instance.–字体对象
fill – Color to use for the text.–填充颜色

3.获取字体大小外包围矩形

源代码如下所示:

def Pt2MM(val):
ret = val * 25.4 / 72;
return ret;
def GetFontRenderSize(text, fontsize):
canvas = Image.new('RGB', (512, 512));
draw = ImageDraw.Draw(canvas);
monospace = ImageFont.truetype(r"msyh.ttc", fontsize);
draw.text((0, 0), text, font=monospace, fill="white");
bbox = canvas.getbbox();
# 宽高
sizept = (bbox[2] - bbox[0], bbox[3] - bbox[1]);
fontsizewmm = Pt2MM(sizept[0]);
fontsizehmm = Pt2MM(sizept[1]);
return (fontsizewmm, fontsizehmm);

4.作者答疑

如有疑问,敬请留言。

版权声明:本文为[插件开发]所创,转载请带上原文链接,感谢。 https://plugin.blog.csdn.net/article/details/124752679