Python 批量生成九宫格切图 朋友圈九图教程
用 Pillow 把一张大图平均切成 3x3 九块,按顺序命名输出,适合朋友圈九宫格、小红书配图、海报切片,几行代码搞定。
场景痛点
朋友圈要发九宫格,拿修图软件把一张大图切成九块,导出顺序还经常搞错。用 Python 把一张图平均分成 3x3,按从左到右、从上到下命名 01.png~09.png,发朋友圈直接按顺序选图,多图批量处理也行。
用到的库
pip install Pillow
完整代码
# -*- coding: utf-8 -*-
# 把一张图切成 3x3 九宫格,或批量把文件夹里的图都切一遍
import os
from PIL import Image
IMG_EXTS = {".jpg", ".jpeg", ".png", ".bmp", ".webp"}
def cut_nine_grid(src_path, out_dir, prefix="grid"):
"""把 src 切成 3x3,输出 01~09"""
os.makedirs(out_dir, exist_ok=True)
with Image.open(src_path) as im:
im = im.convert("RGB")
w, h = im.size
cw, ch = w // 3, h // 3 # 每块宽高
idx = 1
for row in range(3):
for col in range(3):
box = (col * cw, row * ch,
(col + 1) * cw, (row + 1) * ch)
piece = im.crop(box)
out = os.path.join(out_dir, f"{prefix}_{idx:02d}.jpg")
piece.save(out, quality=92)
print(f"切出 {out}")
idx += 1
def batch_cut_folder(input_dir, output_root):
os.makedirs(output_root, exist_ok=True)
for name in sorted(os.listdir(input_dir)):
if os.path.splitext(name)[1].lower() not in IMG_EXTS:
continue
base, _ = os.path.splitext(name)
cut_nine_grid(os.path.join(input_dir, name),
os.path.join(output_root, base), prefix=base)
if __name__ == "__main__":
# 单张图切九宫格
cut_nine_grid("./poster.jpg", "./nine_out", prefix="poster")
# 批量把整个文件夹里的图都切一遍
# batch_cut_folder("./photos", "./all_nine")
代码讲解
- 九宫格本质就是
crop九次。把图宽高各除以 3,得到每块的cw、ch。 - 双层循环
row0~2、col0~2,坐标框(col*cw, row*ch, (col+1)*cw, (row+1)*ch)就是这一格的像素范围。 - 命名用
f"{prefix}_{idx:02d}.jpg",idx:02d自动补零成01~09,文件管理器排序就是发朋友圈的顺序。 - 批量模式下每张源图建一个子目录,避免不同图的碎片互相覆盖。
运行结果
把待切的图命名为 poster.jpg,运行后 ./nine_out 目录下得到 poster_01.jpg 到 poster_09.jpg。打开按顺序发朋友圈就是标准九宫格效果。
注意事项
- 原图宽高必须能被 3 整除,否则
//整除会丢几个像素,最后一块和前两块差 1px。要严丝合缝,先把图 resize 成 3 的倍数。 - 切出来的图直接发朋友圈,顺序是 01→09,不要打乱,否则九宫格拼不回去。
- 想做"隐藏第三格"那种玩法,就把中间那张换成单独的图,本代码改起来很容易。
- 输出统一 JPG,如果原图带透明,改成 PNG 并保留 RGBA。

更新时间:2026-09-14 20:21:08
上一篇:Python 批量旋转图片 90/180/270度并自动补白教程