piapia123
en

Payment Codes on One Image

Images

Everything runs locally in your browser — nothing is uploaded

Drop an image here, or click to choose

Or press Ctrl/⌘ + V to paste a screenshot

PNG / JPEG / WebP / GIF / BMP / AVIF · up to 30 MB each

Put two payment QR codes on a single image so a customer scans once and picks. The one real constraint: never rescale a QR code. The instinct is to scale both to a common height and line them up, but a QR code is a grid of modules and scaling resamples it, smearing squares into grey edges; downscaling discards sampling points — shrink an 800px code to 400px and a stripe one module wide may end up half a pixel. The result looks perfectly fine and only fails when a customer is standing at the counter. So nothing here is scaled: both codes are drawn at their original pixel size, each centred in its own cell. Codes of very different sizes will not look tidy, and untidy beats unscannable. The surrounding white space is not a style choice, it is what makes scanning possible. A QR code needs a clear margin (the quiet zone, four modules wide by spec) so scanners can find its edges; two codes placed too close lose that margin on their facing sides. The background must be light as well: scanners find the code by the contrast of dark modules against a light field, and on a dark background the quiet zone disappears. Colours, captions and spacing are all adjustable with a live preview. Everything happens locally and the codes are never uploaded — a payment code is your account information, which matters more here than with any other image.

Features

  • Merge two (or more) payment codes into one image
  • Side by side or stacked
  • ⚠️ Nothing is rescaled — original pixels only, because scaling destroys scannability
  • Adjustable margin and gap (the margin is the quiet zone a scanner needs)
  • Optional caption under each code, such as the wallet’s name
  • Adjustable background, white by default (dark backgrounds break scanner edge detection)
  • Codes of different sizes are each centred in their own cell
  • If the canvas exceeds the browser limit it says how to shrink it rather than handing you a blank image
  • Merged in the browser; the codes are never uploaded

How to use

  1. Choose the first payment code, then the second (the order sets the layout order)
  2. Pick side-by-side or stacked, and fill in the two captions if you want them
  3. Adjust the margin and gap to taste (do not shrink the margin too far)
  4. Download the merged PNG

FAQ

Why not scale both codes to the same size?
Because it destroys scannability — in a way you cannot see. A QR code is a grid of modules and scaling resamples it; enlarging merely softens the edges, but shrinking throws sampling points away. An 800px code reduced to 400px can leave a one-module stripe half a pixel wide, and the scanner is then guessing. Hence nothing is rescaled here. It is also why two codes of different sizes come out untidy: tidiness is secondary, scannability is the hard requirement.
Why leave so much white space?
Because the QR specification requires a clear margin around the code (the quiet zone, at least four modules wide) for scanners to find its edges. When two codes sit next to each other, the space between them serves as the quiet zone for both — leave too little and a scanner may merge them into one code or fail to find an edge. The default 32px is estimated for typical payment codes; if yours are large (1000px and up), scale it up proportionally.
Can I use a dark background?
No — scanning will fail. QR recognition depends on the contrast of dark modules against a light field: the scanner binarises the image, then looks for the code’s boundary and quiet zone. On a dark background the light quiet zone is gone and the boundary cannot be found. It is not “some phones struggle”, it is “it does not scan”. The option is there for the cases where you genuinely know what you are doing.

Related tools