当前位置: 首页 > news >正文

手把手教你用 Python 批量拼接图片(无需ps,适用快速修改拼接)

手把手教你用 Python 批量拼接图片(无需ps,适用快速修改拼接)

** 背景介绍**
日常工作或学习中,我们经常会遇到这样的问题:

  • 有一堆图片(比如实验截图、作品图、论文附图)
  • 想按固定排版拼接成一张大图
  • 要求清晰度不能降低
  • 还要自动分组,批量生成多张拼图

如果手动用 PS 一张张拖拽,不仅累,还容易出错。

今天这段 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。")returnvalid_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("未找到图片,请检查路径。")returnwith Image.open(image_files[0]) as first_img:img_width, img_height = first_img.sizeinput_extension = os.path.splitext(image_files[0])[1]img_mode = first_img.modeimg_dpi = first_img.info.get('dpi') print(f"单图尺寸: {img_width} x {img_height}")canvas_width = COLS * img_widthcanvas_height = (ROWS * img_height) + BOTTOM_PADDINGgroups = [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 // COLScol_idx = idx % COLSx = col_idx * img_widthy = row_idx * img_heightcanvas.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'] = 100save_params['subsampling'] = 0if img_dpi:save_params['dpi'] = img_dpicanvas.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. 高清保存
http://www.jsqmd.com/news/384868/

相关文章:

  • Linux 防火墙 iptables 中核心的四张表概述及其功能
  • (交易不活跃)的股票,在熊市中非常危险!
  • Redis如何保证与数据库的双写一致性
  • 我想找豆包做广告,怎么联系合规服务商? - 品牌2025
  • 2026金相显微镜市场新动态,优质供应商推荐,金相切割机/布洛维硬度计/电脑控制液压万能试验机,金相显微镜实力厂家选哪家 - 品牌推荐师
  • Claude Code 一键启动 + 自动安装:四种 macOS 终端的自动化实现与踩坑记录
  • FA_规划和控制(PC)-A*(规划01)
  • 2026成都现浇楼板公司技术哪家强?看排行!现浇屋顶/现浇钢筋混凝土/混凝土现浇,现浇楼板公司口碑推荐口碑排行 - 品牌推荐师
  • 2026采购陶百叶?这些口碑商家别错过,陶土板/陶砖/陶棍/陶百叶/陶板,陶百叶干挂材料电话 - 品牌推荐师
  • EasyTier 免费自建自用5$每个月的服务器
  • 巨象金业内地金融交易资质存疑,深夜黄金暴跌APP被曝滑点黑洞引争议!
  • 国内热门磨抛机生产厂家选哪家?2026优质厂商揭秘,全自动弹簧试验机/便携布氏硬度计,磨抛机源头厂家口碑推荐 - 品牌推荐师
  • 摆脱论文困扰!千笔AI,抢手爆款的降AIGC工具
  • 基于AIS数据集的机器学习船舶轨迹预测系统:新加坡水域船只监控与未来位置预测的挑战与解决方案
  • Python基于Vue的基于Spark的校园大数据学生行为分析与预测系统 django flask pycharm
  • 把坑都踩完了,AI论文写作软件 千笔写作工具 VS 灵感ai
  • Python基于Django的“梅狸猫”宠物医院系统的设计与实现
  • Python基于Vue的猪场/马场畜牧业养殖信息管理系统的设计与实现
  • 可编辑模式(editable mode) 安装该框架
  • React Native鸿蒙:LayoutAnimation配置弹簧动画 - 实践
  • 使用 IntelliJ IDEA 轻松连接 Java 与 MySQL 8 数据库完整教程:从入门到实战部署
  • 2026第四次周报
  • GESP认证C++编程真题解析 | 202509 七级
  • 2026Q1上海靠谱装修公司TOP5排行榜(便民版好懂好选) - 品牌智鉴榜
  • 【雷达原理 学习笔记 卫青老师】56. P56 雷达作用距离(十三)
  • 寒假天梯赛模拟
  • 无线充电qi协议总结
  • 基于大数据的电子商务个性化推荐系统 爬虫可视化分析
  • 智能体API的轻量级授权实验:基于令牌的实用PoC指南
  • 基于大数据的银行业务智能营销系统爬虫 可视化大屏