QR Code Decoder

Free online QR code decoder. Upload a photo or use your camera to read the text or URL inside any QR code. Runs locally in your browser, no upload.

Drag and drop an image here, or click to browse
Supports JPG, PNG, GIF, BMP, WebP
Drop a JPG, PNG, GIF, BMP, or WebP file containing a QR code
Camera preview will appear here.
Allow camera access, then point your device at a QR code. Decoding stops automatically when a code is read.

About QR Code Decoder

QR Code Decoder reads the data hidden inside a QR (Quick Response) code, the square black-and-white pattern you see on posters, business cards, restaurant menus, packaging, payment screens, and event tickets. You can either upload a photo that contains a QR code or point your device's camera at one, and the tool extracts the text payload, which is most often a URL, but may also be Wi-Fi credentials, a vCard contact, an email, an SMS, a calendar event, geolocation coordinates, or arbitrary text. Decoding happens entirely in your browser using the open-source jsQR library, which implements the ISO/IEC 18004 standard: it locates the three large corner-finder squares, computes the perspective transform, samples the data modules, and runs Reed-Solomon error correction to recover the original bytes even if part of the code is dirty or partially covered. No image data is uploaded to any server, which makes the tool safe for QR codes that may contain personal information such as payment tokens, Wi-Fi passwords or private URLs. Both Version 1 (21 x 21) and the largest Version 40 (177 x 177) QR codes are supported, including all four error-correction levels L / M / Q / H.

What does this QR code decoder do?

It takes either an image you upload or a live camera feed, finds any QR code present in the frame, and prints the original text or URL that was encoded inside it. Under the hood it implements the ISO/IEC 18004 QR specification: it detects the three corner finder patterns, computes a perspective warp to a perfect grid, reads the data modules, applies the format mask, and runs Reed-Solomon error correction (which is what lets QR codes still work when up to about 30 percent of the surface is damaged or covered, depending on the error correction level chosen at encoding time). The decoded payload is most often a URL but can also be Wi-Fi credentials, vCard contacts, email, SMS, geolocation, calendar events, or plain text.

What file types and QR formats are supported?

Any raster image format your browser can decode is accepted: JPG, JPEG, PNG, GIF (first frame), BMP and WebP, plus HEIC on Safari. There is no fixed size limit since nothing is uploaded, but the tool resizes images larger than 1600 pixels on a side for faster decoding. Both Version 1 (21 x 21 modules) and the largest Version 40 (177 x 177 modules) are supported, all four error correction levels (L 7%, M 15%, Q 25%, H 30%), every QR mask pattern, and both the standard byte/UTF-8 mode and Kanji mode. Inverted QR codes (white on black) are also detected automatically with a second pass.

Does the decoder upload my image or use my camera footage?

No. The image you load is drawn onto a Canvas inside the page and decoded by the jsQR library running in your browser's JavaScript engine; the camera tab uses getUserMedia to access the live stream locally and never records or transmits the frames. You can verify this in your browser's Network tab: after the page loads, scanning produces zero outgoing requests with image data. This makes the tool safe for QR codes that hold sensitive material such as Wi-Fi passwords for your home, two-factor-authentication secrets, payment URLs, or boarding passes. The camera permission is required only by your browser to access the device camera; you can revoke it any time in site settings.

QR Code Decoder — Free online QR code decoder. Upload a photo or use your camera to read the text or URL inside any QR code. Runs locally
QR Code Decoder

Why did decoding fail or return the wrong text?

QR codes are tolerant but not magical. Common failure causes are: extreme angle (more than 45 degrees from perpendicular), motion blur, poor contrast (faded paper, glare on a phone screen), the code occupying less than about 100 pixels on each side in the photo, missing or damaged corner finder squares, and reflections that cut across the data grid. Try a cleaner photo where the code is centered, well lit, in focus, and roughly fills at least a third of the frame. For very small codes in a large photo, crop closer first. Cameras work best when the QR fills most of the viewfinder and the device is held steady for a second or two. If a code returns garbled text, it may be using a non-standard encoding such as Shift-JIS Kanji on a Japanese poster.

Which browsers and devices are supported?

The decoder runs in every modern browser that supports HTML5 Canvas and ES2017 JavaScript: Chrome, Edge, Firefox, Safari, Opera and Samsung Internet, on both desktop and mobile. The camera tab needs the getUserMedia API and requires the page to be served over HTTPS (the WuTools site is), which all modern browsers support. On iOS, the camera works in Safari from version 11 onward. The jsQR library is only about 50 KB compressed, so the tool loads almost instantly even on slow mobile connections. There is no minimum hardware requirement other than enough RAM to hold a single image; a five-year-old phone runs it without issues.

Can the decoder read multiple QR codes in one image at once?

The current implementation reads one QR code per image: it returns the first valid code it detects after the corner finder pass. If you have a sheet with several QR codes, crop and scan them one at a time, or use the camera mode and point at each code in turn. We will consider adding multi-code support in a future update; the underlying jsQR algorithm can be run on overlapping regions to detect multiple codes, but it adds complexity and runtime cost. Note that some advanced 2D barcodes such as Data Matrix, Aztec, MaxiCode and PDF417 use different scanning algorithms and are not handled by a QR-only decoder; for those you would need a more general library.