Read a QR code from an image
Got a screenshot or photo of a QR code and can't scan it? Drop the image here and see the content instantly — ready to copy.
- Nothing uploaded
- Free, no sign-up
- Strips EXIF
- Batch files
Sometimes the QR code is right on your screen — a bill, a coupon, a payment — and you don't have a second phone to scan it. Just drop the screenshot or photo: decoding happens on your device and the content shows up ready to copy, with no app to install and nothing uploaded to any server.
Works best with a sharp image and the code clearly visible. If it doesn't read at first, crop the image to just the QR code and try again.
How it works
Drop the picture of the code: one decoding pass, and the text is on screen and on your clipboard.
Drop the image in
A screenshot, a photo of a printed code, a JPG, PNG, WebP, BMP or GIF. On desktop, Ctrl+V pastes whatever you just captured — no need to save the file first.
Read the content
The raw text appears immediately and is copied to your clipboard. If it is a web link, an Open link button shows up next to it; anything else is displayed as text and never launched for you.
Switch to JSON for the details
The Text / JSON toggle takes the payload apart: host, path and query for a link, network name and encryption for Wi-Fi, number and message for an SMS.
See where a link goes before you tap it
This is the difference between here and your phone camera. The camera shows a preview banner and one careless tap opens it. Here the raw string sits still on screen for as long as you want to look at it.
Codes stuck over the real one on a parking meter, on a package insert, on a flyer taped to a door — this is a routine scam now, and the trick nearly always hides in the URL. The JSON view separates the host from everything else, which is where a lookalike domain shows itself, and lists each query parameter on its own line, which is where a redirector buries the destination it actually sends you to.
Be clear about the limit: this page tells you what the code says. It does not tell you whether the site behind it is safe. Recognizing the domain is still your job.
When nothing is found
Failures are almost always about resolution or contrast. Before decoding, the image is scaled down to 1600 px on its longest side. So a 4000 px photo where the code occupies one corner loses most of the detail the decoder needs — crop to the code, leave a white margin around it, and try again. That one fix solves the majority of failed reads.
- Shot at an angle, or wrapped around a bottle or wristband — the grid has to be roughly square-on
- Motion blur, or a dim photo where the modules blend together
- Photographed from a monitor: glare and moiré wreck it, so take a screenshot instead
- A logo or sticker covering more of the code than its error correction can rebuild
- Pale ink on white — too little contrast to locate the modules at all
What the JSON view recognizes
Nothing is interpreted for you beyond being split into parts, and the original text is always kept as-is under the Text tab.
- Web links — host, path, and every query parameter listed individually
- WIFI: strings — network name, encryption type, password, hidden flag
- mailto:, tel: and SMSTO: — address, number, and any prefilled message
- vCard and MECARD contact cards — flagged as a contact, kept raw so nothing is lost
- EMV-style payment payloads — identified, with the full payload preserved character for character
- JSON that was already stored inside the code — parsed and re-indented instead of left on one line
- Anything else — handed back as plain text, unchanged
The camera option, and why you may not see it
There is a live camera mode, but the checkbox for it only appears on a phone: it needs a real camera, a touch screen, a small viewport and a secure connection. On a laptop the option is hidden on purpose, because webcam frames of a printed code decode badly and the retries are more frustrating than useful.
So if the code is on paper and you are at a desktop, take a photo with your phone and drop the photo here. Everything decodes locally either way — the camera frames are read in the page and never leave the device, exactly like a dropped file.
One more asymmetry worth knowing: a dropped image is tested in both polarities, so white-on-dark codes decode fine. The live camera only looks for standard dark-on-light codes, to keep the frame rate up.
Frequently asked questions
Does it work with a screenshot?
Yes. The code just needs to be visible and reasonably sharp in the image.
Do I need to grant camera access?
Not to read from an image. Camera access is only requested if you choose to scan live.
Why is my code not recognised?
Common causes are a blurry photo, the code cropped at the edges, glare on the surface, or very low contrast.
Is the decoded content sent anywhere?
No. Decoding happens in your browser and the result stays on your screen.
Is it safe to open the link shown?
The content is displayed before any action — read the address carefully first. QR codes are a common vector for scams.
Can it read a QR code inside a PDF?
Not directly — only image files are accepted. Screenshot the page, or export it as PNG or JPG, then drop that in.
There are several codes in my image. Can it read them all?
No. One image gives you one result, and which code wins is not something you control. Crop them apart and read each one separately.
It said the content was copied but my clipboard is empty.
Automatic copying needs a secure connection and the browser's permission, and some browsers refuse it silently. Use the Copy content button, which runs on your click, or just select the text and copy it by hand.
Does it read barcodes too — EAN, UPC, Code 128?
No. This decoder handles QR codes only. Retail barcodes, Data Matrix, Aztec and PDF417 are different symbologies and will simply come back as no code found.