60 lines
2.6 KiB
Python
60 lines
2.6 KiB
Python
|
import os
|
||
|
import random
|
||
|
from PIL import Image
|
||
|
|
||
|
def is_image_file(file_path):
|
||
|
valid_extensions = (".png", ".jpg", ".jpeg", ".gif", ".bmp") # 可识别的图片格式
|
||
|
_, extension = os.path.splitext(file_path)
|
||
|
return extension.lower() in valid_extensions
|
||
|
|
||
|
def overlay_images(background_folder, overlay_folder, output_folder):
|
||
|
# 获取背景图片列表
|
||
|
background_files = [file for file in os.listdir(background_folder) if is_image_file(file)]
|
||
|
overlay_files = [file for file in os.listdir(overlay_folder) if is_image_file(file)]
|
||
|
|
||
|
# 确保输出文件夹存在
|
||
|
if not os.path.exists(output_folder):
|
||
|
os.makedirs(output_folder)
|
||
|
|
||
|
# 循环遍历每个背景图片
|
||
|
for bg_file in background_files:
|
||
|
bg_path = os.path.join(background_folder, bg_file)
|
||
|
background = Image.open(bg_path).convert("RGBA")
|
||
|
|
||
|
# 获取背景图片的宽高
|
||
|
bg_width, bg_height = background.size
|
||
|
min_dimension = min(bg_width, bg_height)
|
||
|
new_size = (min_dimension // 2, min_dimension // 2)
|
||
|
|
||
|
# 循环遍历每个透明背景图片,并依次进行合成
|
||
|
for overlay_file in overlay_files:
|
||
|
overlay_path = os.path.join(overlay_folder, overlay_file)
|
||
|
overlay = Image.open(overlay_path).convert("RGBA")
|
||
|
|
||
|
# 调整透明背景图片的大小
|
||
|
overlay.thumbnail(new_size, Image.LANCZOS)
|
||
|
|
||
|
# 随机生成合成图片的位置,确保不超出背景图片边界
|
||
|
max_x = bg_width - overlay.width
|
||
|
max_y = bg_height - overlay.height
|
||
|
position = (random.randint(0, max_x), random.randint(0, max_y))
|
||
|
|
||
|
# 创建新的背景图,并将透明背景图片按照透明度融合上去
|
||
|
merged_image = background.copy()
|
||
|
merged_image.alpha_composite(overlay, dest=position)
|
||
|
|
||
|
# 将合成后的图片调整到背景图片的一半大小
|
||
|
merged_image.thumbnail(new_size, Image.LANCZOS)
|
||
|
|
||
|
# 保存合成图片
|
||
|
output_path = os.path.join(output_folder, f"merged_{bg_file}_{overlay_file}")
|
||
|
merged_image.save(output_path, "PNG")
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
# 输入文件夹路径
|
||
|
background_folder = "/Users/zhenzhipeng/development/数据集相关文件/背景"
|
||
|
overlay_folder = "/Users/zhenzhipeng/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/abb33b2d6c9d8decd9ef7c0ddebe8cc2/Message/MessageTemp/050dd051d428f6b6f4a308cc5b7bef67/File/data/blue_plate"
|
||
|
output_folder = "/Users/zhenzhipeng/development/数据集相关文件/chepai"
|
||
|
|
||
|
overlay_images(background_folder, overlay_folder, output_folder)
|