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)