ToolActToolAct

画像グリッド分割

画像を3×3のグリッドに分割してSNSシェアに最適化

画像をアップロード

画像をここにドラッグ、またはクリックしてファイルを選択

JPG、PNG、WebP、BMP、GIF形式に対応

画像グリッド分割とは?

画像グリッド分割ツールは、1 枚の画像を同じ大きさのタイルに分けるツールで、SNS 用には 3×3 の 9 分割がよく使われます。Instagram、WeChat Moments、Weibo などで正しい順番に投稿すると、プロフィールやフィード上で元の大きな画像が再構成されます。キャンペーンビジュアル、商品ティザー、イベント告知、ポートフォリオ演出など、1 投稿より全体構図を見せたい場面に向いています。顔や文字が切れない余白、元画像の比率、投稿順序が重要で、1 枚でも順番を間違えると狙った見え方が崩れます。

使い方

使い方

  1. 画像をアップロードまたはドラッグ&ドロップ
  2. ツールが自動的に9つのピースに分割します
  3. 任意のピースをクリックして個別にダウンロード
  4. 「すべてダウンロード」をクリックして全ピースを一括保存

分割時の注意

  • 最終的なアスペクト比が意図通りの画像を使用してください。自動分割では、既にトリミングやパディングされた内容を復元できません。
  • 公開前にすべてのピースをプレビューしてください。特にテキストや人物、製品の端が分割線にまたがっていないか確認しましょう。

利用シーン

1枚の画像を3×3のグリッドに分割画像をアップロードすると、ページが Canvas を使って9枚の等しい PNG スライスに分割し、行と列の順序を1〜9の番号付き位置として保持します。3で割り切れない寸法のソースは整数ピクセルに切り捨てられるため、1081×1081 の入力でも9枚の 360×360 PNG が生成され、1行分の余剰ピクセルは破棄されます。
SNS 用やパズル風の画像タイルを準備元画像プレビュー、寸法、番号付きグリッドプレビューを活用して、個別スライスをダウンロードする前にクロップを確認します。ゲーム、ワークシート、レイアウトテストにも利用できます。スライスは PNG として書き出されるため、ソースが写真の場合はファイルサイズが急速に増加します。フィードに 10MB の上限がある場合は、先にグリッドに圧縮ツールを適用することを検討してください。
スライスを1枚ずつまたは一連でダウンロードグリッドセルをクリックしてそのスライスをダウンロードするか、すべてのスライスを短い遅延付きでダウンロードします。ブラウザが生成された各ファイルを処理できるようにするためです。アップロード予定の順序で番号付きスライスをプレビューするまでは、ソース画像を保持してください。
アップロード順序のために安全マージンを追加ソース画像内にマージンの余白を設けて、顔やタイトル、ロゴがスライス境界に正確に来ないようにします。顔が1枚でも切れるとフィード上の再構成されたグリッドが崩れるためです。数ピクセルのインセットにより、Instagram などのプラットフォームがサムネイルのアスペクト比に合わせて端をクロップするのを防ぐ効果もあります。
番号付きファイル名でアップロード順序を維持1〜9のファイル名を保持したスライスをダウンロードし、その正確な行と列の順序で投稿します。順序を逆にするのが最終的なグリッドがぐちゃぐちゃになる最も一般的な原因です。アップロードダイアログで選択する前にダウンロードフォルダをファイル名でソートすると、再構成フィードを壊す逆順のミスを回避できます。

仕組み

画像グリッド分割ツールは HTML5 Canvas 2D API(WHATWG HTML Living Standard §4.12、元は W3C HTML5 勧告 2014 で規定)上に構築されています。パイプラインは 3 層で構成されます。ソースピクセルを 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 のコストが発生します。 クロップはスライスごとに 1 回の drawImage 呼び出しで行われます。ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh)。最初の 3 ペアがソース矩形(sx、sy、sw、sh)、後半の 3 ペアがデスティネーションキャンバス上のデスティネーション矩形です。1920x1080 の写真を 3x3 に分割する場合、各スライスのソース矩形は (col*640, row*360) から始まる 640x360 です。デスティネーションキャンバスはスライスのサイズ(640x360)に正確に設定され、canvas.toBlob(blob => ..., 'image/png') でプラットフォームの PNG エンコーダーが実行されます。PNG を JPEG より選択する理由は、グリッドスライスは通常シャープなテキストや UI 要素を含むクリーンな矩形クロップであり、可逆エンコードが重要であるためです。JPEG の 8x8 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) はソース矩形 (sx,sy,sw,sh) をデスティネーション矩形 (dx,dy,dw,dh) にクロップする 9 引数のオーバーロードです。これが分割を実行する単一の API 呼び出しです。
  • CORS ヘッダーなしで提供されたソース画像はキャンバスを「汚染」します。getImageData は SecurityError をスローするため、分割ツールはピクセル配列を読み取らず、ブリットとエンコードのみを行います。
  • canvas.toBlob は非同期でノンブロッキング(コールバックは後のマイクロタスクで発火)です。レガシーの canvas.toDataURL は同期で、大きな画像でメインスレッドをフリーズさせます。
  • NxM 画像を 3x3 に分割する場合、各スライスは (N/3) x (M/3) です。割り切れないサイズでは右端/下端に 1 ピクセルの余剰が生じ、Math.floor で処理し、必要に応じて明示的な余剰スライスを生成します。
  • グリッドスライスに PNG を選択する理由は、各スライスがシャープなエッジ(テキスト、UI、図表)を含む矩形クロップであり、8x8 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
出力:   360 x 360 px の 9 分割 (3x3 グリッド)
用途:   Instagram カルーセルのプレビュー、小紅書のグリッド投稿

横長 16:9 分割 (YouTube サムネイル)

入力:   1920 x 1080 px
出力:   640 x 360 px の 9 分割 (3x3 グリッド)
用途:   YouTube サムネイルの A/B テスト、複数プラットフォーム向けバナー差分

縦長 9:16 分割 (TikTok / Reels)

入力:   1080 x 1920 px
出力:   360 x 640 px の 9 分割 (3x3 グリッド)
用途:   ショート動画のカバー検討、ストーリー風プレビュー

よくある質問

画像グリッドツールは何をするツールですか?

1枚の画像を等分割されたグリッドのセル(例: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の場合、タイル1枚あたり1080×1080ピクセル以上が推奨です(4×4グリッドなら4320×4320のソース)。物理的なポスター印刷には、より高い解像度のソースと、プリンターが対応していればTIFFのような印刷向けフォーマットを使用してください。

タイルの間に隙間を入れられますか?

一部のビルドでは、Instagramのグリッドが薄い隙間付きで表示される様子を再現するため、各セルの周りに白い余白を残す「ガター」オプションを提供しています。画面上の結果をソース画像と同じに見せたい場合は、ガターの幅をSNSプラットフォームのプレビューに合わせて調整してください。