QR Code Scanner — Scan QR Codes from Images Online

Decode QR codes from uploaded images instantly. Supports URLs, text, emails, phone numbers, and more. Runs entirely in your browser.

QR Code Scanner

Upload QR Code Image

Drag & drop a QR code image here

or click to browse

Scan Result

What is a QR code? A QR code is a two-dimensional barcode defined by ISO/IEC 18004 that stores text in a grid of black and white squares called modules. Three large squares in the corners tell a reader where the code is and how it is rotated, and Reed–Solomon error correction lets it still be read when part of it is damaged. Whatever a code "does" — open a link, join a network, add a contact — comes entirely from the text it contains.

How to Use the QR Code Scanner

  1. Add the image — Drag a photo or screenshot containing a QR code onto the drop zone, or use Choose File. Any format the browser can decode works, including PNG, JPG, WebP and HEIC where the browser supports it.
  2. Let the decoder run — The image is drawn to a canvas and its pixels are handed to the jsQR library, which locates the finder patterns, corrects for perspective, reads the modules, and applies error correction. There is no button — the scan starts as soon as the file loads.
  3. Read the decoded payload — The result panel shows the exact text stored in the code. This is the important step: you are looking at the raw payload before anything acts on it, so a link that claims to be one destination and points at another is visible here.
  4. Copy or open itCopy Result puts the text on your clipboard. If the payload is a URL it is also rendered as a link, which opens in a new tab — only follow it once you have read where it actually goes.
  5. Reset for the next imageReset clears the result and the file input. If nothing was found you will see a message instead; crop the image tighter around the code and try again.

How QR Decoding Works

Your file is drawn into an HTML canvas and the raw pixel buffer is read out with getImageData. That buffer is passed to jsQR, an open-source JavaScript decoder that runs in the page. It first binarizes the image into black and white, then searches for the three finder patterns — the concentric squares in the top-left, top-right and bottom-left corners. Those three points establish the position, scale and rotation of the code, which is why a QR code can be read upside down or at an angle. Alignment patterns and the dotted timing rows let the decoder correct for perspective distortion when the photo was taken off-axis.

Once the grid is mapped, the modules are read as bits, unmasked, and passed through Reed–Solomon error correction. That stage is what makes QR codes so robust: the data is stored with redundancy, so a proportion of the code can be missing or misread and the original text is still recovered exactly. The level of redundancy is chosen when the code is created:

Error correction levelRecoverable damageTypically used for
L (Low)About 7%Clean digital display, maximum data in the smallest grid
M (Medium)About 15%The common default for print and screens
Q (Quartile)About 25%Industrial labels, codes that may get scuffed
H (High)About 30%Codes with a logo covering the center, harsh environments

The grid itself ranges from version 1 at 21 x 21 modules up to version 40 at 177 x 177. At the largest version with the lowest error correction, a QR code can hold up to 7,089 digits, 4,296 alphanumeric characters or 2,953 bytes. In practice almost every code you meet is far smaller, because a short URL fits comfortably in a low version and stays easy to scan.

What the decoded text means

A QR code contains text and nothing else. The behavior you see when a phone scans one comes from the camera app recognising a prefix and offering the matching action. Reading the raw payload here tells you exactly what a scanner would be handed:

Payload begins withMeaningExample
https://Web linkhttps://example.com/menu
mailto:Email address, optionally with subject and bodymailto:hello@example.com
tel:Phone number to dialtel:+15551234567
SMSTO:Pre-filled text messageSMSTO:+15551234567:Hi
WIFI:Network credentialsWIFI:T:WPA;S:MyNet;P:pass;;
BEGIN:VCARDContact cardBEGIN:VCARD VERSION:3.0 …
geo:Map coordinatesgeo:37.7749,-122.4194
Anything elsePlain text, shown as-isTable 14

