QR Code Reader
Got a QR code in a photo, a screenshot or a PDF you exported to an image? Drop it here — or scan it live with your camera — and this tool reads the data out of it: the link, the Wi-Fi credentials, the contact card, whatever was encoded. The decoding happens in your browser; nothing ever leaves your device.
🔒 Processed locally — nothing is uploadedA photo or screenshot containing a QR code (PNG, JPG, WebP) — or press Ctrl/⌘+V to paste one
Related tools
This tool decodes a QR code from a photo, a screenshot, or straight from your camera — entirely in the browser — and tells you what kind of data it holds.
How it decodes the image
The tool draws your image onto an off-screen canvas, reads the raw pixel data, and runs a QR detection algorithm (the open-source jsQR library) over it. That algorithm locates the three square finder patterns, works out the code's orientation and grid size, samples each module as light or dark, and runs the Reed–Solomon error correction to recover the original bytes even if part of the code is blurred or damaged. None of this needs a server — it's all math on the pixel array in memory.
What the different results mean
QR codes store plain text, but that text often follows a convention that tells a phone what to do with it. The reader recognises the common ones and labels the result:
- Link — a web address (
https://…). Shown with an "Open" button. - Wi-Fi — a network name, password and security type in the
WIFI:format. The parts are listed separately. - Contact — a vCard or MeCard. The name, phone and email are pulled out.
- Email / Phone / SMS — a
mailto:,tel:orsmsto:action. - Text — anything else, shown as-is.
Reading an unknown code safely
Decoding a code here is safe — it's just reading text out of an image, nothing is opened or executed. That makes this a useful way to check a suspicious QR code (on a parking meter, a piece of mail, a flyer) before pointing your phone at it: read the link here first, look at the actual domain, and decide whether you trust it. The reader never follows a link on its own; the "Open" button is an ordinary link you choose to click.
If it can't find the code
- Crop the image so the QR code fills most of the frame before uploading.
- Make sure the whole code is visible, including the quiet margin around it.
- Avoid heavy glare, motion blur, or steep angles — retake the photo straight-on if you can.
- Very low-resolution codes (under ~100px) may not carry enough detail to decode.
Frequently asked questions
Is my image uploaded to decode it?
No. The image is read into a canvas in your browser and the decoding runs there. Nothing is sent to a server, so it works offline once the page has loaded.
Can it read barcodes too?
No — this reads QR codes specifically. Linear barcodes (UPC, EAN, Code 128) use a different format and aren't supported here.
Does it work with a photo that has other things in it?
Usually, as long as the QR code is reasonably large and in focus. If it fails, crop closer to the code and try again.
Can I paste a screenshot directly?
Yes. Copy an image to your clipboard and press Ctrl+V (⌘+V on a Mac) with this page focused.
Can I scan with my camera instead of uploading a photo?
Yes — click "Scan with camera", allow camera access, and hold the QR code steady in frame. The same jsQR algorithm decodes the live video locally; the camera feed is never recorded or uploaded, and stops as soon as a code is found or you click "Stop camera".