Skip to content

Image Combiner

Drop image A or click to browse

Image A — drawn first (bottom)

Drop image B or click to browse

Image B — drawn on top by default

Estimates for educational purposes — not financial, medical, or legal advice. See terms.

Sometimes you need two images on one canvas — a screenshot next to a phone mockup, a logo over a photo, two halves of a before/after, a watermark on a hero shot. This tool lays both onto a canvas you control: pick the canvas size and background, drag each image where you want it, scale each independently, then export. Runs entirely in your browser via Canvas, no upload.

How combining works

The canvas is your output. Set its dimensions (or pick an aspect-ratio preset) and its background — solid colour or transparent. Both images are placed on the canvas in their natural pixel dimensions at a default fit-within scale, centred. From there each layer is independently draggable (pointer events) and independently scalable (5–300% multiplier on its natural size).

When you click Combine, the tool renders the canvas at exactly its source dimensions and draws each layer with ctx.drawImage(bitmap, x, y, scaledWidth, scaledHeight). The on-screen surface is a scaled preview that preserves the canvas aspect ratio exactly — what you see is what you get, just at smaller display pixels.

Canvas presets

PresetRatioCommon use
FreeanyCustom dimensions, posters, banners with specific pixel targets
1:1squareInstagram square, profile collages, avatar composites
4:3classicOld monitors, presentation slides
16:9widescreenYouTube thumbnails, hero banners, video stills
9:16verticalStories, Reels, TikTok, mobile-first verticals

Picking a preset locks the aspect — typing a new width updates the height automatically (and vice versa). Free mode lets you set both dimensions independently.

Example: phone mockup with a screenshot

Drop the phone mockup as image A and your screenshot as image B. Pick a 9:16 canvas at 1080×1920 (story format). Drag the mockup to position, then drag the screenshot over the screen area — scale it with the B slider until it fills the mockup’s display. Toggle A-on-top so the mockup bezel sits above the screenshot. Combine, export PNG.

Example: before / after collage

Two photos at the same size, side by side on a 16:9 canvas. Drop the “before” as A and “after” as B. Pick 16:9 at 1920×1080. Re-centre A and shrink to 50% scale — drag to the left half. Re-centre B and shrink to 50% — drag to the right half. White background, export JPG.

Example: logo watermark on a hero photo

Drop the photo as image A and the logo PNG as image B. Pick Free, type the photo’s width and height. Toggle Transparent off (you want the photo as background, not the canvas itself). Set background colour to anything — it will be entirely covered by A. Scale B down to ~15% and drag to a corner. Combine, export PNG to keep the logo’s transparency edges crisp.

When to combine with other tools

  • Need to crop first? Run each image through the image cropper, then combine.
  • Need a specific output size that differs from canvas? Combine first, then run through the image resizer.
  • Final output too large? Combine first, then compress to drop the file size.

Common mistakes

Picking a canvas smaller than the images. Both layers default to fit-within (never enlarged), so if your canvas is 800×800 and image A is 4000×3000, A starts at scale ≈0.2 to fit. That’s fine for preview but the export resamples down — no path back to the original resolution. If full resolution matters, set the canvas at least as large as the larger layer.

Expecting JPG with transparency. JPEG has no alpha channel — the JPG option is disabled when Transparent is on. Either pick a background colour (then JPG is available) or accept PNG (which preserves transparency).

Scaling past 100% and expecting it to be sharp. Past natural size, the browser upsamples — expect softness from ~150% onward. For sharper enlargements, source a higher-resolution version of the image.

Dragging a layer off-canvas and losing it. Layers can drift past canvas edges (that’s the point — sometimes you want partial overlap with the edge). If you lose one off-screen, click Re-centre on its slider to snap it back.

What this tool does not do

It doesn’t rotate or flip. Pre-rotate via your image editor or use the image cropper which respects EXIF orientation.

It doesn’t mask, blend, or apply filters. Each layer is drawn opaque (or with its own transparency, for PNGs) — no blend modes, no opacity slider per layer, no feathered edges.

It doesn’t stack more than two images. Two layers is the v1 scope; three+ moves into compositor territory.

It doesn’t upload anywhere. All composition runs client-side via Canvas (and pdf-lib for PDF output, also client-side). To convert the combined output to a different image format, the image format converter is the follow-up; to merge the PDF with other PDFs use the PDF merger.

Frequently asked questions

Why can't I pick JPG when transparent is on?

JPEG has no transparency channel — every JPEG pixel is fully opaque. If the background is transparent the output has to be PNG, otherwise the empty canvas areas would render as a colour you didn't pick (browsers usually flatten to black or white depending on encoder). Toggle off transparent and the JPG option is back.

Do the images stay at their original resolution?

Layers are drawn at canvas-source pixel coordinates with `ctx.drawImage(bitmap, x, y, w, h)`. If the canvas is larger than the bitmap and you scale up beyond 100%, the browser upsamples — expect some softness past ~150%. For a sharp result, set the canvas at least as large as the largest layer you intend to use at 100%.

How do I swap which image is on top?

Use the layer-order toggle below the scale sliders. By default A is drawn first (bottom) and B is drawn over it. Flip the toggle and B goes first, A on top. There's no per-layer z-index UI in v1 — two layers, one toggle.

What canvas size should I pick for social media?

Common targets: Instagram square 1080×1080 (1:1), Instagram portrait 1080×1350, Instagram story / TikTok / Reels 1080×1920 (9:16), Twitter/X landscape 1600×900 (16:9), YouTube thumbnail 1280×720 (16:9), Facebook cover 1640×624. Pick the aspect-ratio preset and type the width — the height derives automatically.

Why does the layer outline only show on the one I'm dragging?

Whichever layer you last clicked is marked 'active' with an accent outline so you can tell which one your slider and re-centre buttons act on. The outline is UI only — it never appears in the exported image.

What's inside the PDF — vector or raster?

Raster. The tool rasterises the canvas at its exact source dimensions and embeds the result as a single image on a single PDF page sized to match (at 72 DPI). When the background is opaque the image is embedded as JPEG (~3–5× smaller); when it's transparent it's embedded as PNG (PDFs handle PNG alpha natively). For genuine vector compositing you'd want a tool like Inkscape or Illustrator — this tool's job ends at flattening pixels onto a canvas.