Python实现将一张图片放到另一张图片指定的位置上并合成一张图
# -*- coding: utf-8 -*-
# by:Apsinc
# time:2019年12月10日
#Python实现将一张图片放到另一张图片指定的位置上并合成一张图
from PIL import Image
path = "C:/Users/Administrator/Desktop/QRCode/background.jpg"#母图详细文件名以及路径
img = Image.open(path)
# img = qr.make_image(fill_color="#555555", back_color="Red")
img = img.convert("RGBA") # CMYK/RGBA 转换颜色格式(CMYK用于打印机的色彩,RGBA用于显示器的色彩)
# 添加子图
icon = Image.open("C:/Users/Administrator/Desktop/QRCode/zitu.png")#子图文件名
# 获取图片的宽高
img_w, img_h = img.size#获取被放图片的大小(母图)
icon_w,icon_h=icon.size#获取小图的大小(子图)
factor = 6
size_w = int(img_w / factor)
size_h = int(img_h / factor)
icon_w, icon_h = icon.size
#防止子图尺寸大于母图
if icon_w > size_w:
icon_w = size_w
if icon_h > size_h:
icon_h = size_h
# # 重新设置子图的尺寸
# icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)
w = int((img_w - icon_w) / 2)
h = int((img_h - icon_h) / 2)
# 粘贴图片
img.paste(icon, (w, h), mask=None)
# 保存图片
img.save("C:/Users/Administrator/Desktop/QRCode/c.png")#合成后的图片路径以及文件名
为了方便下次调用最好封装成为模块
from PIL import Image
def Picture_Synthesis(mother_img,
son_img,
save_img,
coordinate=None):
"""
:param mother_img: 母图
:param son_img: 子图
:param save_img: 保存图片名
:param coordinate: 子图在母图的坐标
:return:
"""
#将图片赋值,方便后面的代码调用
M_Img = Image.open(mother_img)
S_Img = Image.open(son_img)
factor = 1#子图缩小的倍数1代表不变,2就代表原来的一半
#给图片指定色彩显示格式
M_Img = M_Img.convert("RGBA") # CMYK/RGBA 转换颜色格式(CMYK用于打印机的色彩,RGBA用于显示器的色彩)
# 获取图片的尺寸
M_Img_w, M_Img_h = M_Img.size # 获取被放图片的大小(母图)
print("母图尺寸:",M_Img.size)
S_Img_w, S_Img_h = S_Img.size # 获取小图的大小(子图)
print("子图尺寸:",S_Img.size)
size_w = int(S_Img_w / factor)
size_h = int(S_Img_h / factor)
# 防止子图尺寸大于母图
if S_Img_w > size_w:
S_Img_w = size_w
if S_Img_h > size_h:
S_Img_h = size_h
# # 重新设置子图的尺寸
# icon = S_Img.resize((S_Img_w, S_Img_h), Image.ANTIALIAS)
icon = S_Img.resize((S_Img_w, S_Img_h), Image.ANTIALIAS)
w = int((M_Img_w - S_Img_w) / 2)
h = int((M_Img_h - S_Img_h) / 2)
try:
if coordinate==None or coordinate=="":
coordinate=(w, h)
# 粘贴子图到母图的指定坐标(当前居中)
M_Img.paste(icon, coordinate, mask=None)
else:
print("已经指定坐标")
# 粘贴子图到母图的指定坐标(当前居中)
M_Img.paste(icon, coordinate, mask=None)
except:
print("坐标指定出错 ")
# 保存图片
M_Img.save(save_img)
调用方法
Picture_Synthesis(mother_img="C:/Users/Administrator/Desktop/QRCode/b.jpg",
son_img="C:/Users/Administrator/Desktop/QRCode/y.png",
save_img="C:/Users/Administrator/Desktop/QRCode/newimg.png",
coordinate=None#如果为None表示直接将子图在母图中居中也可以直接赋值坐标
# coordinate=(50,50)
)
母图
子图
最终效果
好的,这就不必过多的介绍代码了,全在注释中,有问题欢迎留言!有错误也欢迎您慷慨指正!