欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用Python合成图片(图片添加个性化文本,图片上叠加其他图片)

程序员文章站 2022-07-09 19:34:55
1.业务需求背景 业务提供一张底层图片1以及需要在底层图片上添加的图片2,两张图片大小不一致,将小图2添加到底图1中,并在其他的空白部分添加个性化的文本信息 2.图片处理逻辑 在底层图片上添加文本信息,图片另存到一个新的路径,命名为图3 将图3和图2合并,处理位置信息,透明率等,将处理完成之后的图片 ......

1.业务需求背景

业务提供一张底层图片1以及需要在底层图片上添加的图片2,两张图片大小不一致,将小图2添加到底图1中,并在其他的空白部分添加个性化的文本信息

2.图片处理逻辑

  1. 在底层图片上添加文本信息,图片另存到一个新的路径,命名为图3
  2. 将图3和图2合并,处理位置信息,透明率等,将处理完成之后的图片另存到新的路径,命名为图4

3.代码处理部分

3.1 图片上添加文本信息

 1 from pil import image,imagedraw,imagefont
 2 # 底图添加字体文本
 3 
 4 im = image.open("./底图.png").convert('rgba')
 5 
 6 # 查看原图的大小
 7 print(im.mode,im.size) 
 8 # 生成与原图大小完全一致的新图片,设定为完全透明
 9 txt=image.new('rgba', im.size, (0,0,0,0)) 
10 # 设置字体,字号
11 fnt=imagefont.truetype(r"c:\windows\fonts\stxinwei.ttf", 50)
12 d=imagedraw.draw(txt)
13 # 拼接需要在图片上填写的文本
14 name = "李敏"
15 date_today = "2020-04-28"
16 a = """
17     亲爱的{0}:
18             叮。
19             确认收货:专属生日祝福!
20             快乐属于您,幸福属于您!
21             温馨属于您,好运属于您!
22             工作在忙碌,本能照顾您!
23                                 
24                                \r\r\r\rxx部门
25                                \r\r\r\r{1}                   
26 """.format(name,date_today)
27 # 设置字体信息所在的位置,写入的信息,颜色
28 d.text((txt.size[0]-950,txt.size[1]-1300),a,font=fnt,fill=(28,28,28,255))
29 # 保存新的图片
30 out=image.alpha_composite(im,txt)
31 out.save(r"new-1.png")

3.2 两张大小不一致的图片重叠

 1 import cv2
 2 import numpy as np
 3 import matplotlib.pyplot as plt
 4 import os
 5 from pil import image,imagedraw,imagefont
 6 # 读取两张图片信息
 7 os.chdir('e:\rpa\生日贺卡')
 8 bear = cv2.imread('./baiyang+gou.png')
 9 sky = cv2.imread('./new-1.png')
10 """
11 bear  小图
12 sky   大图
13 """
14 # 根据小图像的大小,在大图像上创建感兴趣区域roi(放置位置任意取)
15 rows, cols = bear.shape[:2] #获取bear的高度、宽度
16 roi = sky[0:rows, 0:cols]
17 
18 dst = cv2.addweighted(bear,1,roi,0,0) #图像融合,设置透明度,大小等
19 add_img = sky.copy() #对原图像进行拷贝
20 add_img[800:rows+800, 75:cols+75] = dst  # 将融合后的区域放进原图,可通过改数值修改位置
21 # 读取融合之后的图片数据(数据类型为dateframe对象)
22 ret = cv2.cvtcolor(add_img,cv2.color_bgr2rgb)
23 
24 im = image.fromarray(ret)
25 im.save("./完整图.png")
26 print("图片保存完成")