您当前的位置: 首页 >  Python

插件开发

暂无认证

  • 1浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

插件开发 发布时间:2022-05-14 08:30:00 ,浏览量:1

文章目录
    • 1.概述
    • 2.常用对象
    • 3.获取字体大小外包围矩形
    • 4.作者答疑

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.作者答疑

如有疑问,敬请留言。

关注
打赏
1665481431
查看更多评论
立即登录/注册

微信扫码登录

0.0432s