将一个图画到另外一个图的指定位置

简介: 将一个图画到另外一个图的指定位置
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)
    S_Img_w = 550
    S_Img_h = int(S_Img_w*(560/1200))
    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)
    w = 480
    h = 500
    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.show()
    # M_Img.save(save_img)

Picture_Synthesis("clothes.jpg","demo.psd","haha.jpg")
相关文章
|
4月前
|
存储 算法 C语言
找到数组位置
找到数组位置
|
11月前
|
索引
【Leetcode-27.移除元素 -35.搜索插入位置】
【Leetcode-27.移除元素 -35.搜索插入位置】
27 0
|
4月前
|
索引
将数组指定索引位置的元素 移动到 目标索引位置,且不改变其他元素原本的顺序,注意这个不是对调元素位置,是移动某一个元素位置不影响其他元素顺(使用场景:拖拽改变数据的顺序,点击上下左右箭头移动元素顺序)
将数组指定索引位置的元素 移动到 目标索引位置,且不改变其他元素原本的顺序,注意这个不是对调元素位置,是移动某一个元素位置不影响其他元素顺(使用场景:拖拽改变数据的顺序,点击上下左右箭头移动元素顺序)
|
4月前
|
机器学习/深度学习 算法 C++
【算法 | 实验6-1】n*n的网格,从左上角开始到右下角结束遍历所有的方块仅一次,总共有多少种不同的遍历路径
前言 思路介绍中省略了关于如何进行回溯搜索的细节,而主要讨论回溯中所使用的剪枝策略。
115 0
|
存储 编译器 C++
【c++】:list模拟实现“任意位置插入删除我最强ƪ(˘⌣˘)ʃ“
【c++】:list模拟实现“任意位置插入删除我最强ƪ(˘⌣˘)ʃ“
95 0
【IMAQ】imaqMakeRect() 返回指定位置和大小的矩形
【IMAQ】imaqMakeRect() 返回指定位置和大小的矩形
|
Python
【Excel自动化办公Part2】:向某个格子里写入内容、append()插入行、在表格中插入公式、插入行和列、删除行和列、移动格子
【Excel自动化办公Part2】:向某个格子里写入内容、append()插入行、在表格中插入公式、插入行和列、删除行和列、移动格子
215 0
【Excel自动化办公Part2】:向某个格子里写入内容、append()插入行、在表格中插入公式、插入行和列、删除行和列、移动格子
单链表任意位置插入
任意位置插入,第一个数据节点为0号下标
|
Web App开发
位置
位置
166 0
ZCMU - 2065: 打印十字图
ZCMU - 2065: 打印十字图
87 0
ZCMU - 2065: 打印十字图