Split Image Into Grid

Upload an image, pick grid size, download each cell as a PNG.

Upload an image

No file selected
Please pick a valid image file.
Processing happens on your device
Your image is not uploaded to any server. All cropping runs locally in this browser tab using the HTML canvas API.

Grid size

Original size
Per piece
Total pieces 9
Output format PNG

Preview

Pick an image to see the grid preview here.

Pieces

After splitting, each cell appears here with a download link.

How it works

Privacy and local processing

This tool runs entirely in your browser. The selected image is read with the FileReader API, drawn onto a hidden HTML5 canvas, and cropped cell by cell using drawImage(sx, sy, sw, sh, 0, 0, sw, sh). No pixel data is sent over the network — not to this site, not to any third party. Close the tab and everything is discarded from memory.

How canvas cropping produces each piece

For an N×M grid, piece width is floor(imageWidth / M) and piece height is floor(imageHeight / N). For each row r and column c, the source rectangle at (c·pieceW, r·pieceH) with size (pieceW, pieceH) is copied onto a fresh canvas and exported as a PNG with canvas.toBlob(). The last row and column absorb any remainder pixels so the whole image is covered.

FAQ

Does this tool upload my image to a server?

No. The image never leaves your device. Everything — reading the file, drawing on canvas, generating the output PNGs, and building the ZIP — happens inside your browser tab. You can verify this by opening your browser's Network panel while splitting an image: no outbound uploads are made.

Which image formats are supported?

Any raster format the browser can decode as a bitmap: PNG, JPG / JPEG, WebP, GIF (first frame), and BMP. Output pieces are always saved as PNG to preserve quality and transparency. SVG and HEIC are not supported because browsers cannot always decode them consistently to canvas.

How large an image can I split?

In practice, up to about 8000×8000 pixels works on desktop browsers with 8 GB of RAM or more. Mobile devices usually top out near 4000×4000 because of stricter canvas memory limits. If the browser tab stalls or a piece comes out blank, reduce the source image resolution before splitting or choose a smaller grid.

What can I do with the resulting pieces?

Common uses: Instagram multi-post grids (3×1, 3×3, 3×5), jigsaw-style puzzles for classroom activities, tile maps for games, printable poster tiles across A4 sheets, or splitting scanned pages into sections. Each piece downloads as piece_r1_c1.png, piece_r1_c2.png and so on, so the sort order matches the grid from top-left to bottom-right.

Why does my ZIP contain uncompressed files?

To keep the tool fully inline (no external libraries), the ZIP is built in STORE mode — files are concatenated without compression. PNGs are already compressed internally, so the ZIP size is close to what a compressed archive would give you. Any standard archive tool (Windows Explorer, macOS Archive Utility, 7-Zip, unzip) opens the result without issues.

Copied

This utility cuts any picture you already have on your device into an N×M grid of PNG tiles. Pick a photo, choose how many rows and columns you need, and every cell comes back as a separate download plus an optional ZIP containing all pieces.

Typical grids: 3×3 for a classic Instagram mosaic (9 square tiles from one landscape shot), 3×5 for a longer feed banner, 4×4 for a sliding-puzzle base, or 2×2 to break a scanned A3 page across four A4 sheets. A 1200×1200 photo split 3×3 gives you nine 400×400 tiles; the same picture split 4×5 gives twenty 300×240 tiles.

Everything runs locally in the browser via the canvas API — no bytes leave your device. Maximum grid is 20×20 (400 pieces); a warning shows above 50 pieces since very large grids use more memory.