ToolAct工具行動

九宮格切圖

將圖片切割為3×3九宮格,適合社群媒體分享

上傳圖片

拖曳圖片到此處,或點選選擇檔案

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

什麼是九宮格切圖?

圖片九宮格工具會把一張圖片切成等大的小圖,常見做法是 3×3 的九張圖。依正確順序發布到 Instagram、朋友圈、微博等平台後,個人頁或動態格線中會重新拼出原本的大圖,形成更強的視覺展示效果。它適合品牌活動、產品預告、活動海報、作品集展示,以及需要整體構圖的社群內容。使用時要注意原圖比例、人物與文字的安全邊距,還有上傳順序;只要其中一塊位置錯了,整體畫面就會被打亂。

使用方式

使用方式

  1. 上傳或拖曳圖片
  2. 工具會自動將其切割成 9 塊
  3. 點選任一區塊即可單獨下載
  4. 點選「全部下載」即可一次儲存所有區塊

裁切注意事項

  • 請使用符合最終預期長寬比的圖片;自動切割無法還原已被裁切或填補不當的內容。
  • 發布前請先預覽全部九個區塊,特別留意文字、人臉或產品邊緣跨越切割線的情形。

使用場景

將一張圖片切割為 3×3 九宮格上傳圖片後,頁面使用 canvas 將其切成九張等大的 PNG 切片,保留行列順序作為 1 至 9 的編號位置。無法被 3 整除的來源尺寸會被捨去為整數像素,因此 1081×1081 的輸入仍會產生九張 360×360 的 PNG,多出的一行像素會被丟棄。
準備社群或拼圖風格的圖片切片使用原始預覽、尺寸和編號九宮格預覽在下載個別切片前確認裁切效果,適用於貼文、遊戲、學習單或版面測試。切片以 PNG 格式寫入,若來源為照片類圖片則檔案大小會快速增長;當動態消息有 10MB 上限時,建議先對九宮格執行壓縮。
逐一或依序下載切片點選九宮格中的格子下載該切片,或以短暫延遲下載所有切片讓瀏覽器能處理每個生成的檔案。在你計劃上傳的順序中預覽過編號切片之前,請保留來源圖片。
為上傳順序在切割前加入安全邊距在來源圖片內側留出邊距填充,使人臉、標題或 Logo 不會恰好落在切片邊界上,因為單張被裁切的臉會破壞動態消息中重建的九宮格。幾像素的內縮也能避免 Instagram 等平台將邊緣裁切為其縮圖長寬比。
使用編號檔名保持正確的上傳順序下載保留 1 至 9 檔名的切片並依該行列順序發布,因為順序顛倒是導致最終九宮格錯亂的最常見原因。在上傳對話框中選擇前,先按檔名排序下載的資料夾,可避免自下而上的錯誤破壞重建的動態消息。

技術原理

九宮格切圖工具基於 HTML5 Canvas 2D API(WHATWG HTML Living Standard §4.12,原始規範見 2014 年 W3C HTML5 建議書)。整個流程分為三層:將來源像素解碼為 CanvasImageSource,透過 drawImage 的九引數形式將子矩形複製到離屏 canvas,最後用 canvas.toBlob() 將離屏 canvas 編碼為 PNG。所有操作都在瀏覽器分頁中完成——不上傳、不經過伺服器、不使用遠端渲染。 解碼步驟比表面上看來更為關鍵。來自 <input type='file'> 或拖放 DataTransferItem 的 File 物件透過 FileReader.readAsDataURL(或現代程式碼中的 URL.createObjectURL)讀取為 Blob URL,瀏覽器將其交給 Image 載入器。當平台的圖片編解碼器(Chromium 上為 libpng/libjpeg-turbo/libwebp,WebKit/Gecko 上為對應的解碼器)完成位元圖解碼後,Image 元素會觸發 'load' 事件。以非 CORS 方式載入的圖片會被視為「受污染」——getImageData 會拋出 SecurityError——因此切圖工具只使用 drawImage 而不讀取像素陣列,從而完全迴避 CORS 問題。對於非常大的圖片(長邊超過約 8K),某些引擎會將位元圖儲存在 GPU 記憶體中,因此 canvas.toBlob 可能會經過 GPU→CPU 讀回過程,在手機上約需 30-100 毫秒。 裁切是每個切片一次 drawImage 呼叫:ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh)——前三對是來源矩形(sx, sy, sw, sh),後三對是目標 canvas 上的目標矩形。對一張 1920×1080 照片做 3×3 切割時,每個切片的來源矩形為 640×360,起始位置為 (col*640, row*360)。目標 canvas 的大小精確設定為切片尺寸(640×360),然後執行 canvas.toBlob(blob => ..., 'image/png') 來執行平台的 PNG 編碼器。選擇 PNG 而非 JPEG 是因為格線切片通常是乾淨的矩形裁切,帶有銳利的文字和 UI 元素,無損編碼很重要;JPEG 的 8×8 DCT 區塊會模糊邊緣。 批次下載使用 URL.createObjectURL 為每個 Blob 建立連結,透過 <a download> 合成點選觸發下載,並在短暫延遲後(通常 60-120 秒,即平台對未使用 Blob URL 的存活時間)撤銷 URL。對 9 個切片,這會連續觸發 9 次下載事件;部分瀏覽器會對來自同一分頁的多次下載進行節流,因此頁面通常會在點選之間加入 50-200 毫秒的 setTimeout 間隔。效能方面,手機上的瓶頸通常是 PNG 編碼器(libpng 每次編碼為單執行緒),而非 drawImage;對 9 個 1080p 切片,中階 Android 約需 200-500 毫秒,桌面 Chromium 約需 100-200 毫秒。

  • 流程:FileReader 或 URL.createObjectURL → Image 元素 → HTMLCanvasElement → drawImage 九引數裁切 → canvas.toBlob('image/png') → URL.createObjectURL + <a download>。
  • drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh) 是九引數重載,將來源矩形 (sx,sy,sw,sh) 裁切到目標矩形 (dx,dy,dw,dh);這是執行切割的單一 API 呼叫。
  • 未提供 CORS 標頭的來源圖片會污染 canvas——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 毫秒間隔,並在點選後撤銷 Blob URL 以釋放記憶體。
  • 效能瓶頸在平台的 PNG 編碼器(libpng 每次編碼為單執行緒),而非 drawImage;9 個 1080p 切片在中階手機上約需 200-500 毫秒,在桌面 Chromium 上約需 100-200 毫秒。

範例

正方形 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 測試、多平台橫幅變體

直式 9:16 切割(TikTok / Reels)

輸入:  1080 x 1920 px
輸出:  9 張 360 x 640 px 切片(3x3 九宮格)
用途:  短影片封面探索、限時動態風格預覽

常見問題

圖片九宮格工具能做什麼?

它會把一張圖片切割成等分網格(例如 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 網格中的細縫。如果你希望畫面看起來和原圖一致,可調整間距寬度以對應社群平台的預覽效果。