ToolAct工具行动

九宫格切图

将图片切割为3×3九宫格,适合社交媒体分享

上传图片

拖拽图片到此处,或点击选择文件

支持 JPG、PNG、WebP、BMP、GIF 格式

什么是九宫格切图?

图片九宫格工具会把一张图片切成等大的小图,常见用法是 3×3 的九张图。按正确顺序发布到 Instagram、朋友圈、微博等平台后,个人主页或动态网格中会重新拼出原始大图,形成更强的视觉展示效果。它适合品牌活动、产品预告、活动海报、作品集展示和需要整体构图的社交媒体内容。使用时要注意原图比例、人物和文字的安全边距,以及上传顺序;只要其中一块位置错了,整体画面就会被打乱。

使用方法

使用方法

  1. 上传或拖放图片
  2. 工具自动将其分割成 9 块
  3. 点击任意一块以单独下载
  4. 点击「全部下载」以一次性保存所有块

裁剪注意事项

  • 请使用与预期最终宽高比一致的图片;自动分割无法恢复已错误裁剪或填充的内容。
  • 发布前请预览所有九块,尤其是文字、面部或产品边缘跨越分割线时。

使用场景

将一张图片切割为 3×3 九宫格上传图片后,页面使用 Canvas 将其切割为 9 张等大的 PNG 切片,按行列顺序编号为 1 到 9。不能被 3 整除的源尺寸会向下取整为整数像素,因此 1081×1081 的输入仍会生成 9 张 360×360 的 PNG,多出的一行像素会被丢弃。
准备社交媒体或拼图风格的图片切片使用原始预览、尺寸和编号网格预览在下载切片前确认裁剪效果,适用于发帖、游戏、练习题或布局测试。切片以 PNG 格式输出,因此如果源图是照片类内容文件大小会增长较快,当社交平台有 10MB 限制时建议先对九宫格运行压缩工具。
逐张或按顺序下载切片点击网格单元格下载单张切片,或下载全部切片(浏览器会加入短暂延迟以逐个处理生成的文件)。在确认编号切片按计划上传顺序预览无误前,请保留源图片。
切割前为上传顺序预留安全边距在源图内部留出边距,使面部、标题或 Logo 不会正好落在切片边界上,因为一张被裁切的人脸就会破坏动态中重建的九宫格。几像素的内缩也能防止 Instagram 等平台按缩略图比例裁剪边缘。
使用编号文件名保持正确上传顺序下载切片时保留 1 到 9 的文件名,按此行列顺序发布,因为顺序颠倒是九宫格拼合失败最常见的原因。在上传对话框中选择图片前,先按文件名排序下载文件夹,可以避免自下而上选择导致的顺序错误。

技术原理

