QR code colors and contrast: what still scans
A branded QR code looks better than a black-and-white one — right up until a scanner refuses it. The rules are simpler than they look: it is all about contrast and polarity.
Updated October 6, 2026 · 4 min read
Polarity matters as much as contrast
Scanners expect dark modules on a light background. Inverting that — light modules on a dark background — works on some phones and fails on others, so it is a gamble on a print run.
The reason is that decoding happens on luminance, not on colour. A camera delivers a colour image, but the step that turns it into modules is looking for the darker marks. Invert the polarity and you are asking the software to notice the opposite of what it was built for; newer phones often manage it, older ones often do not.
- Dark foreground, light background: safe
- Light foreground, dark background: risky
- Low-contrast pairs like gray on white: unreliable
- Similar hues (red on orange): unreliable
How much contrast is enough
What matters is how far apart the two colours are in brightness, not how different they look. A navy on cream reads as a strong contrast; a red on orange looks like two very different colours and is nearly nothing in luminance.
A useful anchor is the accessibility idea of a contrast ratio: at least about 4.5:1 between the modules and the background, and 7:1 or better if the code will sit outdoors, under spotlights or behind glass. Print standards describe the same quantity as symbol contrast and expect it to stay comfortably above roughly 40% on the finished piece.
- Measure brightness, not hue: a contrast checker, not your eye
- Ink on paper loses contrast; aim for a margin, not a pass
- Matte stock holds the difference better than gloss, which reflects light back
Colour pairs that work, and pairs that do not
Almost any dark colour scans on a light background. What fails is usually not the colour but the pairing: two mid-tone colours that sit close together in brightness, or a background too dark to be a background.
- Work well: dark blue, deep green, dark red or near-black on white or a very light tint
- Marginal: mid-grey on white, brown on orange, black on dark blue
- Fail: white and yellow, red on orange, anything light on a light background
- Anything with a gradient or a photo behind the modules
Branding without breaking it
Use your brand colour for the modules and keep the background near-white or a very light tint. Round the modules and restyle the corners if you want, and raise error correction if you also add a glyph.
On a dark package, do not invert the code: print a light panel first and place the code on that. The result looks intentional and keeps the polarity every scanner expects. The margin around the code needs the same treatment — a quiet zone that is dark does not count as a quiet zone.
- Dark brand colour on a light background is usually a straight swap for black
- Keep the quiet zone the same colour as the background
- Raise error correction to H for any heavy restyling
Test the colour on the printed piece
The quickest check costs nothing: view the artwork in greyscale. If the modules and the background collapse towards the same grey, the code will fail on a scanner that only sees brightness, however distinct the colours look in full colour.
Then test the real thing. Colour shifts between screen and print, and a code that separates cleanly on a monitor can lose its margin on tinted or recycled stock. Check in the light it will actually live in, not in a well-lit office.
- Greyscale the artwork before you send it to print
- Scan a printed proof, not the screen
- Check under the light the code will actually be read in
Frequently asked questions
Can QR codes be any color?
Do inverted QR codes work?
What contrast should I aim for?
Does a scanner see colour?
Is a coloured background allowed?
How do I check contrast without specialist tools?
Keep reading
Ready to create one?
Dynamic codes are editable forever from €3/month.
Create your first dynamic QR code
Free to start. One code, editable forever, with scan tracking from the first scan.