【中信项目案例分享】python 实现自动生成个性化生日贺卡
python 处理图片
1. 图片上添加文字
1.1 代码部分
- 代码原理: 创建与原图同等大小的一张图片, 设置透明度为 0, 将两张同大小的图片重叠
from PIL import Image,ImageDraw,ImageFont
# 底图添加字体文本
im = Image.open("./底图.png").convert('RGBA')
# 查看原图的大小
print(im.mode,im.size)
# 生成与原图大小完全一致的新图片,设定为完全透明
txt=Image.new('RGBA', im.size, (0,0,0,0))
# 设置字体,字号
fnt=ImageFont.truetype(r"C:\Windows\Fonts\STXINWEI.TTF", 50)
d=ImageDraw.Draw(txt)
# 拼接需要在图片上填写的文本
name = "xxx"
date_today = "2020-04-28"
a = """
亲爱的{0}:
叮。
确认收货:专属生日祝福!
快乐属于您,幸福属于您!
温馨属于您,好运属于您!
工作在忙碌,本能照顾您!
\r\r\r\r分行工会
\r\r\r\r{1}
""".format(name,date_today)
# 设置字体信息所在的位置,写入的信息,颜色
d.text((txt.size[0]-950,txt.size[1]-1300),a,font=fnt,fill=(28,28,28,255))
# 保存新的图片
out=Image.alpha_composite(im,txt)
out.save(r"NEW-1.png")
1.2 效果展示
1.2.1 原图展示
1.2.2 处理之后图片展示
2. 两张大小不一致的图片重叠
2.1 代码部分
import cv2
import numpy as np
import matplotlib.pyplot as plt
import os
from PIL import Image,ImageDraw,ImageFont
# 读取两张图片信息
os.chdir('E:\RPA\生日贺卡')
bear = cv2.imread('./baiyang+gou.png')
sky = cv2.imread('./NEW-1.png')
"""
bear 小图
sky 大图
"""
# 根据小图像的大小,在大图像上创建感兴趣区域roi(放置位置任意取)
rows, cols = bear.shape[:2] #获取bear的高度、宽度
roi = sky[0:rows, 0:cols]
dst = cv2.addWeighted(bear,1,roi,0,0) #图像融合,设置透明度,大小等
add_img = sky.copy() #对原图像进行拷贝
add_img[800:rows+800, 75:cols+75] = dst # 将融合后的区域放进原图,可通过改数值修改位置
# 读取融合之后的图片数据(数据类型为dateframe对象)
ret = cv2.cvtColor(add_img,cv2.COLOR_BGR2RGB)
im = Image.fromarray(ret)
im.save("./完整图.png")
print("图片保存完成")
2.2 效果展示
2.2.1 原图展示
2.2.2 处理之后图片展示
3. 图片数据保存的方式
3.1 matplotlib
模块
该模块是 pandas 安装包下的模块, 在RPA
设计器中可能会因为设计器的 python 包下不存在该模块包产生错误, 慎用!!!
import cv2
import matplotlib.pyplot as plt
ret = cv2.cvtColor(add_img,cv2.COLOR_BGR2RGB)
plt.imsave("./完整图.png",ret)
3.2 PIL
from PIL import Image
# ret 参数为读取到的图片数据,数据类型为dateframe
im = Image.fromarray(ret)
# path 参数为图片保存的路径
im.save(path)
3.3 cv2
import cv2
import numpy as np
cv2.imwrite("filename.png", np.zeros((10,10)))
3.4 scipy.misc
import scipy.misc
misc.imsave('out.jpg', image_array)
上面的 scipy 版本会标准化所有图像,以便 min(数据) 变成黑色,max(数据) 变成白色。如果数据应该是精确的灰度级或准确的 RGB 通道,则解决方案为:
import scipy.misc
misc.toimage(image_array, cmin=0.0, cmax=...).save('outfile.jpg')
程序猿哪来的女朋友【手动滑稽】
很好,我已经给女朋友发送了一封,他很高兴,所以我决定送 1000Y 币作为酬谢!
【活动】重金求助,快来帮帮我们吧!