Printing QR codes: CMYK, contrast and paper
A decoder sees greyscale. Most print failures are a colour decision, a registration problem or a missing quiet zone.
What this covers
- Contrast as a luminance question, with a rule you can check
- Why red and orange codes fail on hardware that reads black ones
- Building the dark modules in CMYK without misregistration fringes
- Resolution, dot gain, substrate and a pre-press checklist
What it does not
- Screen printing, embroidery and laser marking, each of which has its own minimum feature sizes
- Specific ICC profiles and press conditions, which belong to your printer
- Any claim that a colour will work: a proof scanned on real stock is the only evidence
Contrast is luminance, not colour
A decoder converts the camera frame to greyscale and then decides a threshold. Whether your two colours look different to a person is irrelevant; what matters is whether they separate once the colour is thrown away.
A rule you can actually check: linearise the sRGB channels of each colour and compute 0.2126R + 0.7152G + 0.0722B. Keep the dark modules below about 0.2 and the background above about 0.7. If that is more arithmetic than you want, open the artwork in a greyscale preview — the dark modules should look nearly black and the background nearly white. Anything that looks like two greys will scan on a good phone and fail somewhere else.
Green is the trap worth naming. Its luminance coefficient is over seven times blue's, so a mid-green that looks dark on screen converts to a mid-grey, while a deep navy that looks lighter converts to near black. Judge by the greyscale conversion, never by the swatch.
The red-light problem
Phone cameras see full colour. Many fixed and handheld barcode scanners do not: they illuminate the symbol with a red source around 660 nm and measure what comes back. Red, orange and warm brown reflect that light almost as well as white paper does, so a code those scanners cannot see at all can look perfectly good to every phone in the office.
If a code might ever be read by dedicated hardware — a till, a warehouse imager, a ticket gate — keep the dark modules black, near-black or blue-black. If it will only ever meet phone cameras, you have more freedom, but the greyscale test above still applies.
| Combination | Phone camera | Red-light scanner |
|---|---|---|
| Black on white | Reads | Reads |
| Dark navy on white | Reads | Reads |
| Mid grey on white | Usually reads | Often fails |
| Red or orange on white | Usually reads | Usually fails |
| Light modules on a dark background | Often reads | Usually fails |
| Dark modules over a photograph | Unreliable | Fails |
Inverted codes deserve their own sentence. Light modules on a dark background are outside the specification, which assumes dark on light. Phone readers frequently cope; plenty of dedicated readers never will. Treat inversion as a risk you are consciously accepting, not as a supported option.
CMYK: put the dark modules on 100% K alone
A four-colour build of black requires four plates to land exactly on top of one another. Any misregistration appears as a coloured fringe along every edge in the artwork — and in a QR code, every edge is precisely where the decoder is deciding dark from light. A symbol printed as 100% K alone cannot misregister with itself.
That rules out rich black too. A build such as 60C 40M 40Y 100K gives a deeper black across a large area and buys nothing on a grid of half-millimetre squares, while adding three chances to shift. If the code has to carry a brand colour, use a single dark spot colour or a single dark process colour, never a build of several.
- Dark modules: 100K, or one dark spot colour. One plate, one ink.
- Background: the paper, or a single very light flat tint. No gradients, no images, no texture.
- Never overprint the code on top of another element, and never set it to knock out of a photograph.
- Do not let a trapping setting spread ink into the modules; the code should be excluded from trapping.
Resolution, ink spread and substrate
- Place the symbol as vector — SVG, EPS or PDF — whenever the workflow allows it. A vector code has no resampling artefacts at any size, which is why every export here offers SVG.
- If it has to be raster, export at final size at 600 ppi for offset and at least 300 ppi for digital, and check that one module lands on a whole number of device dots rather than one and a half.
- Uncoated stock, newsprint and thermal paper all spread ink. Modules grow, the light gaps between them close, and the decoder sees noise. A proof on the real stock is the only way to know how much.
- Thermal receipt paper also loses contrast with heat and age, so give a receipt code more width than a flyer with the same payload.
- Keep gloss varnish and lamination off the code where a specular highlight could land on it, and keep the code off folds, seams, perforations and tight curves.
The quiet zone survives all of this only if it is in the layout. Four modules of background on every side, clear of rules, borders, cut marks and folds. It is not white space around the code; it is part of the code.
Pre-press checklist
- Vector artwork, dark modules on 100K or one dark spot colour, background flat and light.
- Four-module quiet zone present, in the background colour, clear of every mark on the sheet.
- Module width at final size measured and at or above 0.5 mm.
- Code excluded from trapping and overprint settings.
- Proof printed on the real stock at the real size.
- Proof scanned with at least two phones, one of them old, in the light the code will actually live in.
- If the piece folds, scan it after folding; if it is a receipt, scan one printed from the actual till.