python3根据模板图片批量自动制作个性化请柬或名片

您所在的位置:网站首页 制作电子名片模板图片 python3根据模板图片批量自动制作个性化请柬或名片

python3根据模板图片批量自动制作个性化请柬或名片

2024-07-04 22:03| 来源: 网络整理| 查看: 265

需求:按照模板图片,在指定位置写入人员名字,形成个性化请柬或个性化名片,批量自动写入

          横排竖排随意变化(程序配置)

本文对之前两个代码进行优化,相关配置及环境请参考前两个文章:

Python3使用PIL在图片中写文字支持中文:https://mp.csdn.net/postedit/83855415

Python3图片中竖排文字:https://mp.csdn.net/postedit/83857566

 

话不多说,请看效果图

自动根据模板产生的多个相同图片文件:

张三的请柬:

李四的请柬

 

横排文字与竖排文字,在程序中配置

文字位置由程序配置指定

可以设置字体大小及颜色

保存路径可以指定

 

请看代码:

#需求:按照模板图片,在指定位置写入人员名字,形成个性化请柬或个性化名片 #功能:通过模板图片 写入文字到指定位置,并分别保存成新的图片 #功能说明:根据";"间隔单个人员,根据","换行(也可以根据"\n"换行 #环境:PyDev 6.5.0 Python3.5.2 #说明:PIL仅支持到python2.7,python3要使用PIL需安装pip3 install Pillow #python2与python3共存配置方法https://www.cnblogs.com/thunderLL/p/6643022.html import PIL from PIL import ImageFont from PIL import Image from PIL import ImageDraw #初始化字符串 strs = "往后余生,风雪是你,平淡是你,清贫也是你,荣华是你,心底温柔是你,目光所致,也是你" #"" strs = "张三 邀请您参加宴会, 地点:长安路;李四 邀请您参加宴会, 地点:长安路;王五 邀请您参加宴会, 地点:长安路" #strs = "张三\n 诚邀您参加诚邀您参加XXX婚礼, 地址:长安路地球村520号, 联系电话:13111111111;李四\n 诚邀您参加XXX婚礼, 地址:长安路地球村520号, 联系电话:13111111111" #打开模板图片 imageFile = "F:\\family\\模板图片.jpg"#"F:\\family\\请柬模板.JPG" #新文件保存路径 file_save_dir = "F:\\family\\qingjian\\" #初始化参数 x = 300 #横坐标(左右) y = 20 #纵坐标(上下) word_size = 50 #文字大小 word_css = "C:\\Windows\\Fonts\\STXINGKA.TTF" #字体文件 行楷 #STXINGKA.TTF华文行楷 simkai.ttf 楷体 SIMLI.TTF隶书 minijianhuangcao.ttf 迷你狂草 kongxincaoti.ttf空心草 r = 255 #画笔字体颜色 g = 255 #画笔字体颜色字体颜色 b = 0 #画笔字体颜色字体颜色 (255,255,0) 黄色 direction = 0 #文字方向 0横向(默认) 1竖向 row_hight = 0 #行高设置(文字行距,可以小于0) 竖向时设置 word_dir = 0 #文字间距 竖向时设置 #设置字体,如果没有,也可以不设置 font = ImageFont.truetype(word_css,word_size) # 在图片上添加文字 1 #draw = ImageDraw.Draw(im1) # 0 + 0 * 256 + 0 * 256 * 256 #黑色 255 + 0 * 256 + 0 * 256 * 256 #红色 0 + 0 * 256 + 255 * 256 * 256 #蓝色 #draw.ink = 255 + 0 * 256 + 0 * 256 * 256 #红色 #画笔的颜色可以通过draw的ink属性来改变: #draw.ink = 0(R) + 0(G) * 256 + 0(B) * 256 * 256 #返回一个二元素元组,为指定text在指定字体大小之后的size #Font.getsize(text) #功能:竖向画笔写入文字 #参数:x,y 坐标 i,s编号及文字,im1图片 font字体 im1模板图片 row_hight行高(行距) word_dir文字间距 #功能:竖向画笔写入文字 #参数:x,y 坐标 i,s编号及文字,im1图片 font字体 im1模板图片 row_hight行高(行距) word_dir文字间距 def draw_2(x,y,i,s,font,im1,row_hight,word_dir): draw = ImageDraw.Draw(im1) #draw.text((x, y),s.replace(",","\n"),(r,g,b),font=font) #设置位置坐标 文字 颜色 字体 right = 0 #往右位移量 down = 0 #往下位移量 w = 500 #文字宽度(默认值) h = 500 #文字高度(默认值) #row_hight = -50 #行高设置(文字行距) #word_dir = 0; #文字间距 for k,s2 in enumerate(s): if k == 0: w,h = font.getsize(s2) #获取第一个文字的宽和高 if s2 == "," or s2 == "\n" : right = right + w + row_hight down = 0 continue else : down = down + h + word_dir #print("序号-值",k,s2) #print("宽-高",w,h) #print("位移",right,down) #print("坐标",x+right, y+down) draw.text((x+right, y+down),s2,(r,g,b),font=font) #设置位置坐标 文字 颜色 字体 #draw.text((1000+x+right-row_hight, y+down-word_dir),s2,(r,g,b),font=font) #定义文件名 数字需要用str强转 new_filename = file_save_dir + str(i) + "-" + s.replace(",","-").replace("\n","-") + ".jpg" im1.save(new_filename) del draw #删除画笔 #功能:横向画笔写入文字 #参数:x,y 坐标 i,s编号及文字 font字体 im1模板图片 def draw_1(x,y,i,s,font,im1): #print(i,s) #print(font.getsize(s)) draw = ImageDraw.Draw(im1) draw.text((x, y),s.replace(",","\n"),(r,g,b),font=font) #设置位置坐标 文字 颜色 字体 #draw.text((x+200, y+600),s.replace(",","\n"),(r,g,b),font=font) #设置位置坐标 文字 颜色 字体 #定义文件名 数字需要用str强转 new_filename = file_save_dir + str(i) + "-"+s.replace(",","-").replace("\n","-")+".jpg" im1.save(new_filename) del draw #删除画笔 #分割得到数组 strs2 = strs.split(";") if direction == 0 : #横向 for i,ss in enumerate(strs2): print(i+1,ss) im1=Image.open(imageFile) draw_1(x,y,i+1,ss,font,im1) im1.close() #elif direction == 1 : #竖向 else : #竖向 print("竖向文字") for i,ss in enumerate(strs2): print(i+1,ss) im1=Image.open(imageFile) draw_2(x,y,i+1,ss,font,im1,row_hight,word_dir) im1.close() #print("ERROR:指定了错误的格式")

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3