Skip to main content

How QR code scanning works

A phone camera scanning a QR code goes through three steps, all in well under a second: find the code in the frame, correct for angle and lighting, then decode the grid into the original data. Most scan failures come from one of those three steps breaking down — usually for a reason you can fix before printing.

Contrast matters more than color

The scanner is looking for a sharp light/dark boundary, not a specific color. A RubyQR code customized with a light foreground on a dark background, or a low- contrast color pair, can be harder for older cameras to find — as a rule of thumb, keep the contrast between foreground and background close to black-on-white, and preview the code at the size and material it'll actually be printed on before finalizing.

Error correction is a size trade-off

Every QR code is generated with an error correction level (L, M, Q, or H) that determines how much of the code can be damaged or covered and still scan correctly — higher levels tolerate more damage but produce a denser, larger grid for the same data. Adding a logo to the center of a code (as RubyQR's customizer supports) uses up some of that error-correction budget, so a logo-embedded code should use a higher correction level than a plain one.

Size scales with distance and content

A code needs to be large enough, relative to the scanning distance, for the camera to resolve individual modules — the small squares that make up the grid. More encoded data means more modules means a denser grid, which needs to be printed larger to stay scannable from the same distance. A short static URL code scans reliably at a small size; a long block of plain text needs to be printed noticeably bigger to stay scannable at the same distance.

The practical takeaway: before committing to a print run, scan your own code with two or three different phones, at the actual size and material you plan to use. RubyQR's live preview helps you catch density issues early, but nothing replaces an actual scan test on the real printed material.

Back to all guides