Making a QR code in colour
You can put a QR code in brand colours. Scanners just do not see colour. They convert the photo to greyscale and only ask what is lighter and what is darker, so picking colours is really picking a brightness gap.
To a scanner everything is grey
A scanner reduces every pixel to one brightness value and calls it dark or light relative to its neighbours. Red and green look nothing alike to you, but if their brightness is similar they are the same grey to the scanner.
So there is only one thing to check: is the dot colour much darker than the background?
What works and what does not
| Dot colour | Result | Why |
|---|---|---|
| Navy, deep green, dark brown | Reads well | Close to black in brightness |
| Bright red, orange | Risky | Registers lighter than it looks |
| Yellow, sky blue, lime | Fails | Barely darker than white |
| Mid grey, #666 or darker | Mostly reads | Starts failing in poor light |
Bright red is the classic trap. It looks loud, but its brightness sits in the middle, and under strong light it can blend into a white background. If your brand colour is on the light side, keep the dots dark and use the brand colour for a frame or the surrounding design instead.
Dark backgrounds
White dots on black look sharp, but not every scanner reads them. The spec assumes dark modules on a light background, and whether an app also tries the inverted image varies from one app to the next.
That is why this site keeps its preview on white even in dark mode. Plenty of people scan straight off a screen, and an inverted code shown there would fail on some phones.
If a code has to sit on a dark background, give it a white box with a quiet border and draw dark dots inside. The spec recommends a border four modules wide.
Gradients and transparency
A gradient on the dots is fine as long as its lightest end is still clearly dark. A gradient on the background is riskier, because one end easily ends up close to the dot brightness.
Transparent PNGs deserve care too. On a white page they are fine, but the moment someone drops the image onto a dark slide or photo the contrast disappears. This site always fills the background white when saving for that reason.
The easiest check
Convert your finished code to black and white. Any photo app's mono filter will do. If the dots stand out clearly from the background in greyscale, the scanner will see them. If they blur together, darken the colour.
Measured limits for dot size and grey are in making it scan reliably.