Why Colour Customisation Matters
A plain black-and-white QR code works, but it blends into nothing. A branded QR code with your brand colours reinforces recognition, increases scan rates by up to 35% in A/B tests, and communicates professionalism. The challenge: colour changes reduce contrast and can push error correction to its limits.The Golden Rule: Dark on Light
QR scanners look for dark modules on a light background. The camera firmware calculates a contrast threshold between the foreground (modules) and background. If the contrast ratio falls below approximately 3:1, many scanners will fail to decode reliably.Safe: Dark navy on white, dark green on cream, dark burgundy on pale grey. Risky: Medium blue on light blue, orange on yellow, dark grey on dark blue. Never: Light colours on white, dark colours on black.
Calculating Contrast Safely
Use the WCAG contrast ratio formula — the same used for accessibility:| Foreground | Background | Contrast Ratio | Scannable? | |---|---|---|---| | #000000 (black) | #FFFFFF (white) | 21:1 | Always | | #1A237E (dark navy) | #FFFFFF (white) | 14.2:1 | Yes | | #2E7D32 (dark green) | #F5F5F5 (off-white) | 9.1:1 | Yes | | #FF6F00 (amber) | #FFFFFF (white) | 3.0:1 | Marginal | | #FF6F00 (amber) | #FFF9C4 (pale yellow) | 1.5:1 | No |
Aim for a minimum 4:1 ratio. Use a tool like [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/) to verify any colour combination before printing.
Brand Colour Integration
Most brand guidelines specify a primary and secondary colour. Map these to QR modules:- Primary brand colour → foreground modules (must be the darker colour) - White or light brand background → module background - Secondary accent → frame border or call-to-action text, not the modules themselves
If your brand primary is a light colour (pastels, yellow, lime), it cannot be used as the foreground. Use a darker shade from your extended palette instead.
Gradients and Patterns
Gradients applied to QR modules are high-risk. A gradient that fades from dark to light across the code creates regions where the local contrast drops below the scanner threshold. If using gradients:- Apply only to the background, not the modules - Keep module colour uniform and dark - Test with at least three different scanner apps before printing
Error Correction as a Safety Net
Higher error correction levels allow more of the code to be damaged or misread before decoding fails:- Level L (7%) — low tolerance, maximum data density - Level M (15%) — standard choice for colour customisation - Level Q (25%) — recommended for complex colour changes or logo embeds - Level H (30%) — use when applying logos or heavy colour effects
When using non-standard colours, always use Level Q or H error correction.
Testing Before Printing
Never print without testing. Scan your customised QR with: 1. iPhone Camera app (iOS 11+) 2. Google Lens on Android 3. A budget Android phone in poor lightingIf all three scan reliably, the design is safe to print. If any fails, increase contrast or switch to Level H error correction.
