A QR code has room in it for a face
Most “custom” QR codes decorate the edges: a logo dropped in the middle, rounded corners, a colour wash. The grid underneath is left alone, because the grid is assumed to be the part you cannot touch.
It is not. A QR code is built with Reed–Solomon error correction, which means a deliberate fraction of it is allowed to be wrong. At the highest correction level roughly thirty percent of the modules can be damaged and a scanner will still recover the payload. That slack is normally spent on scuffs, glare and bad camera angles. Spend it on a picture instead and the code carries your face at full width, not a badge in the centre of it.
Every module is enlarged and its centre held at the true value the decoder samples. The rest of each cell — the margin the scanner never reads — is handed to an error-diffusion dither of your image. The result is a picture made of the code, rather than a picture sitting on top of one. The technique is Andrew Tomlinson’s; this is a browser-native tool built on it.
The four dithers, and when each one wins
- Floyd–Steinberg1976
- Pushes the full rounding error to four neighbours. The most faithful of the four, and the one to reach for when the picture carries fine detail.
- Atkinson1984
- Diffuses only three quarters of the error and lets the rest fall away. Blows out the highlights, which is exactly what flatters a face.
- Jarvis–Judice–Ninke1976
- Spreads error three rows deep instead of Floyd–Steinberg's one. The texture reads finer and more even, at the cost of a softer edge on high-contrast detail.
- Stucki1981
- A wider kernel than Floyd–Steinberg, weighted toward the nearest neighbours. Cleaner gradients across large flat areas, and sharper edges than Jarvis–Judice–Ninke.
Questions
- What is facecarding?
- Facecarding is dithering a photo of your face into a QR code so the code reads as your face at a glance and still scans as a link, vCard or contact card when a phone's camera hits it. The name comes from this site — facecard.ing — and the technique is the same one this generator runs entirely in your browser: no upload, no server-side rendering, just error diffusion over the code's redundant modules.
- Will a QR code with a picture in it still scan?
- Yes. A QR code carries Reed–Solomon error correction, so a share of its modules can be wrong and the code still resolves. Each module here is enlarged, its centre pinned to the true black or white the scanner samples, and only the space around that centre is given over to the picture. That guarantee comes from redundancy, not a live check — test yours with your own phone's camera before you commit to a print run.
- Is my photo uploaded anywhere?
- No. However the picture gets onto the canvas — dropped in from your device, or pulled in by handle for Instagram and LinkedIn — the dithering itself runs locally, and those pixels never cross the network afterward. What can reach our server, only if you ask it to: an Instagram or LinkedIn handle, so we can fetch that profile's public picture through a proxy; a destination URL, or a hosted contact card's own details — name, phone, email, whatever you filled in — if you turn tracking on; and a recovery email, if you leave one so the manage link isn't lost.
- What is dithering, and why use it for a QR code?
- Dithering approximates a full-tone image using only the colours you actually have — here, one ink and the paper. Error diffusion spreads each pixel's rounding error into its neighbours, so a face survives at one bit per pixel as texture rather than flat blocks. It suits QR codes because a QR code is already a grid of hard black and white, so a dithered picture sits in the same visual language instead of fighting it.
- Which dithering algorithm should I pick?
- Floyd–Steinberg is the safe default and keeps the most detail. Atkinson throws away part of the error, which lifts contrast and gives the sparse, high-key look of a classic Macintosh image — usually the best choice for faces. Jarvis–Judice–Ninke and Stucki spread the error across a wider kernel, which reads as finer, more even texture and holds up well when the code is printed small.
- What makes a good source picture?
- A close crop of a face on a plain background, with clear separation between the subject and what is behind it. One bit per pixel throws away colour entirely, so anything that only reads as a colour difference disappears. Strong side lighting works far better than a flat, evenly lit portrait.
- How small can I print it?
- Export at the largest size offered and let the printer scale down. As a rule the finished code wants about 2cm square for a phone at arm's length, plus a quiet margin around it. Test the actual print before ordering a run — paper and ink spread change how a scanner reads the edges.
- Does it cost anything?
- No. The generator is free and there is no account, no watermark, and no limit on how many codes you make.