Scanning
QR scanning at an angle
Phone decoders correct perspective reliably to about 30–45° off-axis, using the three finder patterns and alignment patterns to un-skew the grid. Beyond that, foreshortening compresses modules below the sampler's resolution in one axis and decoding fails. Mount codes at eye height, square to the reader's approach.
Decoders expect tilt, up to a point
Nobody holds a phone perfectly square to a poster, and the format was designed accordingly. The three finder patterns give the decoder three known corners; from those it computes the perspective transform that maps the photographed quadrilateral back to a square grid. In larger codes, alignment patterns pin down additional interior points so local warp gets corrected too.
The result: up to roughly 30° off-axis, scanning is essentially unaffected; between 30° and 45° it still works but slows; beyond 45° reliability falls off a cliff.
Why steep angles fail: foreshortening
Tilt compresses the code in one axis by the cosine of the viewing angle. The decoder can mathematically un-skew the shape, but it cannot recover detail the sensor never captured, once the compressed modules drop below the sampler's ~3 pixels-per-module floor, the information is gone.
| Off-axis angle | Apparent width in the tilted axis | Effect |
|---|---|---|
| 0° | 100% | Baseline |
| 30° | 87% | Negligible |
| 45° | 71% | Works; needs a bigger code or closer scan |
| 60° | 50% | Modules halved: code must be ~2× larger to compensate |
| 75° | 26% | Practically unscannable |
Read it as a multiplier on the 10:1 distance rule: a code read at 60° needs to be about twice the width the distance alone demands. Angle and distance spend the same budget: the full model is in scanning distance limits.
Two second-order effects make steep angles worse than the cosine alone suggests: depth of field (near and far edges of the code sit at different distances, so one edge is soft) and glare, since shallow angles on glossy surfaces catch reflections, the same mechanism covered in glossy surfaces and glare.
Placement: design the angle away
Every steep-angle scan is a placement decision someone made earlier. The fixes:
- Eye height, vertical surface. Mounting at 1.4–1.6 m puts the average adult square-on by default. This and the surrounding layout rules are covered in QR code placement in a layout.
- Beware flat codes read from standing. A sticker flat on a table or counter is read at 45–60° by anyone standing over it. A table tent presents the code vertically and removes the problem, which is much of why table tents exist.
- Floor graphics are the extreme case. Read at 60–75° from standing height, they need to be several times oversized to scan at all.
- Perpendicular to the approach. In a corridor or queue, face the code toward where people stand, not sideways along the wall.
- Curved surfaces are angle problems in disguise. A bottle or pole presents a continuum of angles across one code; the working limits are in QR codes on curved surfaces.
Before printing, check the code has healthy margins with the validator, and size it with the size calculator, then, if users will predictably read it off-axis, go a size up.
FAQ
At what angle does a QR code stop scanning?
Most phone decoders handle up to about 30° off-axis without any trouble and keep working to around 45°. Beyond that, foreshortening compresses the modules below what the camera can resolve, and scans become slow, then impossible, by about 60–75°.
How do QR codes work at an angle at all?
The three large corner squares give the decoder three known reference points, from which it computes and reverses the perspective distortion. Alignment patterns inside larger codes correct residual warp. The limit is the camera's resolution, not the maths.
Where should I place a QR code so the angle is not a problem?
On a vertical surface at roughly 1.4–1.6 m (eye height) facing the direction people approach from. Avoid codes lying flat on tables and counters read from standing, which forces a 45–60° angle; a table tent solves that.
Does angle change how big the code needs to be?
Yes. Tilt shrinks the modules in one axis by the cosine of the angle, so a code read at 60° presents half-width modules and needs to be about twice as large as the scan distance alone would require.
Try it: free, no signup
Related
- How to scan a QR code on any device, On iPhone and Android, open the camera app and point it at the code: a banner appears with the destination. No separate app is needed on any current…
- Scanning distance limits for QR codes, The full distance model (a near focus floor around 5–10 cm, a far ceiling from the 10:1 rule), with a size table and how optical zoom changes the limits.
- QR scanning in low light, Why QR codes fail in dim rooms (longer exposures turn shake into blur), and what helps: light, bracing, torch technique on gloss, and bigger modules.
- QR code placement in a layout, Where a QR code belongs on the page: the bottom-right convention, 10 mm clearance from folds and trim, and one code per visual zone.