QR Code Reader from Image

Decode QR codes from saved screenshots and photos, several files at a time. Each image becomes a text file holding the raw value. Nothing is uploaded.

🌐 Español

Drop your files here (.jpg, .jpeg, .png, .webp, .gif, .bmp)

🔒 Private by design: your files are processed locally in your browser and never uploaded to any server.

Reading a code you were sent, not one in front of you

Phone cameras handle codes that exist in the physical world. They are much less help when the code arrives as a screenshot in a chat, an attachment in an email, or a frame you cropped out of a video, because pointing one screen at another is awkward and often fails.

That is the gap this fills. You hand it the image file itself, and it reads the pixels directly. No camera, no permission prompt, no second device balancing against a monitor.

It also changes the safety calculation. A phone that scans a printed code usually offers to open the destination immediately, which is precisely what makes stickers slapped over parking meter codes effective. Decoding a saved image gives you the raw string first, in plain text, with nothing offering to act on it.

Decoding a folder of screenshots at once

  1. Drop your images onto the box, or use Choose files. Several at a time is fine; the accepted list is JPG, JPEG, PNG, WebP, GIF and BMP.
  2. Anything with a different extension is filtered out before processing begins, so a stray PDF in the selection is simply not queued.
  3. Click QR Code Reader from Image. The progress bar advances one step per image.
  4. Each image produces its own download link, named after the source file with a QR suffix, so photo.jpg comes back as photo-qr-code.txt.
  5. Open a file to read the decoded value. When exactly one code was found, the file contains nothing but that value, with no header or label wrapped around it.
  6. Process another clears the queue for the next batch.

The one-value-per-file shape is intentional. A file whose entire content is a URL can be opened, selected and copied in a single motion, and pastes cleanly into a browser bar or a script.

Two decoders, and why both are there

Chromium based browsers ship a native barcode detector built into the browser itself. Where it exists, it is tried first: it is fast, it is maintained by the browser vendor, and it returns every code it finds in one image rather than just the first.

Firefox and Safari have no such API. So a pure JavaScript decoder is bundled with the page and used whenever the native one is missing, refuses the requested format, or runs and finds nothing at all. That last case is the interesting one, because it is not merely an availability check. The two decoders have genuinely different failure modes, and a low-contrast or slightly damaged screenshot that one gives up on can still be readable by the other. Trying the fallback even after a successful-but-empty native run costs a fraction of a second and occasionally rescues an image.

The practical consequence: multi-code images work on Chrome and Edge, and give you one value at a time elsewhere. When two or more codes are found, the file becomes a short numbered list instead of a bare value.

Nothing here treats an empty result as a crash

Most file tools on this site abort the whole run when something goes wrong with one file, and show a single generic apology. This one deliberately does not, because its most common non-result is not an error at all.

An image with no code in it is an everyday outcome. So is a batch where six screenshots contain codes and two do not. Both are written into the result file as clear sentences rather than being thrown, which keeps the rest of the batch intact and tells you exactly which images came up short. Even a file the browser cannot open as an image produces its own labelled result rather than taking the run down with it.

When the code is not the thing you actually need

Some payloads are only half useful as raw text. A one-time password code encodes a secret in a URI that an authenticator app expects to consume; if you are moving accounts between devices, TOTP Generator will take that secret and produce the six-digit codes directly.

Decoded values are often escaped or encoded. If yours is full of percent signs, URL Decode turns it back into readable text, and Base64 Decode handles the other common wrapping. For a boarding pass or ticket that arrived as a wallet file rather than an image, PKPASS to PDF converts it into something printable with the barcode drawn on the page.

To go the other way and make a code rather than read one, QR Code Generator is next door. Everything else is on the generators hub.

Frequently asked questions

Why is the answer a text file rather than something on screen?

Because the file based layout this tool uses has a download link and nothing else; there is no in-page text panel and no clickable link area to render a decoded value into. So each image becomes a small text file whose entire contents are the decoded value, ready to open and copy. It also means a batch of twenty screenshots gives you twenty separate files instead of one merged wall of text.

What does the file say when there is no code in the picture?

A single plain sentence saying no QR code was found in that image. That is treated as an ordinary outcome rather than a failure, because photographing something that turns out not to contain a code is a completely normal thing to do. The file is still produced, still named after your image, so you can see at a glance which of a batch came up empty.

Does one bad file stop the whole batch?

No. Every image is handled on its own, and a file the browser cannot decode as an image at all still produces a result file, one that says so and includes the underlying reason. This is unusual for a file based tool here; most abandon the run on the first failure. It matters when you drop a folder of screenshots and one of them is corrupt.

Can it find more than one code in a single image?

Sometimes, and it depends on your browser. Chromium based browsers expose a native barcode detector that returns every code it finds, so a photo of a page with three codes gives you a numbered list of three values. Firefox and Safari have no such API, so those browsers use the bundled fallback decoder, which returns at most one code per image.

What formats can I drop in?

JPG, JPEG, PNG, WebP, GIF and BMP. The check is on the file extension, so a screenshot renamed to something else will be rejected before any work starts. A PDF containing a code is not accepted here; export or screenshot the page as an image first.

Is a phone photo of a screen good enough?

Usually yes, but it is the hardest case. Moire patterns from the screen refresh, glare, and a slight angle all reduce contrast between the dark and light squares. Crop tight around the code and make sure the whole quiet border around it is included. A direct screenshot beats a photo of a screen every time.

Does the file ever leave my device?

No. Decoding happens against the image pixels inside your own browser, either through the browser's own native detector or through a decoder bundled with the page. There is no server step, which is the difference that matters when the code you are checking is a boarding pass, a payment request or a ticket.

I scanned a code from an email. Should I trust where it points?

Decoding is exactly how you find out without committing. The text file holds the raw destination, so you can read the domain before any browser opens it. That is the whole safety argument for decoding a saved image rather than pointing a phone camera at a printed code and letting it open whatever it finds.

Related tools