九宫格切图怎么切:朋友圈顺序、尺寸对照与命令行批量做法

一、结论先给

九宫格 = 把一张图等分成 3×3,发的时候按 1→9 顺序上传。

三件事决定了最终效果:

问题 答案
显示顺序 从上到下、从左到右,第 1 格是封面(缩略图)
原图比例 正方形 1:1 最稳;小红书用 3:4 竖图
单张尺寸 长边 1080-1440px,单张 ≤ 1 MB(超了微信会二次压缩)
┌───┬───┬───┐
│ 1 │ 2 │ 3 │   ← 1 在左上,是封面
├───┼───┼───┤
│ 4 │ 5 │ 6 │
├───┼───┼───┤
│ 7 │ 8 │ 9 │
└───┴───┴───┘

最重要的一条:第 1 格会出现在缩略图位置,所以构图时要把主体(人脸、标题、产品)放在左上区域,别放在正中间——正中间那格(第 5 格)在九宫格里会被四条缝线切开,最不显眼。

二、平台尺寸对照表

平台 推荐比例 推荐像素 单张上限 说明
微信朋友圈 1:1 1080 × 1080 建议 ≤ 1 MB 超过会被压缩,1:1 显示最完整
微信朋友圈(竖图) 3:4 1080 × 1440 ≤ 1 MB 显示区域会被裁成 1:1 缩略图
小红书 3:4 1080 × 1440 ≤ 10 MB 3:4 是流量最好的比例
小红书(方图) 1:1 1080 × 1080 ≤ 10 MB
微博 4:3 / 16:9 1200 × 900 ≤ 5 MB 横图更适合
抖音图文 9:16 1080 × 1920 ≤ 10 MB 全屏竖版

九宫格的主要战场是朋友圈和小红书,所以优先准备 1:1 和 3:4 两个版本。

原图建议分辨率:切成九宫格后每格 = 原图的 1/9 面积。

目标单格 原图应为
360 × 360(够发) 1080 × 1080
480 × 480(清晰) 1440 × 1440
480 × 640(小红书 3:4) 1440 × 1920

三、ImageMagick:一行切完

3.1 基础切法

# 3×3 等分,自动补零命名 slice-0.png ... slice-8.png
magick input.jpg -crop 3x3@ +repage slice.png

关键在 -crop 3x3@ 的 @ 符号:

写法 行为 问题
-crop 3x3@ 自动计算每格尺寸,整除不整除都能用 无
-crop 360x360 按固定尺寸切 原图不是 1080 时,边缘会多出碎块

@ 必加。不加的话 1000×1000 的图按 333×333 切会变成 4×4=16 块,最后一块还是残缺的。

+repage 也必加——不带它,每块图会保留原图的画布偏移信息,导致有的图打开后大片空白。

3.2 完整命令(含预处理)

# 一步到位:裁成 1:1 正方形 → 缩到 1440 → 切九宫格 → 输出 JPG
magick input.jpg \
  -resize 1440x1440^ -gravity center -extent 1440x1440 \
  -crop 3x3@ +repage \
  -quality 88 \
  slice.jpg

分步解释:

参数 作用
-resize 1440x1440^ ^ 表示"至少填满",等比缩放到能覆盖 1440×1440
-gravity center -extent 1440x1440 从中心裁出正方形
-crop 3x3@ 等分 3×3
+repage 重置画布偏移
-quality 88 JPG 质量,88 是清晰度与体积的平衡点

3.3 竖图切法(小红书 3:4)

magick input.jpg \
  -resize 1440x1920^ -gravity center -extent 1440x1920 \
  -crop 3x3@ +repage \
  -quality 88 \
  slice.jpg

3.4 只切上半部分(构图不好时)

# 先裁掉下方 20%,再切
magick input.jpg -gravity north -chop 0x20% -crop 3x3@ +repage slice.jpg

四、Python 切法(要批量或要定制时)

from PIL import Image
import os

def slice_nine(src, out_dir='out', rows=3, cols=3, target=None, quality=88):
    os.makedirs(out_dir, exist_ok=True)
    im = Image.open(src)

    # EXIF 方向修正(手机拍的图经常带旋转标记)
    try:
        from PIL import ImageOps
        im = ImageOps.exif_transpose(im)
    except Exception:
        pass

    im = im.convert('RGB')

    # 缩放到目标尺寸(居中裁剪成正方形)
    if target:
        w, h = im.size
        s = max(target[0] / w, target[1] / h)
        im = im.resize((int(w * s), int(h * s)), Image.LANCZOS)
        w, h = im.size
        left, top = (w - target[0]) // 2, (h - target[1]) // 2
        im = im.crop((left, top, left + target[0], top + target[1]))

    W, H = im.size
    cw, ch = W // cols, H // rows
    n = 0
    for r in range(rows):
        for c in range(cols):
            # 最后一行/列吃掉余数,保证不漏边
            right = W if c == cols - 1 else (c + 1) * cw
            bottom = H if r == rows - 1 else (r + 1) * ch
            box = (c * cw, r * ch, right, bottom)
            piece = im.crop(box)
            piece.save(f'{out_dir}/slice-{n:02d}.jpg', quality=quality)
            n += 1
    return n

