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

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("图片保存完成")
复制代码

 

posted @   徐凯K  阅读(2338)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示