QR Code Reader
Decode QR codes from uploaded images. Supports URLs, emails, WiFi, and more.
Drop a QR code image here or click to browse
PNG, JPEG, WebP, BMP, GIF, TIFF
Uploaded Image
Scanning QR code...
No QR code detected in the image. Please try another image.
The QR reader decodes a QR code from an image file or a clipboard screenshot and tells you what the code contains. It runs entirely in the browser and classifies the result as a URL, email address, phone number, WiFi credential, SMS target, or plain text.
How Decoding Works
QR codes scatter data across a grid of black and white modules, with three large finder squares so a scanner can orient the symbol. Error correction built on Reed-Solomon coding lets a code survive damage or an overlaid logo. This tool does not ship its own decoder: it calls the browser’s native BarcodeDetector, configured for the qr_code format, on an image you supply. That keeps the page light, but it also means decoding depends on browser support rather than on the tool itself. Because the detector needs pixels, the image is first drawn onto a canvas at its original dimensions, which is why uploading a tightly cropped file improves both speed and accuracy.
Supported Inputs and Limits
| Item | Accepted |
|---|---|
| Input methods | drag-and-drop, file picker, clipboard paste |
| Formats | PNG, JPEG, WebP, BMP, GIF, TIFF |
| Maximum size | 10 MB |
| Barcode types | QR only (qr_code) |
| Codes per image | first detected code only |
Anything outside the format list — SVG, HEIC, a PDF page — is rejected before decoding begins. If the browser lacks BarcodeDetector, the tool reports that immediately instead of failing quietly.
What Each Content Type Becomes
The decoder returns raw text; the tool then classifies it with pattern matching.
- URL — text starting with
http://orhttps://, or a bare domain likeexample.com/menu. A bare domain is prefixed withhttps://for the Open action while the display keeps the original text. - Email — a
mailto:value or anything shaped likename@domain.tld. A Send Email button appears. - Phone — a
tel:value, or a string of digits and separators at least 7 characters long. Punctuation is stripped when building thetel:link. - WiFi — text starting with
WIFI:. The SSID and security type are pulled out for display. - SMS — text starting with
sms:orsmsto:. - Text — everything else is shown verbatim.
Worked Example: A WiFi Code
A cafe prints a code containing:
WIFI:S:CafeGuest;T:WPA;P:latte2024;;
The result card reads WiFi: CafeGuest (WPA). The SSID is CafeGuest, the auth type is WPA, and the password latte2024 is deliberately not shown. There is no action button, because the tool does not open the operating system’s WiFi joiner.
A second example: an invoice screenshot pasted from the clipboard with the code https://pay.example.com/inv/9381. The card shows the full URL under type URL, plus an Open button. Nothing is fetched until you click it.
A third case: a code reading +1 (555) 010-9999 matches the phone pattern because the digits and separators total more than seven characters, so the card shows the number under type PHONE. The tool does not dial it or offer a button — copying the value into your phone app is a manual step.
Scanning Tips and Link Safety
QR codes are a common phishing channel because the destination is invisible until scanned. This reader shows the decoded URL as text before anything happens, and the Open button is never triggered automatically. A few habits make the check reliable:
- Read the domain right-to-left, not the whole string.
pay.example.com.evil.netbelongs toevil.net, notexample.com. - Distrust shorteners you did not create; services like
bit.lyhide the real target until the redirect fires. - Compare the scheme. A payroll or banking page reached over plain
http://is a red flag. - When in doubt, copy the URL and open it in an isolated browser profile rather than your logged-in one.
Tips for a Clean Scan
- Crop to the code plus a small quiet zone. Detectors rely on the white border around the finder squares to locate the symbol; cutting it flush can break recognition.
- Do not resize down before uploading. Screenshot tools sometimes halve the resolution, which can erase the fine module grid.
- If a photo has glare or a shadow across the code, try a different frame. Error correction handles damage but not a washed-out region.
- Convert HEIC photos to PNG or JPEG first, since HEIC is outside the supported format list.
Common Reasons a Code Fails to Decode
- Low resolution or blur. A code photographed at an angle, or scaled down in a screenshot, may lose the module edges the detector needs. Crop tightly and keep the original pixels.
- Low contrast. Gray-on-white, or a scanned beige form, can fall below the threshold. A mild contrast boost before uploading often fixes it.
- Damage or coverage. Error correction tolerates roughly up to 30 percent loss, but a logo or crease beyond that breaks the code.
- A quiet zone that is too small. Without a margin of white around the code, some detectors cannot locate the outer boundary even when the modules are crisp.
- It is not a QR code. A 1D barcode in the same photo is ignored.
Related Tools
Frequently Asked Questions
Why does the tool say BarcodeDetector is unavailable?
The reader uses the browser's built-in BarcodeDetector API. Chrome, Edge, and other Chromium browsers expose it; Firefox and Safari generally do not. When the API is missing there is no fallback decoder, so no image can be read — switch to a Chromium-based browser.
Can it read normal 1D barcodes like EAN-13 or Code 128?
No. The detector is initialized with only the qr_code format. A product barcode in the image will not decode here; use a dedicated barcode reader for EAN, UPC, or Code 128.
What happens to the password inside a WiFi QR code?
Only the network name (SSID) and the security type are extracted and shown. The password in the P: field is ignored, and the result card offers no join-network action. That makes it useful for reading a code without putting the credential on screen.
Does clicking Open follow the URL automatically?
No. Decoding never navigates anywhere. A URL result shows an Open button that you must click, and the link is marked rel="noopener", so you can inspect the destination first — a practical check against QR phishing.
What image formats and size limit are accepted?
PNG, JPEG, WebP, BMP, GIF, and TIFF up to 10 MB. The file picker accepts any image/*, but the tool validates the MIME type and rejects anything outside that list, including SVG and HEIC.
If an image holds several QR codes, which one is returned?
The first code the detector reports. There is no picker to choose another and no list of all codes found in the image.
Reviewed by the HandyTools Hub team · Last updated