Skip to content
ToolBoxGeniehome

Image Joiner

Image Tools · Added

Pick two or more images and get one file back. They can run side by side, stack into a column, or wrap into a grid, and you can reorder them before anything is drawn. The awkward part of joining pictures is that they are rarely the same size, so there are three explicit answers to that rather than one silent guess — and none of them enlarges an image to fit.

Or drop files onto this box. Choose again to add more.

Two or more, up to 20. JPG, PNG, WebP, GIF, BMP or AVIF, each up to 30.00 MB. They are joined on your device — nothing is uploaded.

How to use the image joiner

  1. 1Choose two or more images, or drop them onto the box. Choose again to add more to the set.
  2. 2Put them in the order you want with the arrows beside each one — the order is top to bottom for a stack, left to right for a row.
  3. 3Pick a layout, then decide how to handle differing sizes: match them on the joining edge, keep every original size, or give each an equal cell.
  4. 4Set a gap, a border and a background colour if you want them, then download. The preview is the file you will get.

Examples

A before and after pair

Input
Two 1200 × 800 photos, side by side, 20 px gap on white
Result
One 2420 × 800 image

Equal-sized sources need no scaling at all, so nothing is resampled and neither photo softens.

A long page in three screenshots

Input
Three screenshots 1080 px wide, stacked, no gap
Result
One tall 1080 px image

Matching on width means the column has no ragged edge. Screenshots are usually already the same width, so nothing gets scaled.

Mismatched sizes

Input
A 4000 × 3000 photo beside an 800 × 600 screenshot, side by side, sizes matched
Result
Both drawn 600 px tall — the photo scaled down, the screenshot untouched

The common height is the smaller of the two. Scaling the screenshot up instead would invent detail it does not have.

About the image joiner

Order is the feature, not the decoration

Most of the effort in joining pictures goes into getting them in the right sequence, and a file picker returns them in whatever order the operating system felt like. Screenshots named in a sensible sequence usually survive; photographs straight off a phone usually do not. So the list here is reorderable, and the order it shows is the order that will be drawn — left to right in a row, top to bottom in a column, and along each row in turn for a grid.

It is worth checking before downloading rather than afterwards, because there is no way to reorder a montage once it is a single flat image. The preview is the actual output rather than an approximation of it, so what you see is what the file contains.

Why the pixels are rounded the way they are

Every position and size is worked out in exact arithmetic and rounded once, at the end, to whole pixels. A canvas cannot draw on a half pixel: give it a fractional destination rectangle and it resamples the edge, which shows up as a faint blur along one side of an image that should have been copied across untouched.

Sizes also have a floor of one pixel. A degenerate input — an image scaled to nothing by an extreme size mismatch — would otherwise produce a zero-width draw call, and browsers disagree about what that means: some throw, others silently draw nothing at all. Flooring at one keeps the behaviour the same everywhere and keeps a visible mark where the image was.

Joining and splitting are opposites, and both round the same way

This tool and the image splitter are two halves of the same arithmetic. The splitter divides one picture into tiles whose boundaries are computed as exact fractions so that they reassemble with no seam; the joiner places pictures at positions computed the same way so that the gaps are exactly what you asked for and no image lands a pixel off.

The practical consequence is that splitting an image and joining the pieces back with a zero gap returns the original dimensions. That is a useful thing to be able to rely on, and it is the reason both tools keep their geometry in a small, separately tested library rather than working it out inline where nobody would ever check it.

Frequently asked questions

My images are different sizes. What happens?
You choose, from three options that give genuinely different results. Match sizes scales them to a common edge so the join is flush and there are no gaps. Keep original sizes resamples nothing at all, which leaves background showing beside the smaller pictures but means no image loses a single pixel of detail. Equal cells gives every picture an identical box and fits it inside, letterboxing where the shape does not match, which is what makes a grid look like a grid. There is no correct default for all cases, which is why the choice is on the page rather than made for you.
Why does matching sizes make everything smaller?
Because the common edge is taken from the smallest image in the set, and the scaling only ever goes downwards. The alternative would be to enlarge the smaller pictures up to the largest, and enlarging cannot add detail that is not in the file — it produces a soft, blurred result and a much bigger download in exchange for nothing. If you need the output at the larger size, enlarge the small image deliberately with the resizer first, look at what that costs, and then join.
What format does the joined image come out as?
The same format as the first image in the list, so a set of JPEGs produces a JPEG and a set of PNGs produces a PNG. That means a JPEG source goes through one further generation of lossy compression, which is unremarkable for photographs and visible on screenshots, diagrams and anything with text or hard edges. If your sources are that kind of picture, convert them to PNG before joining and the output stays lossless.
Is there a limit on size or number?
Twenty images at a time, thirty megabytes each, and the finished canvas has to stay within roughly forty megapixels. That last limit is the browser's rather than this page's: a canvas beyond it comes back blank or transparent instead of raising an error, which is the worst possible failure because it looks as though it worked. So the size is checked before anything is drawn and you get a message rather than an empty picture. Matching sizes usually brings a set back under the limit, since it scales to the smallest image rather than the largest.
Are my pictures uploaded?
They are not. Each file is decoded by your own browser, drawn onto a canvas inside this page and encoded back into a new image there — no part of that journey involves a server, and no copy of your files reaches this site. It is also why a set of very large photographs can be slow on an older phone: the work is being done by your device rather than somewhere with more memory to spare. Closing the tab discards everything.