今天这段 Python 代码可以帮你:

✅ 自动读取文件夹内所有图片
✅ 按 2×5 排列(可自定义)
✅ 自动按数字顺序排序(1.jpg → 2.jpg → 10.jpg 不会乱序)
✅ 自动保持原始分辨率
✅ 批量生成拼图

运行后,你会在原文件夹里看到:
collage_final.jpg
如果图片超过 9 张,会自动生成:
collage_final_1.jpg collage_final_2.jpg
代码功能说明
这段代码的核心作用只有一句话:
把一个文件夹里的图片,按 3 行 × 3 列排好,拼成一张高清大图。
它的工作流程可以理解为:

  1. 找到所有图片
  2. 排序
  3. 创建一张大白画布
  4. 把图片一张张“贴”上去
  5. 保存为高清文件

适合:

  • 论文图片拼接
  • 实验截图汇总
  • 产品展示图制作
  • 批量图片整理

运行环境准备

  • [1] 安装 Python
    要求:
    Python 3.8 及以上版本
    如果没有安装,去官网下载并安装:
    https://www.python.org/downloads/
    安装时务必勾选:
    Add Python to PATH

  • [2] 安装依赖库
    -这段代码只用到一个库:Pillow
    pip install pillow

详细运行步骤

  • [1] 准备图片文件夹
    比如你有一个文件夹:D:\image_test
    里面放:
1.jpg
2.jpg
3.jpg
...
9.jpg
  • [2] 新建 Python 文件
    在任意位置新建:collage.py
    把下面的完整代码复制进去:

点击查看代码

import re
from PIL import Image
import os

# ==================== 手动配置区 ====================
TARGET_PATH = r'D:\【your_folder】' 
IMAGES_PER_GROUP = 9           
ROWS = 3                       
COLS = 3       
BOTTOM_PADDING = 20  
# ===================================================

def natural_sort_key(s):
    """自然排序:确保 1.jpg, 2.jpg, 10.jpg 按数字顺序排列"""
    return [int(text) if text.isdigit() else text.lower()
            for text in re.split('([0-9]+)', s)]

def create_collage(folder_path):

    if not os.path.exists(folder_path):
        print("路径不存在,请检查 TARGET_PATH。")
        return

    valid_extensions = ('.jpg', '.jpeg', '.png', '.bmp', '.webp', '.tiff')
    raw_files = [
        f for f in os.listdir(folder_path) 
        if f.lower().endswith(valid_extensions)
    ]
    
    raw_files = [f for f in raw_files if "collage_final" not in f]

    image_files = sorted(
        [os.path.join(folder_path, f) for f in raw_files],
        key=lambda x: natural_sort_key(os.path.basename(x))
    )
    
    if not image_files:
        print("未找到图片,请检查路径。")
        return

    with Image.open(image_files[0]) as first_img:
        img_width, img_height = first_img.size
        input_extension = os.path.splitext(image_files[0])[1]
        img_mode = first_img.mode
        img_dpi = first_img.info.get('dpi') 

        print(f"单图尺寸: {img_width} x {img_height}")

    canvas_width = COLS * img_width
    canvas_height = (ROWS * img_height) + BOTTOM_PADDING
    
    groups = [
        image_files[i:i + IMAGES_PER_GROUP]
        for i in range(0, len(image_files), IMAGES_PER_GROUP)
    ]
    
    for group_num, group_images in enumerate(groups):

        canvas = Image.new(img_mode, (canvas_width, canvas_height), color='white')
        
        for idx, img_path in enumerate(group_images):
            try:
                with Image.open(img_path) as img:

                    if img.size != (img_width, img_height):
                        img = img.resize((img_width, img_height), Image.Resampling.LANCZOS)
                    
                    if img.mode != img_mode:
                        img = img.convert(img_mode)
                        
                    row_idx = idx // COLS
                    col_idx = idx % COLS
                    x = col_idx * img_width
                    y = row_idx * img_height
                    
                    canvas.paste(img, (x, y))
                
            except Exception as e:
                print(f"处理出错: {img_path}, 原因: {e}")
        
        suffix = f"_{group_num + 1}" if len(groups) > 1 else ""
        save_filename = f"collage_final{suffix}{input_extension}"
        save_path = os.path.join(folder_path, save_filename)
        
        save_params = {}

        if input_extension.lower() in ['.jpg', '.jpeg']:
            save_params['quality'] = 100
            save_params['subsampling'] = 0
        
        if img_dpi:
            save_params['dpi'] = img_dpi
            
        canvas.save(save_path, **save_params)
        print(f"成功生成: {save_filename}")

if __name__ == "__main__":
    create_collage(TARGET_PATH)
  • [3] 修改路径
    找到:TARGET_PATH = r'D:\【your_folder】'
  • [4] 其他参数:
    IMAGES_PER_GROUP为照片总数
    ROWS为行数
    COLS为列数
    BOTTOM_PADDING为底部留白的像素
  • [5] 运行代码查看结果
    打开图片文件夹,你会看到拼好的大图。
    特点:
  • 预设可以X行Y列排列
  • 顺序正确
  • 底部多 Zpx 留白

现成软件下载链接:豆包
总结

这段脚本做的事情非常简单:

  1. 读取图片
  2. 排序
  3. 建立大画布
  4. 按 X×Y 粘贴
  5. 高清保存

分类: 地信遥感处理

免责声明:本内容来自平台创作者,博客园系信息发布平台,仅提供信息存储空间服务。

好文要顶 关注我 收藏该文 微信分享

Laurentianelle
粉丝 - 4 关注 - 0

+加关注

0

0

升级成为会员


» 下一篇: 手把手教你用 Python 实现批量文件夹 RAR 压缩

posted on 2026-02-15 17:20  Laurentianelle  阅读(205)  评论(0)    收藏  举报

刷新页面返回顶部

登录后才能查看或发表评论,立即 登录 或者 逛逛 博客园首页

【推荐】 凌霞 618 年中大促,Halo 与 1Panel 产品全线半价,叠加满减!
【推荐】HarmonyOS 6.1.0 创新特性“悬浮页签+沉浸光感”精品文章专题
【推荐】科研领域的连接者艾思科蓝,一站式科研学术服务数字化平台

编辑推荐:

昵称: Laurentianelle
园龄: 5个月
粉丝: 4
关注: 0

+加关注

< 2026年6月 >
31 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 1 2 3 4
5 6 7 8 9 10 11

搜索

常用链接

随笔分类

随笔档案

阅读排行榜

评论排行榜

推荐排行榜

博客园  ©  2004-2026
​编辑浙公网安备 33010602011771号 浙ICP备2021040463号-3

更多推荐