Code reader · No upload
Read a QR code from a picture on your device
Read a QR code from a photo or screenshot: the contents are shown in full and nothing is opened for you.
Addresses are printed as plain text and are not made clickable. Check the scheme and the whole address before you use it. A Link label means the text looks like an address: the page does not validate the URL or verify the host, and it cannot tell you whether the destination is safe.
One QR code per picture, from 21×21 to 177×177 modules; no barcodes, Data Matrix, Aztec or PDF417. A grid that cannot be read or repaired is refused. Kanji, Structured Append, FNC1 and character sets it cannot decode are refused by name. Pictures over 40 million pixels are refused, and an animated GIF or WEBP is read from its first frame. Takes .png, .jpg, .jpeg, .webp, .gif and .bmp.
How this reader works
The browser reads the picture into memory and draws it to a canvas. The decoder turns the pixels grey, then sorts them into black and white block by block, judging each block against the average of its neighbours. That copes with uneven lighting, such as a shadow across part of the code, which one threshold for the whole image would get wrong.
Three corners of a QR code carry a square whose slices run 1:1:3:1:1 through the middle. The reader scans rows across the image for that pattern and confirms each hit with a second scan across it. It then looks for three squares of similar size that sit at a right angle with two equal sides. Those corners position the grid, and each module is read from it.
Each candidate grid gives a stream of codewords, which Reed-Solomon error correction checks and repairs. A grid it cannot repair is rejected, which helps throw out badly placed grids, and the readout shows how many codewords were repaired. The reader handles standard model 2 codes at all four correction levels and reads one code per image. It has no perspective correction, so a photo taken at a sharp angle can fail. Damage beyond what error correction can repair is refused. So is a code whose bytes are not valid in the character set it declares, and the row names the reason.