图片九宫格切割器基于 HTML5 Canvas 2D API(WHATWG HTML Living Standard §4.12,最初在 W3C 2014 年 HTML5 推荐标准中定义)。流程分三层:将源像素解码为 CanvasImageSource,通过 drawImage 的 9 参数形式将这些像素的子矩形复制到离屏画布,然后通过 canvas.toBlob() 将离屏画布编码为 PNG。所有操作均在浏览器标签页中完成——无需上传、无服务器、无远程渲染。 解码步骤比看上去更重要。来自 <input type='file'> 或拖放 DataTransferItem 的 File 通过 FileReader.readAsDataURL(或在现代代码中通过 URL.createObjectURL)读取为 Blob URL,浏览器将其交给 Image 加载器。Image 元素在平台图片编解码器(Chromium 上为 libpng/libjpeg-turbo/libwebp,WebKit/Gecko 上为等效实现)解码位图后触发 'load' 事件。以此方式加载的非 CORS 图片被视为「受污染」——getImageData 会抛出 SecurityError——因此切割器只使用 drawImage 而不读回像素数组,完全绕过了 CORS 问题。对于非常大的图片(长边超过约 8K),某些引擎会将位图保存在 GPU 内存中,因此 canvas.toBlob 可能需要 GPU→CPU 回读,在手机上耗时约 30-100 ms。 裁剪是每次切片的单次 drawImage 调用:ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh)——前三对是源矩形(sx、sy、sw、sh),后三对是目标画布上的目标矩形。对于 1920×1080 照片的 3×3 切割,每个切片的源矩形为 640×360,起始于 (col×640, row×360)。目标画布的尺寸精确匹配切片(640×360),然后 canvas.toBlob(blob => ..., 'image/png') 运行平台 PNG 编码器。选择 PNG 而非 JPEG 是因为网格切片通常是带有锐利文字和 UI 元素的干净矩形裁剪,无损编码很重要;JPEG 的 8×8 DCT 块会使边缘模糊。 批量下载对每个 Blob 使用 URL.createObjectURL,通过 <a download> 合成点击触发下载,短暂延迟后(通常 60-120 秒,平台对未使用 Blob URL 的生命周期)调用 revokeObjectURL。对于 9 个切片,这会连续触发 9 次下载事件;某些浏览器会限制同一标签页的多次下载,因此页面通常在点击之间间隔 50-200 ms 的 setTimeout。性能方面,手机上的瓶颈通常是 PNG 编码器(libpng 每次编码单线程),而非 drawImage;对于 9 个 1080p 切片,中端 Android 预计总耗时 200-500 ms,桌面 Chromium 为 100-200 ms。

  • 流程:FileReader 或 URL.createObjectURL → Image 元素 → HTMLCanvasElement → drawImage 9 参数裁剪 → canvas.toBlob('image/png') → URL.createObjectURL + <a download>。
  • drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh) 是 9 参数重载,将源矩形 (sx,sy,sw,sh) 裁剪到目标矩形 (dx,dy,dw,dh);这是执行切割的单次 API 调用。
  • 未提供 CORS 头的源图片会污染画布——getImageData 会抛出 SecurityError,因此切割器不读取像素数组,只进行位块传输和编码。
  • canvas.toBlob 是异步非阻塞的(回调在后续微任务中触发),而旧版 canvas.toDataURL 是同步的,对于大图片会冻结主线程。
  • 对于 N×M 图片的 3×3 切割,每个切片为 (N/3) × (M/3);不可整除的尺寸会在右/下边缘产生 1 像素的余数,通过 Math.floor 处理,必要时显式处理余数切片。
  • 网格切片选择 PNG 而非 JPEG,因为每个切片是带有锐利边缘(文字、UI、图表)的矩形裁剪,8×8 DCT 块会模糊边界线。
  • 批量下载对每个 Blob 使用 URL.createObjectURL + <a download> 点击;浏览器限制同一标签页的多次下载,因此页面通常将点击间隔 50-200 ms,并在点击后撤销 Blob URL 以释放内存。
  • 性能瓶颈是平台 PNG 编码器(libpng 每次编码单线程),而非 drawImage;9 个 1080p 切片在中端手机上运行约 200-500 ms,桌面 Chromium 约 100-200 ms。

示例

1:1 正方形切图(Instagram 帖子)

输入:  1080 x 1080 px
输出:  9 张 360 x 360 px(3x3 网格)
用途:  Instagram 多图轮播预览、小红书九宫格

16:9 横屏切图(YouTube 缩略图)

输入:  1920 x 1080 px
输出:  9 张 640 x 360 px(3x3 网格)
用途:  YouTube 缩略图 A/B 测试、多平台 banner 变体

9:16 竖屏切图(TikTok / Reels)

输入:  1080 x 1920 px
输出:  9 张 360 x 640 px(3x3 网格)
用途:  短视频封面方案探索、Story 预览

常见问题

九宫格图片工具能做什么?

把一张图切成等大小的网格(例如 3×3、2×4),让你把每个格子作为单独的 Instagram 风格九宫格发布,或拼成拼图/海报。每个格子都会被导出为独立的 PNG/JPEG 文件。

图片会被上传吗?

不会。网格切分完全在你的浏览器中通过 canvas 完成,图像数据不会离开你的设备。

支持哪些网格尺寸?

常见预设有 3×3(Instagram 巨幅九宫格)、3×1(横幅三联)、2×2、4×4、9×16,通常也允许自定义行列数。最大尺寸取决于浏览器内存——高分辨率源图上的超大网格可能超过 canvas 大小限制。

如何按正确顺序把切片发到 Instagram?

Instagram 的网格是从右到左、从上到下填充的(所以 3×3 的第一张发布在右上角,最后一张在左下角)。页面会把切片标号 1-9,按 9、8、7、6、5、4、3、2、1 的顺序上传,可与视觉布局对齐。部分页面会提供顺序提示指引。

为什么导出的切片有些对不齐?

源图尺寸需要能被网格数整除才能整齐切分。页面要么裁掉右/下边缘,要么缩放图像以适配;请检查当前选用的是哪种方式。如果之后要把切片实物拼贴起来,亚像素的对齐误差会沿着网格累积。

输出格式和分辨率是什么?

默认按源分辨率输出 PNG。对于 Instagram,每个切片建议至少 1080×1080 像素(4×4 网格则源图 4320×4320)。实物海报打印时请使用更高的源分辨率,并在打印机支持时使用 TIFF 等适合打印的格式。

可以在切片之间留间距吗?

部分版本提供「间隙」选项,可在每个格子周围留出白边,模拟 Instagram 网格中显示的细缝。如果希望屏幕显示效果与原图一致,可调节间隙宽度以匹配社交平台的预览。