Flat white paper is the easy case. Most real placements are not. Here is what goes wrong on each surface and what to do about it.
The general fixes
Three changes solve most surface problems:
- Bigger modules. Shorten the content or enlarge the code so each square is at least 1 mm.
- Level H error correction. It costs size but buys tolerance for scratches, glare and warping.
- A matte, light tile behind the code. It restores contrast and a flat quiet zone whatever is around it.
Surface by surface
| Surface | What goes wrong | Fix |
|---|---|---|
| Curved (cups, bottles, cans) | Perspective distortion, one edge out of focus | Keep code width under 20% of circumference, level H, alignment patterns help so version 2 or above |
| Metal | Reflections, low contrast if etched | Matte finish, dark fill in etching, or a printed plate; never bare polished metal |
| Glass and windows | Reflections, see-through background | Opaque white backing behind the code; scan side facing the reader; matte vinyl |
| Fabric and embroidery | Edges blur, thread gaps read as light | Large modules (2 mm and more), level H, printed rather than stitched where possible |
| Transparent packaging | Contents show through the quiet zone | Solid white block behind the code |
| Textured paper, kraft, canvas | Ink spreads, background not white | Larger modules, test the real stock, consider a white label |
| 3D printed | Layer lines, low contrast between colours | Two-colour print with high contrast, raised modules at least 1.5 mm, matte |
| Engraved wood or stone | Grain and shadows | Dark fill in the engraving, large modules, avoid direct sunlight angles |
| Outdoor signs | UV fade, rain, dirt | UV-stable inks, laminate, level H, larger than the distance rule suggests |
| Vehicles | Curves, reflections, movement | Flat panel placement, large size for 5 to 10 m, matte wrap |
Do this
A 4 cm level H code on a matte white label wrapped around a bottle, code width a sixth of the circumference.
Not this
A 9 cm code printed straight onto the curved glossy label so the outer modules disappear at the edges.
Curves in more detail
A scanner needs to map the code’s grid onto the image. Alignment patterns exist for exactly this, but they can only correct so much. As a rule, if you can see the whole code without the edges bending away sharply, it will scan. On a 7 cm diameter cup (22 cm circumference), keep the code under about 4 cm.
Metal and glass
Reflections are the enemy. A polished surface mirrors the room and the scanner sees light where there should be dark modules. Matte finishes, a slight tilt in the mounting, and placing the code where lights are not directly behind the reader all help. For etched metal, the etch itself has no colour; fill it.
Do this
Etched code on brushed stainless with the recesses filled black, matte lacquer over the top.
Not this
Etched code on polished steel with nothing in the recesses. Beautiful, unreadable.
Fabric
Printed fabric works with large modules. Embroidery is hard: thread has thickness, gaps and sheen. If you must embroider, use a version 1 or 2 code, modules of 3 mm or more, high-contrast thread, and test the finished piece under several lights.
Outdoors
Everything fades. Choose UV-stable inks, laminate or use aluminium composite, and size the code larger than the distance rule alone suggests because dirt and weather will eat some of the margin. Level H. Check it every few months.
In practice
On any non-paper surface, order one sample before the run and scan it in the place it will live. Every one of these problems is visible on the first sample and invisible on a screen proof.
Try it in QR Studio
QR Studio’s print-ready PDF export includes bleed and crop marks, which label and wrap printers need, and the size guide flags module sizes under 1 mm.
Checklist
- Surface identified and its fix from the table applied
- Modules at least 1 mm, 2 mm for fabric or engraving
- Level H
- Matte, light background behind the code
- Sample scanned on the real object in the real light
- Outdoor: UV-stable, laminated, on a maintenance schedule
Try it yourself
Work out the module size at your intended print size, then pick a version that keeps modules above 1 mm.