A QR code gives no visual clue about where it leads, which is what makes malicious codes — stickers over a real code on a parking meter or a restaurant table — effective. Decoding an image here is a safer way to check one, because you read the destination as text before anything opens it. Treat shortened links, unfamiliar domains and lookalike spellings with the same suspicion you would give a link in an unexpected email.

When a code will not scan

The most common failure is not a damaged code but a missing quiet zone: the standard requires four modules of clear space around the whole symbol, and a screenshot cropped tight to the black edge often fails for that reason alone. Blur and low resolution are the next culprits, because the decoder needs each module to be at least a couple of pixels across. Extreme angles, glare across a glossy print, and inverted color schemes where the code is light on dark also cause misses. Recropping with a margin, or increasing contrast before scanning, fixes most images that fail on the first attempt.

Frequently Asked Questions

A QR code is a matrix barcode standardized as ISO/IEC 18004. It encodes text in four modes — numeric, alphanumeric, byte and kanji — inside a square grid ranging from 21 x 21 up to 177 x 177 modules. At the largest size with minimal error correction it holds up to 7,089 digits or 2,953 bytes. Everything else, from Wi-Fi joining to contact cards, is a text convention layered on top.

All of them, because it returns the raw text regardless of what the payload represents: URLs, plain text, mailto: addresses, tel: numbers, SMSTO: messages, WIFI: credentials, vCard contacts, geo: coordinates and app-specific schemes. Only the first code found in an image is returned, so crop to a single code if the picture contains several.

No. The file is read locally with FileReader, drawn to a canvas, and decoded by the jsQR library running inside the page. No image data leaves the browser and no scan is logged. That matters for codes on boarding passes, tickets, invoices and authenticator setup screens, which often carry personal or secret information.

Usually the quiet zone. QR codes need about four modules of blank margin on every side, and a screenshot cropped flush to the edge of the pattern will fail even though it looks complete. After that, check for blur, low resolution, glare across the print, and extreme viewing angles. Recrop with a clear margin around the whole code and try again.

No. This tool reads QR codes from image files: photos, screenshots, downloaded pictures and saved graphics. For live scanning, use your phone's camera app, which does the same job with a video stream. Reading from a file is often more convenient anyway when the code arrives inside an email, a PDF or a chat message on the same device.

No. QR codes are two-dimensional and are decoded very differently from the one-dimensional stripes on retail packaging. For EAN, UPC, Code 128 and similar linear symbologies, use the Barcode Scanner instead. The Barcode Generator creates them.

Only after you have read where it goes. A QR code carries no visible indication of its destination, which is exactly why malicious codes get pasted over legitimate ones in public places. This tool shows the payload as text before anything acts on it, so check the domain carefully — especially for shortened links and lookalike spellings — before you follow it.

Because of Reed-Solomon error correction. A code created at level H can lose roughly 30% of its modules and still decode, which is what allows a brand logo to sit over the middle. The trade-off is capacity: higher error correction means more of the grid is spent on redundancy, so the same text needs a physically larger code.

Use Cases

Codes That Arrive on the Same Device

A ticket or voucher lands as a screenshot on the phone you would otherwise scan with. Reading the file directly avoids photographing your own screen.

Checking a Code Before You Trust It

A sticker on a parking meter or a flyer in the post may not lead where it claims. Photograph it, decode it here, and read the domain as plain text before opening anything.

Recovering a Wi-Fi Password

A guest network card carries a WIFI: payload with the SSID and password in the clear. Decoding it gives you the credentials in text you can type into a device that cannot scan.

Pulling Details Off a Business Card

A vCard payload holds the name, title, phone and email as structured text. Copy it out and paste it straight into a contact record instead of retyping.

Proofing a Code Before Print

Before a poster or a packaging run goes out, decode the artwork file and confirm the payload is the final URL rather than a staging link left over from a draft.

Inspecting an Authenticator Setup Code

Two-factor setup screens show an otpauth:// code containing a shared secret. Decoding it locally lets you save the secret for a backup device without it leaving your machine.