51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
import os
|
|
from math import ceil, sqrt
|
|
from PIL import Image
|
|
import random
|
|
|
|
# 设置图片文件夹路径
|
|
folder_path = 'output2'
|
|
output_folder = 'output3'
|
|
output_path = 'output3/merged_image.png'
|
|
|
|
if not os.path.exists(output_folder):
|
|
os.makedirs(output_folder)
|
|
|
|
# 获取所有 PNG 文件
|
|
images = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.lower().endswith('.png')]
|
|
if not images:
|
|
print("没有找到 PNG 图片。")
|
|
exit()
|
|
|
|
random.shuffle(images)
|
|
|
|
num_images = len(images)
|
|
# 计算行数和列数,使得接近正方形
|
|
cols = ceil(sqrt(num_images))
|
|
rows = ceil(num_images / cols)
|
|
|
|
# 打开所有图片并获取尺寸
|
|
opened_images = [Image.open(img) for img in images]
|
|
widths, heights = zip(*(img.size for img in opened_images))
|
|
|
|
# 假设所有图片尺寸相同,如果不同,可以选择调整大小
|
|
max_width = max(widths)
|
|
max_height = max(heights)
|
|
|
|
# 创建一个新的空白图片
|
|
merged_width = cols * max_width
|
|
merged_height = rows * max_height
|
|
merged_image = Image.new('RGBA', (merged_width, merged_height), (255, 255, 255, 0))
|
|
|
|
# 将每张图片粘贴到合适的位置
|
|
for index, img in enumerate(opened_images):
|
|
row = index // cols
|
|
col = index % cols
|
|
x = col * max_width
|
|
y = row * max_height
|
|
merged_image.paste(img, (x, y))
|
|
|
|
# 保存合并后的图片
|
|
merged_image.save(output_path)
|
|
print(f"图片已成功合并并保存为 {output_path}")
|