One image, and a reason it should be nine
The poster was gorgeous. It was also 42 inches wide, and the office printer tops out at A4. So the plan became the classic one: slice the artwork into a grid of letter-sized sheets, tape it together on the wall, and step back. The next twenty minutes were spent in an image editor drawing guides, guessing crop boundaries, exporting one piece at a time with names like final_v2_TOPLEFT_maybe.png, and losing track of which piece was which.
That afternoon is why this page exists. The Image Splitter takes any image and cuts it into a grid — rows and columns, your call — then hands you every piece as a numbered file in one ZIP. Set 3 columns by 3 rows for nine tiles. Set 4×1 for four vertical strips. Set 1×6 for six horizontal bands. No guides, no per-piece exports, no naming confusion, because the tool names them in reading order and the numbers never lie.
The use cases keep surprising us. Print shops splitting large-format jobs into tiles. Game developers cutting sprite sheets into individual frames. Teachers turning maps into jigsaws. People chopping screenshots into emoji-sized pieces for a Discord server. The Instagram Grid Splitter handles the social-specific version with its own presets; this tool is the general-purpose blade behind all of it.
Splitting an image, start to finish
Load the source image
Drag it in, paste from the clipboard, or pick from your camera roll. The tool reads JPG, PNG, and WebP and shows the exact pixel dimensions — you will want those numbers for the grid math.
Set columns and rows
Two number inputs, nothing fancy. The preview overlays the cut lines on your image so you can see exactly where each slice lands before committing. Watch whether a cut crosses a face, a headline, or anything else that should stay whole.
Check the tile dimensions
The tool shows the size each tile will be. If you need exact numbers — 400-pixel tiles for a sprite sheet, 210mm-wide tiles for A4 printing — adjust the grid until the math lands where you need it.
Choose the output format
PNG for transparency and lossless text, JPG for smaller photo tiles, WebP when you want both. The format applies to every tile in the batch.
Download the ZIP
One click, one archive, every tile numbered in reading order: row 1 left to right, then row 2, and so on. Extract and the pieces are ready to upload, print, or paste.
The coordinate math behind every cut
An image is a grid of pixels W wide and H tall. Splitting into C columns and R rows means each tile covers a rectangle from (x0, y0) to (x1, y1), where x0 equals the column index times floor(W/C) and x1 starts the next tile. It is the same arithmetic that decides background positions in CSS sprite sheets, which is one reason developers keep this tool bookmarked.
The subtle part is remainders. 1600 pixels across 3 columns does not divide cleanly: 1600 ÷ 3 is 533 with 1 left over. The tool gives the extra pixel to the first column, producing widths of 534, 533, and 533. Visually irrelevant — but if you are assembling tiles back into a sprite sheet and expecting every frame at an identical size, that one pixel will offset everything after column one. The fix is to crop the source to a multiple of your column count first, which the Image Cropper does in seconds.
Numbering runs in reading order because that is what humans expect when reassembling. Tile r01-c02 is the second tile in the first row: one column in from the left, zero rows down. The zero-padded naming looks fussy until you sort a folder of a hundred tiles alphabetically and everything lines up — which is precisely why the padding is there.
The ZIP itself is built in the browser from the finished tiles. Each image is encoded to its target format, the entries are named, and the archive is assembled following the standard ZIP file layout — one central directory, one entry per tile, no server round trip anywhere in the chain.
A 3×2 split, fully worked
Here is a concrete run with clean numbers. Source image: 1620×1080. Grid: 3 columns, 2 rows. Each tile is exactly 540×540, because 1620 ÷ 3 and 1080 ÷ 2 both land on integers — this is what ideal split math looks like.
| Tile | File name | Source region (x, y, w, h) |
|---|---|---|
| Row 1, Col 1 | tile-r01-c01.png | 0, 0, 540, 540 |
| Row 1, Col 2 | tile-r01-c02.png | 540, 0, 540, 540 |
| Row 1, Col 3 | tile-r01-c03.png | 1080, 0, 540, 540 |
| Row 2, Col 1 | tile-r02-c01.png | 0, 540, 540, 540 |
| Row 2, Col 2 | tile-r02-c02.png | 540, 540, 540, 540 |
| Row 2, Col 3 | tile-r02-c03.png | 1080, 540, 540, 540 |
Input
tile sheet reassembled as one 1620×1080 PNG, displayed at half scale — each sprite shown at 270×270
Output
background: url('sheet.png') no-repeat; background-size: 810px 540px; background-position: -270px 0; — that displays tile r01-c02 (the second tile) at 270×270, because the sheet is halved to 810×540 and the tile's source offset of 540 px halves to 270.sprite {
width: 270px;
height: 270px;
background-image: url('sheet.png');
background-size: 810px 540px; /* sheet at 50% */
background-position: -270px 0; /* tile r01-c02 at 50% */
}Notice what the sprite example is really showing: splitting and reassembling are the same operation in reverse. The cut coordinates you see in the table above are exactly the background-position values you would need to pull any tile back out of the combined sheet. That symmetry is why game developers and front-end developers both live in this tool.
Input
1600×900 source · 3 columns × 2 rows
Output
Column widths: 534, 533, 533 — the first column absorbs the extra pixel Tile r01-c02 starts at x = 534, not 533 — offsets accumulate from the left Row heights: 450 each, because 900 divides cleanly by 2 Cropping the source to 1599×900 first yields three exact 533-pixel columns and clean multiples for sprite math
The remainder run is worth reading beside the clean one above it. One extra pixel changes every coordinate to the right of column one — invisible to the eye, decisive for background-position math. That single pixel is the entire argument for cropping the source to a grid-friendly size before splitting when the tiles feed code rather than a wall.
Frames with breathing room: atlas padding and the two-pixel rule
Splitting a sprite sheet into frames with mathematically perfect cuts produces one classic bug: thin slivers of the neighboring sprite along each frame's edge. The cause is texture filtering. When a game engine draws a sprite at any scale other than exactly one-to-one, bilinear sampling reads the pixels just outside the frame's rectangle — and when frames sit flush against each other, the pixels just outside belong to the sprite next door. The fix is padding: dead space between frames, so the sampler reads harmless transparent pixels instead of somebody else's sword.
| Padding | Atlas size for 8 frames of 256×256 (2 cols × 4 rows) | What it protects against |
|---|---|---|
| 0 px | 512 × 1024 | Nothing — edge sampling reads the neighbor frame |
| 2 px | 516 × 1030 | Bilinear filtering at normal display scales |
| 4 px | 520 × 1036 | Filtering plus one level of mipmaps on downscaled sprites |
The coordinate arithmetic shifts with the padding, and that is the part worth practicing. In the 2-pixel atlas, frame row 2 column 1 starts at x = 0, y = (2 − 1) × (256 + 2) = 258 — the stride is frame size plus padding, not frame size alone. Sprite tools and game-engine importers all want that stride; splitting back out of a padded atlas with a grid that assumes 256 exactly will shave the padding off the wrong edge of every frame after the first.
Two adjacent refinements from production art pipelines. Edge extrusion — copying each frame's outermost pixel row into the padding — buys the same protection for sprites that will tile or rotate, because the sampler reads a continuation of the sprite rather than transparency. And mipmaps widen the sampling footprint at every halving step, so a sprite that shrinks to a quarter on screen is being sampled four texels wide at the deepest mip — which is why 4 pixels of padding is the conservative default whenever the atlas will be scaled aggressively on mobile screens.
A poster print run, worked from A2 to wall
Print is the most common reason a split leaves the screen, and the arithmetic deserves one full walkthrough. The job: an A2 poster — 420×594 millimeters — on a printer whose sheet size tops out at A4. Exported at 150 DPI, the artwork is 2480×3508 pixels, and A4 is exactly one quarter of A2: two columns by two rows, every tile 1240×1754 pixels, no remainder anywhere. The split itself takes one click; the rest of the afternoon belongs to the scissors.
| Sheet | File name | Poster region (mm) | Tile pixels at 150 DPI |
|---|---|---|---|
| Top-left | tile-r01-c01.png | 0–210 × 0–297 | 1240 × 1754 |
| Top-right | tile-r01-c02.png | 210–420 × 0–297 | 1240 × 1754 |
| Bottom-left | tile-r02-c01.png | 0–210 × 297–594 | 1240 × 1754 |
| Bottom-right | tile-r02-c02.png | 210–420 × 297–594 | 1240 × 1754 |
Why 150 DPI and not 300: a wall poster is read at a distance nobody reads a magazine at, and large-format output tolerates the lower figure without visible degradation. The same poster at 300 DPI would be 4960×7016 pixels — 35 megapixels of file buying sharpness that a viewer standing a meter back cannot resolve. Print-shop convention splits the difference by viewing distance: 300 for handheld, 200 for arm's length, 150 for the wall.
Assembly math closes the loop. A 2×2 tiling has exactly one vertical and one horizontal internal seam; printing with a 5-millimeter overlap on the joining edges produces glue flaps that absorb the millimeter of drift consumer printers add per sheet. Four sheets, two seams, one ruler — and the poster is on the wall by five o'clock.
When the grid fights back
Splitting is simple arithmetic, which means the failure modes are all predictable — and all avoidable once you can name them.
- Odd dimensions. 1921×1080 into two columns gives one 960-pixel tile and one 961. Crop to even numbers when uniformity matters, or accept the single-pixel drift.
- Cut lines through content. A 3×3 grid does not know where the subject's face is. Use the preview overlay and nudge the crop before splitting, or pick a grid that puts joints in low-detail areas like sky and pavement.
- Print drift. Consumer printers are not precise instruments. Two tiles that meet mathematically at a shared edge will show a hairline gap or overlap on paper. Bleed and overlap settings exist for exactly this — a 5mm overlap per tile absorbs the drift.
- Transparency surprises. A JPG source cannot have transparent regions, but PNG tiles inherit any transparency from a PNG source, which can make tiles look broken against a dark file manager. Preview on white and on checkered to be sure.
- Re-compression. Splitting to JPG re-encodes every tile. For text-heavy screenshots and sprite frames with hard edges, choose PNG; the artifacts JPG leaves on sharp edges are subtle but permanent.
A field guide to common splits
The same operation, precomputed for the jobs that recur. Source sizes assume finished dimensions — resize or crop the source to match before splitting, and every tile comes out identical:
| Job | Source (pixels) | Grid | Tile size |
|---|---|---|---|
| Instagram 3×3 profile grid | 3240×3240 | 3×3 | 1080×1080 |
| Instagram 3-slide carousel | 3240×1080 | 3×1 | 1080×1080 |
| A2 poster on A4 sheets (150 DPI) | 2480×3508 | 2×2 | 1240×1754 |
| 8-frame sprite strip | 8192×1024 | 8×1 | 1024×1024 |
| Four 4×6 photo prints on a sheet (300 DPI) | 2400×3600 | 2×2 | 1200×1800 |
| Long screenshot, readable bands | 1080×12000 | 1×10 | 1080×1200 |
Every row shares one property: the source divides evenly by the grid, which is why the tiles come out identical. The social rows come from the Instagram sibling of this tool with its presets; the print rows come from DPI arithmetic; the sprite row from frame counts. When your job is not on the table, derive it the same way — destination size times grid equals source size, and any remainder means a crop comes first.
Who slices images on purpose
A tool this simple ends up in a lot of different hands. The regulars:
- Print shops and sign makers — cutting oversized artwork into printable panels, adding overlap for assembly
- Game developers and front-end teams — pulling individual frames out of sprite sheets, or building sheets from a single tall animation strip
- Social media managers — prepping grid posts and carousel sets, often via the Instagram-specific sibling of this tool
- Teachers and workshop leaders — turning maps and diagrams into physical jigsaws and matching games
- Crafters — splitting cross-stitch patterns and paper models into working sections
- Community moderators — chopping reaction images and screenshots down to emoji-sized pieces for Discord servers
The workflow pattern repeats across all of them: one big source, one grid, many numbered outputs. When the flow runs the other way — many sources becoming one image — that is the Image Combiner, and the two tools pair up nicely for assembling strips back into sheets after edits.
Splitter, cropper, and the grid next door
People sometimes ask which of the three cutting tools they are standing in front of. The distinctions are small but they save an afternoon:
| Tool | What it does | Reach for it when |
|---|---|---|
| Image Splitter | One image → many tiles, one grid, numbered ZIP | You need all the pieces, in order |
| Image Cropper | One image → one chosen rectangle | You need one region, precisely placed |
| Instagram Grid Splitter | One image → social preset tiles (3×3, 3×4, 2×2) | The destination is a profile grid or carousel |
There is also the question of grid versus strips. A 3×1 column split and three sequential crops produce identical files, but the split is one operation with consistent naming, while manual crops are three operations with human-named outputs. Multiply by a 6×4 sheet — 24 pieces — and the manual route stops being a plan. Batching is not a luxury here; it is the difference between a five-minute job and a spreadsheet-tracked one.
For anyone cutting images for the web, a quick note on size discipline: tiles destined for sliders and carousels should still come out of the Image Resizer pipeline if the source is oversized. Splitting a 6000-pixel image into 2000-pixel tiles wastes bandwidth on every tile; resize first, then split, so each piece ships at the size it will actually display.
Your image never leaves the room
Everything on this page runs client-side. The decode, the tile cuts, the format encoding, even the ZIP assembly — all of it happens in your browser using the canvas and file APIs the platform already provides. There is no upload endpoint, because there is no server component at all.
For print shops handling customer artwork before it is public, and for game studios slicing unreleased assets, that is the whole feature list. The file you split is the file that stays on your disk. It also means the tool keeps working with no connection once the page is loaded, on a locked-down studio machine, or on a phone in a basement — the network tab stays silent either way.
Splitting questions, answered plainly
How do I split one image into multiple pieces?
Load the image, set the number of columns and rows, and download. A 3×2 setting cuts the image into 6 tiles; 4×1 gives you 4 vertical strips. Every tile arrives as a numbered file inside a single ZIP, with names like tile-r01-c02.png so you always know which piece goes where without opening them one by one.
Can I split an image into equal parts of an exact pixel size?
Indirectly, and the math is worth doing up front. Divide the image's width by the tile width you want and round to a whole number of columns, then do the same for rows. A 1600×900 image splits into 400-pixel-wide columns exactly four times, but 300-pixel columns give 5.33 — the tool distributes the remainder, giving you five columns of unequal width instead. Crop to a friendly size first if every tile must be identical.
What file formats can I split?
JPG, PNG, and WebP all load and split. PNG is the safest output when the pieces need transparency or pixel-perfect text, because splitting itself is lossless — each tile is a straight copy of pixels from the source, re-encoded only at export. If you split a JPG and export JPG tiles, each tile gets re-compressed once, which is usually invisible but worth knowing about.
Why did my tiles come out slightly different sizes?
Because the pixel count did not divide evenly. The splitter gives the leftover pixels to the first tiles along each axis: 1600 pixels across 3 columns becomes 534, 533, 533. The difference is a single pixel and invisible in most uses, but for sprite sheets and print work, crop the source to a multiple of your grid first and every tile comes out identical.
Is this the same tool I would use for an Instagram grid?
The mechanics overlap, but the Instagram workflow has its own constraints — 1080-pixel square tiles, a 3×3 default, and upload order mattering — so it lives in a dedicated tool with presets and a live preview. Use this general splitter for everything else: print sheets, sprite sheets, puzzles, strips for sliders, and anything where Instagram is not the destination.
Does the splitter upload my image anywhere?
No. The image is decoded in your browser, the tiles are cut on an in-memory canvas, and the ZIP archive that downloads is assembled locally too. Nothing is transmitted, stored, or logged — the network stays quiet from the moment the page finishes loading.
How many pieces can I split an image into?
There is no hard cap — 20×20 is 400 tiles and still runs comfortably on a modern laptop. The practical ceiling is your patience for downloading and reassembling that many files. Very large grids on very large images are limited by available memory, not by any rule in the tool.
What DPI should I split a poster for printing?
150 DPI is the working standard for posters viewed at arm's length or beyond — an A2 at 150 DPI is 2480×3508 pixels, which quarters cleanly into a 2×2 of A4 tiles at 1240×1754 each. 300 DPI doubles the pixel count in each direction (4960×7016) and only matters when the print will be inspected up close; large-format printing at viewing distance forgives the lower figure, and the file sizes thank you.
How do I split a long screenshot into readable chunks?
Set rows to the number of chunks and columns to 1, then size the grid so each band stays legible — a 1080×12000 screenshot divides into ten 1080×1200 bands that read naturally on a phone screen. Cut where the content changes rather than mid-paragraph: the preview overlay shows exactly where each horizontal cut lands before anything is committed.
Can I split an image without losing quality?
Yes — splitting is a lossless pixel copy. The only quality risk is the export format: PNG and lossless WebP tiles reproduce the source exactly, while JPG tiles re-compress once. Keep PNG for text, screenshots, and sprites with hard edges, and reserve JPG for photographic tiles where a single re-compression is invisible.
Why do my sprite frames show thin edges of the neighboring frame?
Texture filtering. When the engine draws a sprite scaled, rotated, or positioned at a non-integer offset, bilinear sampling reads slightly outside the frame's rectangle — and if frames sit flush in the sheet, 'outside' means the adjacent sprite's pixels. Insert 2–4 pixels of padding between frames when you split, or extrude each frame's edge pixels into the gap, and the slivers disappear.
Do sprite sheets still need power-of-two dimensions?
Less than they used to, but the habit pays. Modern desktop and mobile GPUs render non-power-of-two textures fine for regular sprites, so a 516×1030 padded atlas works. The exceptions that keep the convention alive: mipmapped textures, texture compression formats, and some console or older mobile paths that either require powers of two or silently pad to them — which shifts your coordinates. If the atlas feeds mipmaps or compressed formats, rounding up to 1024 or 2048 and placing frames inside is the safer pipeline.
Cut, then recombine
Splitting is half a workflow. These are the other halves, depending on which direction you are headed:
- Instagram Grid Splitter — the social preset version, with 3×3 and carousel tile sizes and upload-order numbering
- Image Combiner — the reverse operation: merge tiles or photos back into one image, horizontally, vertically, or in a grid
- Image Cropper — the single-region version when you need one precisely placed piece instead of all of them
A common loop: split a sheet into tiles, clean up individual pieces, then combine them back. Splitter out, combiner home. Both tools speak the same file formats, so nothing gets converted in between.
Sources and further reading
Sources and further reading
- PKWARE APPNOTE.TXT — the .ZIP file format specification(pkware.cachefly.net)
- MDN Web Docs: CanvasRenderingContext2D.drawImage()(developer.mozilla.org)
- MDN Web Docs: Canvas API(developer.mozilla.org)
- MDN Web Docs: File API(developer.mozilla.org)
- W3C Portable Network Graphics (PNG) Specification(w3.org)
We cite primary sources (standards bodies, government agencies, official documentation) wherever they exist so you can verify every number on this page yourself.