使用Python合成图片(图片添加个性化文本,图片上叠加其他图片)
1.业务需求背景
业务提供一张底层图片1以及需要在底层图片上添加的图片2,两张图片大小不一致,将小图2添加到底图1中,并在其他的空白部分添加个性化的文本信息
2.图片处理逻辑
- 在底层图片上添加文本信息,图片另存到一个新的路径,命名为图3
- 将图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("图片保存完成")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理