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

如何用Python Pillow为拼接图片填充空白区域为白色且不裁切缩放

解决方案:基于固定尺寸画布直接拼接,自动填充空白

核心思路是先创建1100x5000px的白色画布,再将需要拼接的图片按顺序粘贴到画布上,未被图片覆盖的区域天然就是白色,无需额外生成白图填充,能自动适配图片数量变化的场景。

实现步骤及代码

  1. 导入Pillow模块,定义固定目标画布尺寸
  2. 加载所有待拼接图片(需确保单图宽度不超过1100px,否则会超出画布边界;若有超宽图需提前处理)
  3. 校验图片总高度,避免超出画布高度导致裁切
  4. 逐个将图片粘贴到画布对应位置
  5. 保存最终拼接结果
from PIL import Image

# 固定目标拼接尺寸
TARGET_SIZE = (1100, 5000)
# 替换为你的待拼接图片路径列表
image_paths = ["img1.jpg", "img2.png", "img3.jpeg"]

# 加载所有图片
imgs = [Image.open(path) for path in image_paths]

# 检查单图宽度是否合规(防止超出画布)
for img in imgs:
    if img.width > TARGET_SIZE[0]:
        raise ValueError(f"图片宽度{img.width}px超过目标宽度{TARGET_SIZE[0]}px,无法实现无裁切拼接")

# 计算所有图片总高度
total_img_height = sum(img.height for img in imgs)

# 检查总高度是否合规(防止裁切)
if total_img_height > TARGET_SIZE[1]:
    raise ValueError(f"图片总高度{total_img_height}px超过目标高度{TARGET_SIZE[1]}px,无法实现无裁切拼接")

# 创建白色背景画布
canvas = Image.new("RGB", TARGET_SIZE, color="white")

# 逐个粘贴图片(示例为水平居中,可按需调整对齐方式)
current_y = 0
for img in imgs:
    # 水平居中计算x坐标,左对齐设为0,右对齐设为TARGET_SIZE[0]-img.width
    x_pos = (TARGET_SIZE[0] - img.width) // 2
    canvas.paste(img, (x_pos, current_y))
    current_y += img.height

# 保存最终拼接图
canvas.save("final_concat_image.png")

关键细节说明

  • 对齐方式可灵活调整:左对齐直接将x_pos设为0,右对齐设为TARGET_SIZE[0] - img.width即可
  • 图片数量变更时,代码会自动计算剩余空白高度,画布未被覆盖区域保持白色,无需手动调整填充逻辑
  • 提前做尺寸校验,从根源避免图片被裁切或缩放的问题,完全匹配你的需求

内容的提问来源于stack exchange,提问作者havagoooday

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:00:54