如何用Python Pillow为拼接图片填充空白区域为白色且不裁切缩放
解决方案:基于固定尺寸画布直接拼接,自动填充空白
核心思路是先创建1100x5000px的白色画布,再将需要拼接的图片按顺序粘贴到画布上,未被图片覆盖的区域天然就是白色,无需额外生成白图填充,能自动适配图片数量变化的场景。
实现步骤及代码
- 导入Pillow模块,定义固定目标画布尺寸
- 加载所有待拼接图片(需确保单图宽度不超过1100px,否则会超出画布边界;若有超宽图需提前处理)
- 校验图片总高度,避免超出画布高度导致裁切
- 逐个将图片粘贴到画布对应位置
- 保存最终拼接结果
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
相关产品推荐
相关产品推荐

