You need to enable JavaScript to run this app. 如何用Python Pillow开发适配多图数量的网格拼接函数
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python Pillow开发适配多图数量的网格拼接函数

基于Pillow的多图自动网格拼接实现

环境准备

  • 执行pip install pillow完成基础依赖安装,无需深入掌握Pillow复杂操作逻辑,直接调用函数即可完成拼接

核心功能匹配

  • 传入18张待拼接图片时,函数自动匹配生成3行6列的规整网格排布
  • 无论图片总数为奇数还是偶数,均可正常运行,网格空缺位置自动生成同尺寸的空白占位块填充,不会出现画布错位、图片拉伸变形的问题
  • 最终输出的拼接效果对齐堡垒之夜物品商店类机器人的卡片拼图样式:单图尺寸统一、卡片间距均匀、整体画布整齐无杂乱留白

可直接复用的完整函数代码

from PIL import Image
import math

def create_image_grid(
    image_paths: list,
    cell_size: tuple = (300, 380),
    gap: int = 15,
    outer_margin: int = 20,
    bg_color: tuple = (32, 30, 40),
    placeholder_color: tuple = (60, 58, 68)
):
    img_count = len(image_paths)
    # 18张图强制适配3x6网格,满足指定规格
    if img_count == 18:
        cols, rows = 6, 3
    # 其他数量自动计算适配横向舒展的网格比例
    else:
        cols = math.ceil(math.sqrt(img_count * 2))
        rows = math.ceil(img_count / cols)

    # 计算整体画布尺寸
    canvas_width = outer_margin * 2 + cols * cell_size[0] + (cols - 1) * gap
    canvas_height = outer_margin * 2 + rows * cell_size[1] + (rows - 1) * gap
    canvas = Image.new("RGB", (canvas_width, canvas_height), bg_color)

    # 逐格填充内容
    for idx in range(rows * cols):
        col_pos = idx % cols
        row_pos = idx // cols
        x = outer_margin + col_pos * (cell_size[0] + gap)
        y = outer_margin + row_pos * (cell_size[1] + gap)

        # 超出实际图片数量的位置填充占位块
        if idx >= img_count:
            placeholder = Image.new("RGB", cell_size, placeholder_color)
            canvas.paste(placeholder, (x, y))
            continue

        # 加载图片并等比例缩放匹配单元格尺寸
        with Image.open(image_paths[idx]) as img:
            img.thumbnail(cell_size)
            # 居中放置图片,避免拉伸变形
            paste_x = x + (cell_size[0] - img.width) // 2
            paste_y = y + (cell_size[1] - img.height) // 2
            canvas.paste(img, (paste_x, paste_y))

    return canvas

调用方式

# 传入本地待拼接的图片路径列表,生成拼接完成的图像
result = create_image_grid(image_paths=["pic1.jpg", "pic2.jpg", "pic3.jpg"])
# 保存最终结果
result.save("grid_output.jpg")

参数说明

  • cell_size:单个图片卡片的宽高尺寸,可根据需求调整
  • gap:相邻卡片之间的间距数值
  • outer_margin:画布最外侧的留白宽度
  • bg_color:整体画布的背景颜色,默认匹配深色卡片拼图的视觉风格
  • placeholder_color:空缺位置填充的占位块颜色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 12:36:10