Tools / Developer / QR Code Reader
Client-side

QR Code Reader

Decode QR codes from images and screenshots locally in your browser, see the exact payload before opening it, and never send the image to a server.

What it does

  • Reads QR codes from PNG, JPG, WebP, BMP and TIFF images
  • Detects several QR codes in the same image
  • Batch mode with CSV or JSON export
  • Shows the payload as text, never opens links automatically
  • Decoded locally with Rust and WebAssembly

Drop files here or click to browse

PNG, JPG, WebP, BMP, TIFF

This QR code reader extracts the content of a QR code from an image file: a screenshot, a photo, a scanned page or an image saved from an email. Drop the file and the tool shows the exact text stored in the code, whether it is a URL, a Wi-Fi string, a contact card or plain text. Decoding happens in your browser through a Rust decoder compiled to WebAssembly, so the image is never uploaded.

When you need to read a QR code from an image

  • The code is on your own screen: a QR code in a PDF, a web page or a video call cannot be scanned with the phone that is displaying it. Take a screenshot and drop it here.
  • Checking a link before visiting it: QR codes on parking meters, flyers and emails are a known phishing vector. The reader shows the full URL as plain text and never opens it, so you can inspect the domain first.
  • Recovering a setup code: two factor authentication enrollment codes, Wi-Fi codes and device pairing codes can be read into text for your records.
  • Auditing printed material: verify that every QR code in a batch of flyer or label proofs points to the right destination before sending to print.

How to decode a QR code from an image

  1. Drop one or more images on the drop zone, or click to select them. PNG, JPG, WebP, BMP and TIFF are supported.
  2. Click Decode QR.
  3. With a single image, each code found is listed as Code 1, Code 2 and so on, with a copy button next to its content.
  4. With several images, a results table shows the file name, the status and the decoded payload or error for each one. Export it with Export CSV or Export JSON.

Click the cross next to the file name to clear the selection and start again.

Several codes per image and batch export

The decoder scans the whole image and returns every QR code it can read, not just the first one. A product sheet with two codes, or a page of labels, produces one entry per code. In batch mode each code becomes a row in the table, and an image with no readable code is reported as an error with the message No QR code found, so nothing is silently skipped. The CSV and JSON exports contain the columns file, status, payload and error, ready to paste into a spreadsheet or a script.

Tips for images that do not decode

  • Crop around the code when it is small in a large photo. More pixels per module helps the detector. The image rotate, flip and crop tool does this locally.
  • Keep the quiet zone: the light margin around the code is part of the format. A crop that cuts into it can make the code unreadable.
  • Avoid blur and strong perspective: a sharp, roughly front facing photo decodes far more reliably than a tilted, out of focus one.
  • Inverted codes are not detected: the decoder expects dark modules on a light background. Light on dark codes return No QR code found.
  • Convert HEIC first: iPhone photos in HEIC format are not read directly. Convert them with the HEIC to JPG converter, then decode the JPG.

Limits

The tool reads standard QR codes only. It does not read linear barcodes (EAN, UPC, Code 128), Data Matrix or Aztec codes, and it does not use your webcam: it works from image files. The image is converted to grayscale before detection, so colored codes work as long as the modules are clearly darker than the background. Payloads are shown as UTF-8 text; binary content that is not valid text is displayed with replacement characters.

Compared with a phone camera or the command line

A phone camera is fastest for a printed code in front of you, but it usually offers to open the link straight away and cannot read a code displayed on the same phone. On a computer, zbarimg image.png from the ZBar suite decodes files from the terminal if you have it installed. This page covers the same need without installation and without sending the image to an online scanner.

Privacy: your image never leaves the browser

Screenshots often contain more than the QR code: chat messages, email addresses, account names, the rest of a boarding pass. A QR code itself may hold a Wi-Fi password, a two factor secret or a private document link. Here the image bytes are read in memory and passed to a WebAssembly module in your tab. No request sends the image or the decoded text to a server, which you can confirm in the Network tab of your browser's developer tools.

Frequently asked questions

How do I scan a QR code that is on my computer screen?
Take a screenshot (Win+Shift+S on Windows, Cmd+Shift+4 on macOS), save it, and drop the file here. The content appears as text you can copy.
Does the reader open the link automatically?
No. It only displays the decoded text. You decide whether to copy or visit the URL after checking it, which is the safe way to handle QR codes from unknown sources.
Can it read several QR codes in one image?
Yes. Every readable code in the image is returned as a separate entry, and in batch mode as a separate row in the results table.
Which image formats are supported?
PNG, JPG, WebP, BMP and TIFF. Convert HEIC photos to JPG first.
Why does it say "No QR code found"?
The code may be too small, blurry, cut off at the edge, or inverted (light modules on a dark background). Crop closer to the code with its margin intact and try again.
Can it read barcodes?
No. Only QR codes are supported. Linear barcodes such as EAN or UPC and other 2D formats like Data Matrix are not decoded.
Is my image uploaded?
No. Decoding runs entirely in your browser via WebAssembly. The image and its content stay on your device.

Need to create a code instead? Use the QR code generator to turn a URL or text into a downloadable SVG or PNG.