QR Code Contrast Checker

Enter the colors a code is drawn in and the surface behind it. The checker returns the contrast ratio for the pattern and for the finder eyes, the luminance difference a camera actually sees, and whether the pair is safe to print.

The surface behind the code. Keep it near white - lightening the background is not a substitute for darkening the code.

The colour of the data modules.

The three corner squares. They have to stand out from the background as clearly as the pattern does - a scanner finds them first.

Preview

Screen ready

6.70:1

Judged on: Pattern contrast

Fine on a display, and short of the margin print takes away. Darken the code before it goes on paper.

Where this lands

Decoder floorPrint target

Pattern contrast

6.70:1

Eye contrast

6.70:1

Camera luminance difference

176 / 255

Out of 255, on the BT.601 weighting a camera's grey channel is built on. The ratio weights green far higher than a sensor does, so the two numbers disagree most on saturated colour.

When a brand colour does not reach the target, darken the code rather than lightening the background - a colour two or three steps darker usually keeps its identity and doubles its ratio.

Contrast Is the One Variable Nobody Chooses

Module shape and size are decisions someone makes for a QR code. Colour is inherited from a brand palette written years before anyone thought about one - which is why it is the property that fails most often, and the one this checker exists to settle. The reasoning is in the minimum contrast scan test.

What a Decoder Actually Measures

A phone does not see colour when it reads a QR code. It converts the frame to a single grey channel and thresholds it in small blocks, deciding dark or light for each module against its local neighbourhood. Every bit of colour tolerance a code has is decided in that one step.

  • The decoder's floor sits near 1.24:1 - the point where a common binarizer stops treating a block as having any content at all - and is nowhere near where anything should be designed.
  • The screen target is 4:1, which is where the generator's own contrast badge turns green.
  • The print target is 7:1, because paper reflectance, ink spread, glare and distance each take a share of the margin.

Two Numbers That Disagree

A contrast ratio weights green at 71% of perceived brightness, following the human eye. A camera's grey channel weights it at 59% and adds no flare term at all. The two measures agree on greys and blacks and disagree most on saturated colour, which is where QR codes actually fail.

Pure green on white is the clearest case: 1.37:1 as a contrast ratio, barely above the decoder's own floor, but a luminance difference of 105 out of 255 in a camera's grey channel. One number calls it hopeless and the other calls it poor. Neither calls it printable, which is why this page reports both. Which palettes come out the other side is worked through in colored QR codes.

How to Check a QR Code's Colours

Four steps from a brand palette to a colour pair that survives print.

Generate a QR Code
  1. 1

    Enter the Background First

    The surface behind the code, and it should be near white. Lightening a background is not a substitute for darkening a code: reflectance on paper is capped by the stock, so the top of that range is already spent.

  2. 2

    Add the Pattern Colour

    The brand colour exactly as it is specified, before any correction. Checking the corrected version first hides how far the original was from the target.

  3. 3

    Check the Finder Eyes Separately

    The three corner squares are what a scanner locates before it reads a single module. A code with dark modules and pale eyes fails at the first step, and the ratio for the pattern never gets tested.

  4. 4

    Read the Worse of the Two

    A QR code scans on its weakest pair, not on its average. The verdict above is taken from whichever of pattern and eyes has less margin.

Where Common Palette Choices Land

Five colours on a white background, measured both ways - the ratio a design tool reports, and the luminance difference a camera's grey channel sees out of 255.

Deep Navy - 17.9:1

A near-black navy such as #0f172a reads at 17.9:1 with a camera difference of 232 out of 255 - within a whisker of pure black's 21:1 and 255, and unmistakably a brand colour rather than a default. The safest saturated choice there is.

Blue - 8.6:1

Pure blue on white is 8.6:1 and 226 out of 255, clearing the print target on both measures. Blue is the one hue where the eye and the camera agree, because it contributes least to both weightings. A mid blue like #1d4ed8 drops to 6.7:1 - screen-safe, just short for print.

Red and Purple - Around 5:1

Mid reds and purples land near 5:1 on white: fine for a screen, short of the 7:1 print target. Darkening two or three steps usually clears it. These hues also lose the most in CMYK, where a bright RGB red prints duller than it looked on the monitor.

Green - 2 to 3:1

The colour that works in the mockup and fails on the shelf. A common brand green like #22c55e is 2.28:1 on white, below the line anything should ship at. Darkening it to #166534 gives 7.13:1 - still recognisably the same green, now clearing the print target.

Light on Dark

An inverted code - light modules on a dark ground - is legitimate and costs margin. Most current phone cameras read one; older scanners and some industrial readers assume dark on light. Keep the ratio well above 7:1, and test on real hardware before committing a print run to it.

Rules That Keep Colour Scannable

