Error correction, quiet zones, contrast and print size: the four things that decide whether a QR code works on paper or quietly fails.
A scanner does not "read" a QR code the way a person reads text. It turns the camera image into black and white pixels, finds the three big squares in the corners, works out the grid, and then reads each cell. Everything that helps or hurts a QR code comes back to that process: the corners must be findable, the grid must be regular, and each cell must be unambiguously light or dark.
That is why a code can look perfect on a screen and fail completely once printed on a menu, and why "make it smaller to fit" is the single most common way to break one.
QR codes carry redundant data so they still decode when part of the image is damaged. There are four levels: L recovers about 7% of the symbol, M about 15%, Q about 25% and H about 30%.
The trade-off is size. Higher redundancy means more modules for the same content, and more modules means each one is physically smaller at a given print size — which can make scanning harder rather than easier. Raising the level is not automatically safer.
The blank margin around a QR code is not decoration. The specification requires at least four modules of clear space on every side, and scanners genuinely rely on it to find the symbol’s edges.
This is the most frequently ignored requirement in QR design. A code butted up against a border, a photograph or a block of text loses its quiet zone and may stop working entirely — and the failure looks random, because it depends on what the camera happens to catch.
This tool defaults to four modules and warns you if you reduce it. If a layout has no room for the margin, make the code smaller rather than trimming the margin.
Scanners binarise the image, so what matters is the difference in lightness between the code and its background — not whether the colours look pleasingly different to you. Two colours can be obviously distinct to the eye and nearly identical once converted to greyscale.
Black on white gives a contrast ratio of 21:1. Aim for at least 7:1; below about 4:1 codes start failing on paper and in poor light, and this tool will warn you. The live contrast figure next to the preview updates as you change colours.
Keep the code darker than its background. Many scanners only look for dark-on-light, and an inverted code — light modules on a dark field — is a coin toss across devices. If you need a code on a dark design, put it inside a light panel.
Avoid gradients across the code, and be careful with a transparent background: whatever ends up behind it has to satisfy the same contrast requirement.
A widely used rule of thumb is that the code’s width should be roughly a tenth of the distance it will be scanned from. A code read at arm’s length — say 30 cm — wants to be about 3 cm across. A poster scanned from three metres wants about 30 cm.
The other half of the problem is module size. Below roughly 0.4 mm per module, ordinary phone cameras start to struggle, and cheap thermal printers smear adjacent modules together. Shorter content means fewer modules, which means each module is bigger at the same overall size — which is why keeping the payload short helps more than any other single change.
Export SVG for anything that will be printed. It is vector, so it scales to any size with perfectly sharp edges, and it is what a designer or printer will want.
Export PNG for screens, documents and anywhere a bitmap is easier. Pick a generous pixel size: this tool rounds the module size down to a whole number of pixels so every module is identical, which avoids the uneven modules that appear when a code is scaled by fractions.
Never scale a PNG QR code up after exporting. Re-export it larger instead — interpolation blurs the module edges, which is precisely what the scanner needs to be crisp.
Print one at the real size, on the real material, and scan it with more than one phone — ideally an old Android as well as a recent iPhone, in the light the code will actually live in. A code that works on your desk under a lamp can fail on a table by a window.
If you are placing a logo in the centre, keep it small, keep it clear of the three corner squares, and test the result rather than assuming the error correction will cover it.