我的知识记录

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,得到每块的 cwch
  • 双层循环 row 0~2、col 0~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.jpgposter_09.jpg。打开按顺序发朋友圈就是标准九宫格效果。

注意事项

  • 原图宽高必须能被 3 整除,否则 // 整除会丢几个像素,最后一块和前两块差 1px。要严丝合缝,先把图 resize 成 3 的倍数。
  • 切出来的图直接发朋友圈,顺序是 01→09,不要打乱,否则九宫格拼不回去。
  • 想做"隐藏第三格"那种玩法,就把中间那张换成单独的图,本代码改起来很容易。
  • 输出统一 JPG,如果原图带透明,改成 PNG 并保留 RGBA。

Python 批量生成九宫格切图 朋友圈九图教程

标签:

更新时间:2026-09-14 20:21:08

上一篇:Python 批量旋转图片 90/180/270度并自动补白教程

下一篇:Python 图片圆角处理 批量生成圆角PNG透明教程