如何基于指定列表使用PIL包循环合并指定图片?
合并指定列表中的图片(PIL实现)
核心思路
- 从
w.txt读取需要合并的文件名 - 循环遍历文件名列表,加载对应图片
- 统一尺寸后循环粘贴图片完成合并
修改后的完整代码
from PIL import Image # 读取w.txt中的目标文件名,处理掉空行 with open("w.txt", "r", encoding="utf-8") as f: target_names = [line.strip() for line in f if line.strip()] # 循环加载所有目标图片 loaded_images = [] for name in target_names: img_path = f"{name}.png" try: # 转成RGB格式避免透明通道干扰合并 img = Image.open(img_path).convert("RGB") loaded_images.append(img) except FileNotFoundError: print(f"⚠️ 图片 {img_path} 不存在,跳过") if not loaded_images: print("❌ 没有可合并的图片") exit() # 计算合并后图片的尺寸(以最宽图片为宽度,高度累加) max_width = max(img.width for img in loaded_images) total_height = sum(img.height for img in loaded_images) # 创建空白画布,循环粘贴图片 merged_img = Image.new("RGB", (max_width, total_height)) current_y = 0 for img in loaded_images: # 让图片在画布中水平居中 paste_x = (max_width - img.width) // 2 merged_img.paste(img, (paste_x, current_y)) current_y += img.height # 保存合并结果 merged_img.save("merged_result.png") print("✅ 合并完成,结果已保存为merged_result.png")
关键循环说明
- 加载图片的循环:遍历从
w.txt读取的文件名列表,逐个打开对应.png文件,把有效图片存入列表,同时处理文件不存在的异常。 - 粘贴图片的循环:遍历已加载的图片列表,依次把图片粘贴到空白画布上,通过
current_y变量跟踪当前粘贴的垂直位置,每粘贴一张就累加图片高度,实现纵向合并。
如果需要横向合并,只需要把尺寸计算改成max_height = max(img.height for img in loaded_images)、total_width = sum(img.width for img in loaded_images),粘贴时跟踪current_x即可。
内容的提问来源于stack exchange,提问作者Programmer_nltk
相关产品推荐
相关产品推荐

