Open Tools Tools Features Blog About Contact Proof of Privacy

QR Code Reader — Scan a QR Code From an Image

Drop in a screenshot or a photo and read what the QR code actually says — including where a link goes, before you decide whether to open it. The image is decoded in this tab and is never uploaded.

Read a QR code from an image

Drag an image here

or click to browse — PNG, JPG, WebP, GIF or BMP

The image you selected

Decoded contents

Or scan with your camera

This is a separate path from the upload box above — it needs camera permission, and it only works on a secure connection. Frames are examined in the page and are not recorded or sent anywhere.

Why read a code from an image instead of pointing a camera at it

Phone camera apps read QR codes well, and when the code is printed on a poster in front of you, that is the right tool. The cases this page exists for are the ones where there is nothing to point a camera at.

A code arrives as a screenshot — someone sends you a payment request or a meeting link as a picture rather than as text. A code is inside a PDF, an invoice or a ticket you have open on a laptop. A code is on the screen you are already using, and photographing your own monitor with your phone produces a moiré mess that often will not scan. A code is on an archived flyer or a scanned document, where the original is long gone and the image is all that is left.

There is also the case where you specifically do not want to scan it with a phone. Reading an unknown code with your phone's camera app usually means the destination opens, or is one tap from opening, in a browser signed in to your accounts. Reading the same code as a file on a desktop shows you the URL as text with nothing loaded, which is a materially safer way to find out what a code you do not trust is pointing at.

How to scan a QR code from an image

  1. Get the code into an image file. A screenshot is fine. So is a photo, an export from a PDF, or a saved image from an email. If the code is one small part of a large page, crop to it first with the crop tool — but leave a clear white margin around the code.
  2. Drop the file on the box above, or click it and browse. Nothing is uploaded; the file is read locally.
  3. Read the decoded contents. They appear as selectable text. If the code is a link, the full destination is shown and opening it takes a deliberate click.
  4. Copy it if you need it elsewhere. The copy button puts the raw contents on your clipboard.

How it works in your browser

Your image is read with the browser's own file API, drawn onto a canvas element, and handed to a QR decoder — jsQR — as raw pixel data. The decoder locates the three large square finder patterns in the corners, works out the grid alignment from them, reads the modules, and applies Reed–Solomon error correction to recover the payload. All of that is JavaScript executing in this tab.

The consequence worth caring about is what does not happen. There is no upload endpoint, so there is no copy of your screenshot on someone's server, no retention window to read about in a privacy policy, and no log tying that image to your IP address. The decoder itself is fetched once from a public CDN and then cached by your browser, which is why the page keeps working with the network disconnected.

If you would rather verify that than believe it, open your browser's network panel, read a code here, and watch what requests are made. The proof of privacy page walks through exactly that.

Malicious QR codes, and why this page shows you the link first

A QR code is not readable by a human. That is the entire problem. Every other link you are asked to click, you can look at first; a QR code hides its destination until you have already committed to going there. Phishing that exploits this has a name — quishing — and it is common precisely because it is cheap: a sticker over the legitimate code on a parking meter, a charging point or a restaurant table costs nothing and is very hard to spot.

What the destination usually is: a convincing copy of a payment page, a login page for a service you actually use, or an app install prompt. What makes it work is that scanning and opening are normally the same gesture.

This page separates them. The decoded URL is displayed in full, as text, and nothing is loaded until you click. Things worth checking in that moment: is the domain the one you expected, or a lookalike with an extra word in it; is it a URL shortener hiding the real destination; does a payment link name the right merchant. If any of that is off, the correct action is to close the page and reach the service by typing its address yourself.

When a code will not read

  • The code is too small in the frame. A decoder needs several pixels per module. A code that is 60 pixels wide in a screenshot of a full desktop rarely survives. Retake the screenshot zoomed in, rather than enlarging the small one afterwards.
  • The quiet zone has been cropped. QR codes require a blank margin roughly four modules wide on all sides. Cropping tight to the black edge is one of the most common reasons a perfectly good code stops working.
  • Contrast is too low. A pale grey code on a coloured background, or a photo taken in dim light, may not separate cleanly into dark and light modules. This page already retries with the image inverted, which handles light-on-dark codes.
  • The photo is blurry or taken at a steep angle. Motion blur destroys module edges. Extreme perspective distortion defeats the grid estimate. Retaking the picture squarely, in better light, fixes more cases than any software setting.
  • The code is physically damaged or overprinted. QR codes carry error correction and tolerate a surprising amount of damage — up to about 30% at the highest level — but past that the data is gone and no reader will recover it.
  • There is more than one code in the image. Only one is returned. Crop to the one you want.

Next steps

  • Make a QR code — the other half of this: encode a link, some text, a Wi-Fi network or a contact card.
  • Resize an image — enlarge a small code before reading it, or produce a code image at an exact size for print.
  • Remove image metadata — a photo of a code carries the GPS coordinates of where you took it. Strip that before sharing the picture.

Next steps

Related tools

What to do with the result

Guides

Browse all text and data tools, or see every QuickMerge tool.

Frequently asked questions

Can I scan a QR code from a screenshot?

Yes — that is the main thing this page is for. Take the screenshot however you normally would, then drag the image file onto the box above. The code is read from the pixels of the image, so it makes no difference whether the original was on a website, in a PDF, in an email or on another phone.

Is my image uploaded anywhere?

No. The file is read into browser memory, drawn to a canvas and decoded by JavaScript running in this tab. No part of the image is sent anywhere, which is why this works with the network disconnected once the page has loaded. You can confirm it yourself with the procedure on our proof of privacy page.

Why does it say no QR code was found?

Usually one of four things: the code is too small in the frame, the picture is blurry, contrast is poor, or the crop has cut into the quiet zone — the blank margin the code needs around it. Crop closer to the code while keeping a clear margin, or retake the screenshot at a higher resolution. A code that is physically damaged or heavily overprinted may not be recoverable at all.

Does it open the link automatically?

No, deliberately. The decoded destination is shown to you as text first and opening it takes a separate click. Scanning is the step where a malicious code does its work, and a reader that navigates for you removes the only moment you had to look at where you were being sent.

Can it read Wi-Fi and contact codes, not just links?

Yes. Wi-Fi codes are shown as the network name, password and security type separately rather than as the raw WIFI: string, and contact codes are broken out into name, phone, email and website. Anything else is shown as plain text.

Can I use my camera instead of a file?

Yes, there is a camera mode below the upload box. It needs a browser permission, and it will not appear to work if you decline that permission or if the page is not on HTTPS. The camera image is processed frame by frame in the page and is not recorded or transmitted.

Does it work offline?

After the first visit, yes. The decoder is cached by your browser, so the page will read codes with no network connection at all. The first load needs to fetch the decoder once.

Which image formats can I use?

Anything your browser can display: PNG, JPG, WebP, GIF and BMP all work. If you have an iPhone HEIC photo, convert it first with the HEIC converter and then read the result here.