Print QR codes reliably by keeping contrast above 3:1 (4.5:1 for safety), a quiet zone of at least 4 modules on every side, resolution at 300 DPI or higher, and error correction bumped up for reflective or curved materials.
That's the checklist version. What follows is the version with the actual numbers behind each of those rules — the exact contrast math, a full quiet-zone-to-millimeter conversion table, a DPI-to-pixel table by print size, and a material-by-material guide covering paper, plastic, metal, glass, fabric, and rigid outdoor signage, none of which the current top-ranking guides for this topic provide in full.
This guide answers five questions in order, each with its own worked numbers rather than a vague rule of thumb
- How much contrast is actually enough, and why do existing guides disagree on the number?
- How much white space needs to surround the code, converted into millimeters you can hand to a print vendor?
- What resolution should the file be exported at, for a given physical print size?
- How does the material you're printing on — paper, plastic, metal, glass, fabric, or rigid signage — change what settings you need?
- What's the fastest way to catch a scanning problem before it's baked into a 5,000-unit print run?
Contrast Ratio: The Number Nobody Agrees On (and Why
Search for QR code contrast guidance and you'll find real disagreement: one popular guide says 3:1, another says 4:1, a third just says "maintain high contrast" without a number at all. Here's why that's happening — ISO/IEC 18004, the QR code standard itself, does not specify a numeric contrast ratio. It requires that the code be reliably distinguishable from its background, but leaves "reliably distinguishable" undefined in quantitative terms. Every contrast number you see quoted for QR codes is someone's practical rule of thumb, not a spec requirement, and most guides don't say that plainly.
Rather than repeat an unsourced number, here's a defensible one: the W3C's WCAG 2.1 accessibility standard defines two relevant thresholds for visual contrast — 3:1 for large-scale graphical elements, and 4.5:1 for standard text and fine detail. A QR code's modules are small, fine-grained visual elements, closer in scanning difficulty to text than to a large logo, so treating 3:1 as the absolute minimum and 4.5:1 as the safe target gives you a contrast rule grounded in an actual published formula (relative luminance, the same math your screen's accessibility checker already uses) rather than an arbitrary number.
In practice, plain black modules on a plain white background produces a contrast ratio around 21:1 — the maximum possible under the same formula — which is exactly why black-on-white remains the industry default and the safest choice whenever brand guidelines allow it.
| Foreground / background | Approx. contrast ratio | Print-safe? |
|---|---|---|
| Black on white | ~21:1 | Yes — the reliable default |
| Dark navy (#0A1F44) on white | ~15:1 | Yes |
| Brand blue (#2563EB) on white | ~5.2:1 | Yes, above the 4.5:1 safe target |
| Mid-gray (#767676) on white | ~4.5:1 | Borderline — only safe with excellent print quality |
| Light gray (#B0B0B0) on white | ~2.1:1 | ❌ — below the 3:1 floor, avoid |
| Yellow on white | ~1.1:1 | ❌ — will not scan reliably |
| White modules on black background (inverted) | ~21:1 | Technically valid, but many scanners default to expecting dark-on-light; test before using at scale |
The practical rule for anyone working within brand colors: run your exact foreground and background hex values through any WCAG contrast checker before finalizing a design. If the number comes back under 3:1, no amount of print quality or camera resolution will reliably fix it — that's a design-stage failure, not a printing-stage one.
This trips up brand-conscious teams more than any other rule in this guide, because it's the one most likely to conflict with an existing style guide. A pastel-on-white palette that looks perfectly readable as body text can sit well under 3:1 once you actually measure it, since text readability for a human eye and machine-scannability for a camera sensor aren't judged the same way — a human brain fills in low-contrast letterforms using context and familiarity, while a scanner is doing a much more literal light/dark comparison, module by module, with no contextual guessing involved. If your brand palette genuinely can't clear 3:1, the reliable fallback is to keep the QR code itself in pure black-on-white (or another verified high-contrast pairing) and apply brand color everywhere else around it — the frame, the call-to-action text, the surrounding layout — rather than forcing brand color into the modules themselves.
Print Finish: Matte vs. Glossy, and Why It Changes Your Contrast Math
The contrast ratio you calculate on-screen assumes flat, non-reflective color swatches. Printed material rarely behaves that way, and finish is the variable most guides skip entirely. A glossy or laminated finish reflects light directly back at the camera lens at certain angles, which can wash out contrast in exactly the way a low contrast ratio does — even if the underlying ink colors measure well above 4.5:1 on a color chart. A matte or satin finish scatters light more evenly, which is why it's the safer default for anything that might be scanned under bright overhead lighting, direct sun, or a phone's own camera flash. This isn't a reason to avoid glossy finishes outright — packaging and premium print often require them for brand reasons — it's a reason to specifically test a glossy or laminated proof under bright, angled light before approving it, since that's the exact condition where a technically-correct contrast ratio can still fail in the real world.
Quiet Zone: How Much White Space to Leave Around the Code
ISO/IEC 18004 is specific here, even though most guides only quote half the rule: the quiet zone must be at least 4 modules wide on all four sides of the code, with no text, logos, borders, or design elements inside it. The reason is structural, not aesthetic — the scanner's detection algorithm relies on a clean, uninterrupted margin to distinguish the finder patterns from surrounding content. Crowd that margin with a caption or a decorative border touching the code's edge, and detection can fail even though every module inside the code itself is printed perfectly.
The part almost no guide converts into a usable number is this: because the quiet zone is measured in modules, not millimeters, its actual physical size depends on how many modules your specific code contains — which depends on how much data you encoded. A short dynamic redirect URL typically lands around Version 3–4 (29–33 modules per side); a long static URL with tracking parameters can push into Version 8–10 or higher, packing more, smaller modules into the same printed size — which shrinks the absolute quiet zone at a fixed print width, even though the rule (4 modules) never changes.
The table below assumes a typical Version 4 code (33 modules per side) — representative of most real-world marketing QR codes encoding a short redirect link — so you can convert the abstract "4 modules" rule into an actual number for your print layout
| Printed code size | Modules per side (assumed) | Quiet zone per side | Quiet zone in mm | Quiet zone in inches |
|---|---|---|---|---|
| 1 in (2.5 cm) | 33 | 4 modules | 3.1 mm | 0.12 in |
| 1.5 in (3.8 cm) | 33 | 4 modules | 4.6 mm | 0.18 in |
| 2 in (5 cm) | 33 | 4 modules | 6.2 mm | 0.24 in |
| 4 in (10 cm) | 33 | 4 modules | 12.3 mm | 0.48 in |
| 6 in (15 cm) | 33 | 4 modules | 18.5 mm | 0.73 in |
If your code encodes significantly more data than a short redirect URL — a full vCard, Wi-Fi credentials, or a long unshortened link — check your generator's reported version or module count and recompute using quiet zone = 4 × (print size ÷ modules per side). In practice, this is rarely something you need to calculate by hand: virtually every reputable QR generator bakes the correct quiet zone into the exported file automatically. The real-world failure mode isn't the generator getting it wrong — it's a designer placing the exported PNG or SVG into a layout and then cropping it tight against a text box or logo, manually eating into a margin that was already correct on export. This table exists so you know how much extra clear space to reserve in the layout around the file, not to second-guess the file itself.
QR Code Print Resolution: DPI to Pixel Dimensions
None of the three current top-ranking guides for this topic mention DPI or resolution at all in their main content — a real gap, since exporting a QR code at screen resolution (typically 72–96 DPI) and printing it at business-card size is one of the most common reasons a code that looked fine on a monitor fails once it's on paper.
The standard print benchmark is 300 DPI for anything viewed at close-to-moderate range (arm's length to a few feet), dropping to 150 DPI as acceptable for large-format pieces meant to be viewed from further away, where the increased viewing distance compensates for lower pixel density. Here's what that means in actual exported pixel dimensions
| Print size | Typical use | Viewing distance | Recommended DPI | Required pixel dimensions |
|---|---|---|---|---|
| 1 in (2.5 cm) | Business card | 6–12 in | 300 DPI | 300 × 300 px |
| 1.5 in (3.8 cm) | Product label, receipt | 8–16 in | 300 DPI | 450 × 450 px |
| 2 in (5 cm) | Flyer, table tent | 1–2 ft | 300 DPI | 600 × 600 px |
| 4 in (10 cm) | Retail poster, window decal | 2–5 ft | 300 DPI | 1,200 × 1,200 px |
| 6 in (15 cm) | Large poster | 5–8 ft | 150 DPI | 900 × 900 px |
| 12 in (30 cm) | Banner, near-range signage | 8–15 ft | 150 DPI | 1,800 × 1,800 px |
| 24 in (61 cm) | Billboard, far-range signage | 15 ft+ | 100 DPI | 2,400 × 2,400 px |
The simplest way to sidestep this math entirely is to export the code as a vector file (SVG or EPS) rather than a raster PNG whenever your print vendor supports it — vector files scale to any physical size with zero quality loss, because they're built from mathematical paths rather than a fixed pixel grid. If you only have a PNG, always export at the largest size you might ever need and scale down, never scale a small PNG up — enlarging a 300×300px file to fill a 12-inch banner will visibly blur or pixelate the modules regardless of what DPI the file claims to be.
Material-by-Material Printing Guide
This is the single largest gap across every current top-ranking guide on this topic: none of them provide a complete materials table, and the one competitor that comes closest lists "glass" as a category without giving it any actual numbers. Different print substrates fail in different, predictable ways — reflective materials cause glare that washes out contrast, curved surfaces distort the module grid, and rough or absorbent materials blur module edges — so the fix is different for each one. There's no ISO figure for any of this (the standard doesn't address substrate), so treat the recommendations below as print-industry practical guidance, not a regulatory requirement.
| Material | Recommended error correction | Size increase vs. standard paper | Notes |
|---|---|---|---|
| Paper / cardstock | M (default) | None (baseline) | The easiest material — matte finish scans more reliably than glossy, which can create glare under angled light |
| Cardboard / corrugated packaging | Q | +15–20% | Rougher surface texture and ink absorption slightly soften module edges; the size bump compensates |
| Soft plastic film (shrink wrap, vinyl stickers) | Q | +10–15% | Flexible surfaces can bow or wrinkle after application; extra size and error correction absorb minor distortion |
| Metal (etched, engraved, or printed) | H | +30–40% | Reflective surfaces cause glare that behaves like partial damage to a scanner; brushed or matte-finish metal scans meaningfully better than polished |
| Glass | H | +30–40% | The most failure-prone common material — reflection and transparency both reduce effective contrast; frosted or etched glass outperforms clear printed glass significantly, and testing under the actual lighting the glass will sit in (not a lightbox) is essential |
| Rigid outdoor signage (Coroplast, aluminum composite) | Q to H | +20–30%, plus scale for distance | Distinct from soft outdoor vinyl decals — rigid board signage is typically viewed from further away, so size should be driven primarily by the 10:1 distance rule below; laminate to protect against UV fading, which slowly reduces contrast over months outdoors |
| Fabric / textile | H | +25–35% | Weave texture is the enemy here — a tight, smooth weave (like printed satin ribbon or smooth cotton) scans far better than a coarse or textured weave, where individual threads can visually break up module edges |
The pattern across this table is consistent: anything reflective, curved, textured, or exposed to UV should move toward higher error correction and larger print size, because both give the scanner more margin to recover from the specific way that material distorts the code. For the full breakdown of what each error correction level actually tolerates and how to choose between them for a given use case, see this site's dedicated guide to QR code error correction levels.
Placement and Sizing: The 10:1 Distance Rule
Materials and resolution only matter if the code is sized correctly for how far away it'll actually be scanned from. The rule of thumb used across the QR printing industry — not an ISO mandate, but a widely applied practical formula — is that a QR code's printed width should be roughly 1/10th of its intended scan distance. A code meant to be scanned from arm's length (about 12 in / 30 cm) should print at a minimum of roughly 1.2 in (3 cm) square; a code on a storefront window meant to be read from 10 feet away needs to scale up to roughly 12 inches (30 cm). This site's dedicated guide to minimum QR code size for printing works through the exact size math for every common print format, from business cards to billboards, if you need format-specific numbers beyond the general rule.
Beyond size, three placement habits consistently separate print QR codes that get scanned from ones that get ignored
- Add a call-to-action next to the code. "Scan to see this week's menu" or "Scan for tracking info" measurably increases scan rates versus a bare code with no explanation — people don't scan codes whose purpose isn't obvious at a glance.
- Place it where the viewer is already looking, not where there's empty space. A code tucked into an unused corner of a flyer gets scanned far less than one placed near the headline, price, or product image that's already drawing attention.
- Never let a logo or decorative element enter the quiet zone or a finder pattern. A logo dropped into the center of the code is generally safe at H-level error correction if it covers under roughly 20–25% of the code's area; a logo or border touching any of the three corner finder patterns is not safe at any error correction level, because it interferes with the scanner's ability to detect the code at all, not just read its data.
The Pre-Print Testing SOP (No Downloads Required
One competitor guide for this exact topic hides its full testing checklist behind an email signup form — which means it's invisible to both human readers who don't want to hand over an email address and to AI systems trying to extract the actual steps. Here's the complete version, no gate
Devices — test on at least three, not one
- A current-generation iPhone (native Camera app, not a third-party scanner
- A current-generation Android phone (native camera or Google Lens
- A phone that's 2–3 years old — older camera sensors and older OS scanning software are measurably less forgiving of low contrast or small print size, and this is the device most likely to reveal a problem before it reaches real customers
Lighting conditions — test under all four, not just whatever's in the room right now
- Direct sunlight or bright outdoor daylight (tests for glare and reflection, especially on glossy or laminated material
- Standard indoor fluorescent or LED office lighting (the most common real-world condition for most print use cases
- Dim or low light, such as a restaurant table or evening event (tests whether contrast holds up when the camera has to compensate with a longer exposure
- Phone flashlight or camera flash directed at the code from a slight angle (simulates someone trying to scan in a dark environment, and specifically tests for glare bounce-back on reflective materials
The full sequence:
- Scan the exact digital file — not a screen preview thumbnail — on all three devices above.
- Scan from the actual intended distance, not from six inches away at a desk.
- If a logo is present, confirm it doesn't touch any finder pattern and covers under roughly 20–25% of the code's area.
- Confirm error correction is set to Q or H if any logo is embedded, or if the material is reflective, curved, or textured per the materials table above.
- Print a single physical test copy on the actual paper, plastic, metal, or fabric stock — not just a screen check. Glare, lamination, and ink saturation all behave differently once physically printed than they do on a backlit monitor.
- Re-scan that physical test copy under all four lighting conditions above.
- Only after every combination scans successfully on every device, approve the full print run.
This entire sequence takes under fifteen minutes and catches the large majority of real-world print failures before they turn into a five-figure reprint bill.
Common Print Scan Failures and How to Fix Them
| Symptom | Likely cause | Fix |
|---|---|---|
| Nothing happens when scanning | Code printed below the size required for the scan distance (see 10:1 rule) | Reprint larger, or add a "step closer to scan" instruction |
| Scans on-screen preview but fails once printed | Export resolution too low for print size (see DPI table) | Re-export at 300 DPI or as a vector file (SVG/EPS) |
| Scans indoors but fails outdoors or under bright light | Glare from glossy lamination or a reflective substrate | Request matte or satin lamination; retest under direct sunlight before approving |
| Scans on one phone but not another | Older camera hardware or lower contrast tolerance on that device | Increase contrast toward the 4.5:1 safe target; retest on a 2–3-year-old phone specifically |
| Scans fine up close but fails from normal viewing distance | Code sized for a scan distance shorter than where it's actually placed | Recalculate using the 10:1 rule against the real placement distance, not the design mockup distance |
| Fails consistently on metal, glass, or fabric | Error correction level too low for the material's reflectivity or texture | Move to H-level correction and apply the size increase from the materials table |
| Worked at launch, fails months later on outdoor signage | UV fading has gradually reduced print contrast | Laminate against UV exposure at print time, or budget for periodic reprints on long-run outdoor placements |
A Worked Example: Sizing a Product Label QR Code
To make the tables above concrete, walk through an actual print job. A skincare brand is printing a QR code on a 5 cm × 5 cm product label, printed on matte plastic film, meant to be scanned by a customer holding the bottle at roughly 20-30 cm — well within arm's length.
Working through each variable in order
- Contrast — the brand's packaging uses a dark forest green (#1B4332) on a cream background (#F8F5EF). Checked against a WCAG contrast calculator, that pairing measures approximately 7.8:1 — comfortably above the 4.5:1 safe target, so no design change is needed.
- Quiet zone — the code encodes a short dynamic redirect URL (about 22 characters), which lands at Version 3 (29 modules). At 5 cm printed width, that's a required quiet zone of roughly 4 × (5cm ÷ 29) ≈ 0.69 cm (6.9 mm) of clear space on every side — meaning the label's total artboard needs to be at least 6.4 cm × 6.4 cm once the mandatory margin is included, not just 5 cm × 5 cm.
- Resolution — at 5 cm (about 2 in) and arm's-length viewing distance, this calls for 300 DPI, which works out to roughly 600 × 600 px minimum for the exported file.
- Material — soft plastic film calls for Q-level error correction and a 10-15% size increase over the paper baseline per the materials table above, both to absorb minor wrinkling after the label is applied to a curved bottle.
- Testing — before the label goes to a 10,000-unit print run, the team scans a physical proof, applied to an actual bottle (not a flat sheet), on three devices under all four lighting conditions from the SOP above — specifically checking indoor retail lighting and direct sunlight near a store window, since that's where the product will actually sit.
That sequence — check contrast, calculate the quiet zone for the actual version and size, confirm resolution, adjust for material, then test on a physical proof under real conditions — is the same five-step process for any print QR code, regardless of what it's printed on or how large the run is. The only numbers that change are the inputs.
Static vs. Dynamic QR Codes for Print Campaigns
Everything above gets a code to scan reliably once. Whether it keeps sending people somewhere useful for the life of the printed material is a separate question, and it's directly relevant to how you test before a large run.
A static QR code has its destination baked permanently into the printed pattern — if the campaign it points to ends, or the URL structure changes, the printed code itself can't be updated; the only fix is reprinting. A dynamic QR code encodes a short redirect link instead, which can be repointed to a new destination at any time without changing a single pixel of the already-printed code — useful specifically for large print runs (packaging, signage, business cards) that will outlive a single campaign, and for the pre-print testing phase itself, since you can point a dynamic code at a staging URL during testing and switch it to the live destination the moment the print run goes out, without ever touching the file.
Most dynamic QR tools charge a recurring subscription to keep that redirect active. OwnQR is a $15 one-time purchase that includes dynamic codes with no ongoing fee — worth it specifically for print runs where you might need to repoint the destination later without a reprint, but genuinely unnecessary if your printed material links somewhere permanent and you have no reason to expect it will ever change; a free static code is the right call in that case, and no tool should talk you into paying for a feature you won't use. For the fuller technical comparison of when each type makes sense, see this site's guide to [dynamic vs. static QR codes](/blog/dynamic-vs-static-qr-codes).
The Bottom Line
Print failures are almost always one of five things: contrast below the 3:1 floor, a quiet zone crowded by design elements, resolution exported for screen instead of print, error correction too low for a reflective or textured material, or a code sized for the wrong scan distance. Every one of those is checkable before a print run goes out, not after — run the exact numbers from the tables above against your specific print size and material, then work through the full testing SOP on real devices under real lighting before approving anything beyond a single test copy. The fifteen minutes that testing takes is consistently cheaper than the cost of a print run that doesn't scan.
Frequently Asked Questions
What is the minimum contrast ratio for a QR code to scan reliably in print?
There's no official ISO number, since the standard only requires the code be "reliably distinguishable" without defining a ratio. Using the WCAG accessibility formula as a defensible benchmark, treat 3:1 as the absolute floor and 4.5:1 as the safe target — plain black-on-white measures around 21:1.
How wide should the quiet zone be around a printed QR code?
At least 4 modules on all four sides, per ISO/IEC 18004. For a typical marketing QR code (around 33 modules per side), that works out to roughly 12% of the code's printed width per side — for example, about 6mm of clear margin around a 5cm code.
What DPI should I use when printing a QR code?
300 DPI for anything scanned from close to moderate range — business cards, flyers, packaging, and most retail signage. 150 DPI is acceptable for large posters and signage viewed from several feet away, where distance compensates for lower pixel density.
Can you print a scannable QR code on metal or glass?
Yes, but both are the most failure-prone common materials due to glare and reflection. Use H-level error correction and increase the printed size by roughly 30-40% versus the same code on paper, and always test under the actual lighting the piece will sit in.
What's the minimum QR code size for a flyer or business card?
Follow the 10:1 rule: printed width should be about 1/10th of the intended scan distance. For an arm's-length scan (about 12 in / 30 cm), that's a minimum of roughly 1.2 in (3 cm) square — cramming a code below about 0.8 in (2 cm) on a business card is a common failure point.
How do I test a QR code before running a full print job?
Scan the exact print file — not a screen preview — on a current-generation iPhone, a current-generation Android phone, and a phone that's 2-3 years old, each under direct sunlight, indoor lighting, and dim/low light, before approving a full run.