slice_nine('photo.jpg', target=(1440, 1440))

两个容易忽略的点:

  1. ImageOps.exif_transpose()——手机竖拍的照片,PIL 直接打开可能是躺着的,切完全乱。
  2. 最后一行/列要吃掉余数(W if c == cols-1 else ...),否则 1441px 宽的图会漏掉最右边 1px。

五、竖图和横图:先裁剪还是先补白

原图不是目标比例时,两条路:

方案 做法 代价 适合
居中裁剪 -extent 丢掉边缘内容 照片、人像(主体在中间)
补白边 -background white -gravity center -extent 出现白边 有文字的图、不能裁的海报
补模糊背景 放大模糊做底 + 原图居中 处理复杂 竖图转方图,效果最自然
# 居中裁剪(丢边缘)
magick input.jpg -resize 1440x1440^ -gravity center -extent 1440x1440 out.jpg

# 补白边(保完整)
magick input.jpg -resize 1440x1440 -background white -gravity center -extent 1440x1440 out.jpg

# 补模糊底(最好看)
magick input.jpg \
  \( -clone 0 -resize 1440x1440^ -gravity center -extent 1440x1440 -blur 0x20 \) \
  \( -clone 0 -resize 1440x1440 \) \
  -gravity center -composite out.jpg

默认推荐居中裁剪:九宫格发在朋友圈,尺寸本来就小,白边会显得很廉价。

六、五个高频坑

6.1 发到微信顺序乱了

微信按上传顺序显示,不从文件名推断。手动选图时一次选中 9 张,多数情况下顺序是对的,但部分安卓机型会乱。

对策:

# 文件名补零,保证字典序 = 视觉序
slice-00.jpg slice-01.jpg ... slice-08.jpg

上传时按顺序点,别全选。

6.2 切完发微信变糊

微信对超过阈值的图会二次压缩。实测经验(非官方数据):

  • 单张超过 1 MB、长边超过 1440px 更容易被压
  • 压缩后肉眼可见糊,尤其是有文字的图

对策:长边控制在 1080-1440,单张 200-800 KB。切完用 图片压缩 统一压一轮再发。

6.3 边缘对不齐、接缝明显

原因:原图尺寸不能被 3 整除,用固定尺寸切导致每块大小不一。

对策:-crop 3x3@ 自动等分;Python 里让最后一块吃掉余数。

另外发朋友圈本来就有缝(微信自己加了间距), seam 明显是正常的,不是切图的问题。

6.4 图是躺着的

手机竖拍照片带 EXIF 方向标记,ImageMagick 和 PIL 默认不处理。

# ImageMagick 自动摆正
magick input.jpg -auto-orient out.jpg

# 完整命令里加在最前面
magick input.jpg -auto-orient -resize 1440x1440^ -gravity center -extent 1440x1440 -crop 3x3@ +repage slice.jpg

6.5 透明 PNG 切完有黑边

magick input.png -background white -alpha remove -alpha off -crop 3x3@ +repage slice.jpg

七、批量脚本

#!/usr/bin/env bash
# 把当前目录所有图片切成九宫格,每个图一个目录
set -euo pipefail
TARGET=${1:-1440x1440}
for f in *.jpg *.jpeg *.png; do
  [ -e "$f" ] || continue
  d="nine/${f%.*}"
  mkdir -p "$d"
  magick "$f" -auto-orient \
    -resize "${TARGET}^" -gravity center -extent "$TARGET" \
    -crop 3x3@ +repage -quality 88 "$d/slice.jpg"
  echo "$f -> $d ($(ls "$d" | wc -l) 张)"
done

八、不想敲命令

偶尔切一次,装 ImageMagick 不值当。浏览器里也能切:九宫格切图工具 上传后自动 3×3,按 00-08 命名打包,本地处理不上传服务器。切完想调尺寸可以再走 图片裁剪。

九、几条纪律

  1. 第 1 格放主体,别放正中间(第 5 格会被缝线切开)。
  2. -crop 3x3@ 的 @ 不能省,否则不整除就碎。
  3. +repage 必须加,不然有的格子打开是空白。
  4. 先 -auto-orient 摆正手机照片。
  5. 长边 1080-1440、单张 ≤ 1 MB,避开微信二次压缩。
  6. 上传时按文件名顺序点,别图省事全选。
  7. 原图先裁成正方形再切,比例不对切出来必然变形。

十、延伸阅读

👉 相关在线工具:九宫格切图 · 图片裁剪 · 图片尺寸调整 · 长图拼接,免登录、浏览器内处理。

还有 65 个免费在线工具

纯前端实现,不用注册,数据不上传服务器。

浏览全部工具