Ten habits that keep a brand palette between a design file and a code that still reads on paper.

  • Darken the Code, Not the Background

    The background has to stay near white for reflectance to survive print, so the whole adjustment belongs on the dark modules. A colour two or three steps darker usually keeps its identity and more than doubles its ratio.

  • Design at 7:1 for Anything Printed

    4:1 is the screen target and 7:1 is the print target, and the gap between them is what paper, ink spread, glare and reading distance consume. Treat 3:1 as the line below which nothing ships in any medium.

  • Give the Finder Eyes the Same Contrast

    The three corner squares are located before anything is decoded. Styling them in a lighter accent colour than the pattern is the most common way a beautiful code fails at the very first step.

  • Never Put a Code Over a Photograph

    Contrast is thresholded locally, so a photograph flips the decision mid-symbol: the same dark module reads as dark over a pale sky and as light over a dark shadow. Put the code on a flat panel instead.

  • A Gradient Is Safer Than a Photograph

    A gradient across the modules keeps the local difference between dark and light intact everywhere, which is all a binarizer needs. Keep both ends of the gradient above the target rather than averaging to it.

  • Put the Brand Colour in the Frame Instead

    The panel behind the code, the label under it and the call to action beside it can all carry the palette at full saturation. None of them costs a single point of contrast.

  • Check the Colour After CMYK Conversion

    A bright RGB red or green loses saturation and shifts in CMYK, and the printed pair is the one that matters. Convert first, then check the converted values here rather than the on-screen originals.

  • Print the Dark Modules as 100% K

    A four-plate rich black needs perfect registration to hold a 0.4 mm module edge. Typical sheetfed tolerance of around 0.1 mm is a quarter of that module, so single-plate black keeps every edge clean.

  • Treat Metallic and Fluorescent Inks as Unmeasurable

    Gold, silver, foil and spot UV have no fixed reflectance value - they show whatever is in front of them, usually a light fitting. No ratio computed from a hex value describes them.

  • Confirm the Pair on Printed Stock

    A ratio is a prediction about a file. Print the code at final size on the real material, look at it under the light it will live in, and scan it with two different phones before signing anything off.

The KoloQR generator with a QR code being designed and ready to download

Try the Colours in the Generator

KoloQR, a free QR code generator with circular and custom-shaped QR codes, runs this same contrast check live over the preview while you edit the palette - pattern, eyes and background.

Free, with no account and no watermark. Codes are generated in your browser, so the destination is never sent to a server.

Generate a QR Code

Questions? Answered

Design to 4:1 for screens and 7:1 for print, and treat 3:1 as the line below which nothing should ship. Decoders technically work far lower - a common binarizer gives up around 1.24:1 - but that entire gap is spent on paper reflectance, ink spread, glare, distance and a moving hand.

Yes. Most current phone cameras read an inverted code, though some older scanners and industrial readers assume dark modules on a light background. An inverted code also spends more of its margin, so keep the ratio comfortably above 7:1 and test on real hardware before printing a run.

Because green sits where the eye and the camera both rate it poorly against white. A typical brand green such as #22c55e is 2.28:1 on white, below the shipping line. Darkening it to #166534 gives 7.13:1 - the same hue, now clearing the print target with margin.

Yes. The three corner squares are what a scanner locates before it decodes anything, so a code with strong pattern contrast and pale eyes fails at the first step. This checker reports both figures and takes the verdict from whichever is worse.

Because a QR code is read by a camera, not by an eye. A contrast ratio weights green at 71% of perceived brightness; a camera's grey channel weights it at 59% and adds no flare term. The two disagree most on saturated colour, and that disagreement is the finding.

A light grey works if the pair still clears the target, but it costs margin for nothing. Paper caps how bright a background can print, so the top of the range is already spent - every point of contrast a grey background gives up has to be taken back out of the dark modules.

Not by itself. What matters is the difference between the modules and whatever is behind them, measured locally. A pale, flat tint behind a very dark code is usually fine; a mid-tone brand colour behind a mid-tone code is the pair that fails, whatever the two look like separately.

It is the maximum: 21:1 as a ratio and the full 255 in a camera's grey channel. Nothing outperforms it. A near-black navy such as #0f172a reaches 17.9:1 and 232 out of 255, so it gives up almost nothing measurable while still reading as a brand colour.

Yes, and usually for the worse on saturated colour. Bright RGB reds, greens and oranges lose saturation and shift in hue when converted, so a pair that cleared 7:1 on screen can land below it on press. Convert first, then check the converted values here.

No. Error correction repairs damaged or covered modules once the symbol has been located and read as dark and light. If the camera cannot separate dark from light in the first place, there is no data for the recovery to work on. Contrast is a precondition, not a variable to trade.

Yes, indirectly. Rounded, dotted and other decorative modules put less ink inside each cell than a full square, so a decoder searching for the finder pattern ratio sees weaker evidence. A styled code has already spent some margin before printing takes its share - give it more contrast, not less.

Why KoloQR?

  • Create QR codes for websites, menus, Wi-Fi, PDFs, and business cards
  • Customize colors, logos, and unique shapes
  • Download high-quality PNG and SVG files
  • Built for both print and digital
Generate QR Code
A plain black QR code beside the same code restyled as a circle with brand colors