You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定列表使用PIL包循环合并指定图片?

合并指定列表中的图片(PIL实现)

核心思路

  1. 从w.txt读取需要合并的文件名
  2. 循环遍历文件名列表,加载对应图片
  3. 统一尺寸后循环粘贴图片完成合并

修改后的完整代码

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")

关键循环说明

  1. 加载图片的循环:遍历从w.txt读取的文件名列表,逐个打开对应.png文件,把有效图片存入列表,同时处理文件不存在的异常。
  2. 粘贴图片的循环:遍历已加载的图片列表,依次把图片粘贴到空白画布上,通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 04:56:05