用python实现在图片上套打 或 离线套打

一、开发背景说明

-工作中遇到一种情况:需要将大量数据记录,逐条打印到某种固定格式的受理单上,生成电子受理单再对外发送。
如:将excel中的“用户装机登记信息”数据信息取出,填到受理单上,并保存图片。
用python实现在图片上套打 或 离线套打_第1张图片
用python实现在图片上套打 或 离线套打_第2张图片

二、开发中的一些关键点及解决方案

1、处理思想

利用python的pillow库,将受理单图片导入;再使用pillow库中的ImageDraw 在图上画上需要文字。
取excel中的文字,可以使用pandas读入。

2、处理过程

至于pandas怎样读入excel数据,并在python中调用,不是本文档整理的要点。有需要者,可以百度。或参看我在经管之家上记录的相关笔记。网址如下:
https://bbs.pinggu.org/home.php?mod=space&uid=11676582&do=thread&view=me&order=dateline&page=1

2.1 下载需要的资源

pip install -i https://mirrors.aliyun.com/pypi/simple Pillow
PIL库是一个具有强大图像处理能力的第三方库,安装时库名叫pillow,使用时叫PIL。
官方文档是:https://pillow.readthedocs.io/en/stable/index.html
Image是PIL库中代表一个图像的类(一个Image对象,就代表了一幅图)
Image中有一个ImageDraw类的脚本链接如下:
ImageDraw的原始脚本
从脚本中可以看到ImageDraw这个类中有这些函数:

函数 功能(自解,非官)
getfont() 获得字体,如simsun
_getink() 获得画笔颜色
arc() 画圆
bitmap() 画位图
chord() 画弦
ellipse() 画椭圆
line() 画线
shape() 画形状
pieslice() 画弧
point() 画点
polygon() 画多边形
regular_polygon( ) 画规则的多边形
rectangle() 画长方形
rounded_rectangle() 画圆角长方形
text() 画上单行文字
multiline_text() 画多行文字
textsize() 得到程序中画过的字串的字体宽和高
textlength( ) 得到给定字串的宽度像数
textbbox() 得到画过的字串的文本框的位置左上和右下坐标

2.2 编写脚本实现数据套打

from PIL import Image, ImageDraw, ImageFont
import numpy as np


# 打开背景图
bk_img = Image.open('2.jpg')
print(bk_img.mode)   # 查看文件的颜色模式 如:RGB
print(bk_img.size)   # 查看原文件的大小  如:(800 * 600)

fontpath = "simsun.ttc"
font = ImageFont.truetype(fontpath, 64)     # 设置字体的样式 和 大小

draw = ImageDraw.Draw(bk_img)     #  在bk_img文件上画二维图
#绘制文字信息
draw.text((200, 300),  "张三", font=font, fill=(102, 102, 102))   # (200,300)是文字信息左上角的位置,“张三”是要绘制的文字, font是字体样式及大小, fill=(102, 102, 102)表示使用文字颜色

bk_img.show()
bk_img.save('try.jpg')   # 保存文件

2.3 关于draw.text()参数anchors 说明

特别说明一下anchors这一参数,对保证套打文本对齐起到很重要的作用。比如,我在实际应用中,需要将套打的文字以“右上”坐标为起点打印文字,即右对齐。这时就需要anchors参数帮忙了。
水平文字的anchors参数如下:
用python实现在图片上套打 或 离线套打_第3张图片
简述上图的描述,两个字母表示文字对齐方式,第一个表示水平方向的对齐方式,第二个表示垂直方向的对齐方式:

  • 指定坐标xy为文字的左上点,则 anchors=‘la’ (画的出文字离左上起点远)或 anchors='lt’(画的出文字离左上起点近)
  • 指定坐标xy为文字的右上点,则 anchors=‘ra’ 或 anchors=‘rt’
  • 指定坐标xy为文字的正中点,则anchors =‘mm’
  • 以此类推

三、小结

本文简要整理了自己工作中使用ImageDraw.text()时,文本对齐方式参数的使用方法。

你可能感兴趣的:(项目,python)