Python-opencv一键批量制作部门聘书(导入名单并在图片模板上加文字)

碎碎念(可跳过):上学期末大学的部门生活正式结束了,因为疫情原因,部门的聘书只能以电子版的形式发给大家,宣传部的同学需要在聘书的模板上一张张用photoshop填上几十号人的名字,调字体,调位置,调颜色什么的想想工作量就很大,而且容易出错。这学期刚装好了opencv库,就想着可以写代码用python+opencv一键生成所有人的聘书,ps制作的聘书已经拿到了,但是在网上搜索了一下,没有相关的博客,就自己写一篇吧,也许能帮助到未来其他宣传部的朋友。

首先导入需要的module

import cv2
from PIL import Image, ImageFont, ImageDraw
import numpy as np
import csv
#读入模板图片
img1 = cv2.imread('F:/batch_letter/template.jpg', cv2.IMREAD_COLOR)
#字体、颜色、填入字符串左上角的像素位置
font = ImageFont.truetype('C:/Windows/Fonts/simhei.ttf', 15)
color = (40, 77, 184)
pos0 = (278, 257)#填写部门的位置
pos1 = (84, 233)#填写姓名的位置

字体这里我用了电脑自带的黑体字,也可以选用其他的,打开C盘下的windows,在windows文件夹中,随便单击一个文件夹,选中后,按F,则可以快速找到fonts字体文件夹
Python-opencv一键批量制作部门聘书(导入名单并在图片模板上加文字)_第1张图片
我们的聘书中一共两个空要填,在ps中打开信息面板可以通过跟随鼠标确定像素点的位置和颜色信息

因为这里只是做演示,成员名单就瞎弄了一下,一般的话组织都会有通讯录,真正做的时候根据通讯录的名单调整就可以了
Python-opencv一键批量制作部门聘书(导入名单并在图片模板上加文字)_第2张图片
接着用csv库导入这两列

with open('F:/batch_letter/成员名单.csv')as f:
    f_csv = csv.reader(f)
    column0 = [row[0] for row in f_csv]
    print(column0)

with open('F:/batch_letter/成员名单.csv')as f:
    f_csv = csv.reader(f)
    column1 = [row[1] for row in f_csv]
    print(column1)

打印结果
在这里插入图片描述

最后一个循环写入就好啦~

for i in range(len(column0)):
    # opencv对象转PIL对象,将opencv的BGR通道转成RGB通道
    pil_image = Image.fromarray(cv2.cvtColor(img1, cv2.COLOR_BGR2RGB))
    text0 = column0[i]
    draw = ImageDraw.Draw(pil_image)
    draw.text(pos0, text0, font=font, fill=color)

    text1 = column1[i]
    draw = ImageDraw.Draw(pil_image)
    draw.text(pos1, text1, font=font, fill=color)
    # PIL对象转opencv对象,将PIL的RGB通道转成BGR通道
    final_img = cv2.cvtColor(np.asarray(pil_image), cv2.COLOR_RGB2BGR)
    #写入指定文件夹
    cv2.imwrite('F:/batch_letter/pinshu/' + str(i) + '.jpg', final_img)

本来想文件名用姓名来命名的,后来发现cv2.imwrite()中的路径不能带中文,那就数字编号吧,到时候每个成员在表格里自己对照着号码找也挺方便的
Python-opencv一键批量制作部门聘书(导入名单并在图片模板上加文字)_第3张图片
Python-opencv一键批量制作部门聘书(导入名单并在图片模板上加文字)_第4张图片
这是单张图的效果

参考文章:
https://www.codercto.com/a/77018.html Python+OpenCV 为图片添加中文水印与图片水印
https://blog.csdn.net/hengwen1991/article/details/52291119 Python 读取csv的某列
https://blog.csdn.net/xiaocao9903/article/details/53008613photoshop 获取像素坐标

最后,也是现学现做,如果有什么错误或者可以改进的地方欢迎讨论。

你可能感兴趣的:(csv,opencv,python)