paintqr

How PaintQR makes a picture into a QR code

The code's own squares draw the picture. No overlay, no trick of the eye: a standard QR code, arranged.

Updated 6 November 2026

Free bits

A QR code encodes a message and then fills the rest of its capacity with padding. The padding, the encoding of the message, the mask that scrambles the pattern, and, for a web address, a short tail of digits that the browser ignores, all leave bits that can take either value without changing what the phone reads. For a short link in a version 10 code, well over half the squares are free in this sense.

Solving for the picture

PaintQR renders your picture at the code's resolution and asks for each square to be dark or light according to it. The relation between the free bits and the final squares is linear over the two-element field, so the request becomes a system of equations that a solver works through in a fraction of a second. Where the picture asks for more than the free bits allow, the squares that matter most for recognition win: edges and the centre of the picture before its background. The result is a normal QR code whose data and error-correction squares happen to form your logo.

Styles

Classic keeps the code black and white. Accent draws the picture in one colour on a black-and-white code. Colour uses the picture's own colours for its squares, with the dark ones kept dark enough to read. Cut-out removes the background of a photo first. Halftone turns a photo into dots. In every style the phone reads only dark against light; the colours are for people.

The scan check

Every design is decoded before it can be downloaded: by two independent readers, in colour and in black and white, and on a blurred copy that stands in for a small or soft print. A design that fails is refused with the reason and a one-click fix (a lower detail, the balanced scan setting, a simpler picture). A design that passes shows the smallest size to print it at, from our phone tests: 0.6 mm per square for picture codes, 0.4 for plain ones.

Editable links

A code can carry your address directly, in which case it works forever and needs nothing from us. Or it can carry a short paintqr.com address that forwards to your link; then you can change the destination after printing, pause the code, and see how often it was scanned, by day, country and device, without any address of the person scanning being stored. Editable links are part of the Pro subscription.

Try it