批量一张图片合成到另一张图片

from PIL import Image
import numpy as np

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)

    x1=M_Img_w-S_Img_w
    y1=M_Img_h-S_Img_h
    x=np.random.randint(0, x1, 1)
    y = np.random.randint(0, y1, 1)

    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)
            coordinate = (x, y)
            # 粘贴子图到母图的指定坐标(当前居中)
            M_Img.paste(icon, coordinate, mask=None)
        else:
            print("已经指定坐标")
            # 粘贴子图到母图的指定坐标(当前居中)
            M_Img.paste(icon, coordinate, mask=None)
    except:
        print("坐标指定出错 ")
    # 保存图片
    M_Img = M_Img.convert('RGB')
    M_Img.save(save_img)

for i in range(0,4000):
    M_path = "G:/picAdd/workHouse/"
    S_path = "G:/picAdd/fire/"
    m = np.random.randint(1, 1000, 1)
    s = np.random.randint(1, 108, 1)
    M_path = M_path + str(m[0]) + ".jpg"
    S_path = S_path + str(s[0]) + ".jpg"
    Save_path="G:/picAdd/workHouseFire/"+str(i)+".jpg"
    Picture_Synthesis(mother_img=M_path,
                  son_img=S_path,
                  save_img=Save_path,
                  coordinate=None#如果为None表示直接将子图在母图中居中也可以直接赋值坐标
                  # coordinate=(50,50)
                 )
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现批量下载图片功能的步骤如下: 1. 创建一个空的GameObject,并将以下脚本组件添加到它上面: ```csharp using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ImageDownloader : MonoBehaviour { public string[] imageUrls; // 存储图片链接的数组 public Image image; // 显示图片的UI组件 private int currentIndex = 0; // 当前图片的索引 // 点击事件处理函数 public void OnNextButtonClick() { StartCoroutine(DownloadImage(imageUrls[currentIndex])); currentIndex = (currentIndex + 1) % imageUrls.Length; // 循环遍历图片链接数组 } // 下载图片的协程函数 private IEnumerator DownloadImage(string url) { WWW www = new WWW(url); yield return www; if (www.error == null) { Texture2D texture = www.texture; Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero); image.sprite = sprite; } else { Debug.LogError("下载图片失败:" + www.error); } } } ``` 2. 在场景中添加一个Image UI组件,并将其挂载到刚才创建的GameObject上。 3. 在Unity编辑器中将需要下载的图片链接添加到ImageDownloader组件的imageUrls数组中。 4. 在场景中添加一个Button UI组件,并将它的OnClick事件绑定到ImageDownloader组件的OnNextButtonClick函数上。 5. 运行程序,点击按钮即可开始下载图片。每次点击按钮都会下载下一张图片并显示在Image UI组件中。 注意:上述代码仅供参考,具体实现方式可能会因项目需求而异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值