QR Code Reader
Decode QR codes from any image — upload a file, drag and drop, or paste a screenshot straight from your clipboard. Reads URLs, Wi-Fi credentials, vCard/MECARD contacts, and plain text instantly. Runs entirely in your browser; your image is never uploaded.
Upload QR Code Image
Drag and drop a QR code image here, or click to select
PNG, JPG, WebP, or a screenshot
Tip: pressing Ctrl+V (Cmd+V on Mac) anywhere on this page pastes in one step — no browser confirmation popup.
Reading Tips
- Screenshots decode more reliably than angled camera photos
- Crop tightly around the code and keep its white border visible
- Good contrast and lighting help — avoid glare and blur
- Your image is never uploaded — everything decodes in your browser
Decoded Result
Decoded content will appear here
Upload, drop, or paste a QR code image to get started
About QR Code Reading & Safety
100% client-side: decoding happens in your browser via Canvas and the jsQR library — your image is never uploaded.
Automatic retries: if the first decode attempt fails, a downscaled and color-inverted retry runs automatically.
Links are never opened automatically: always check the domain before clicking "Open Link" on a decoded URL.
Multiple content types: URLs, Wi-Fi credentials, and vCard/MECARD contacts are parsed into readable fields.
About QR Code Reader
The QR Code Reader decodes QR codes directly from an image — a file you upload, a drag-and-dropped photo, or a screenshot pasted straight from your clipboard — without ever sending that image to a server. It draws the image to an in-browser canvas, reads the raw pixel data, and hands it to the jsQR JavaScript library to locate and decode the finder patterns and data modules. If the first pass doesn't find a code, it automatically retries at a reduced resolution and with inverted colors before reporting failure, which recovers many marginal screenshots and low-contrast photos. Decoded content is automatically classified — URLs, Wi-Fi credentials, vCard/MECARD contact cards, or plain text — and rendered into readable fields instead of a raw string.
Why use a QR Code Reader?
Most 'online QR scanners' quietly upload your photo to a backend for processing, which is a real problem when the code encodes something sensitive like a Wi-Fi password, a private URL, or personal contact details. This reader decodes entirely client-side, so nothing you scan ever leaves your device — verifiable in DevTools' Network tab as zero requests. It's also built for the case a phone camera can't handle well: a QR code you've already screenshotted (from a Slack message, a PDF, or a slide deck) rather than one sitting in front of a live camera. Paste it straight from the clipboard and get an answer in milliseconds, with URLs, Wi-Fi credentials, and contacts parsed into clean, copyable fields.
Who is it for?
Useful for anyone who's ever screenshotted a QR code instead of photographing it: developers debugging a QR payload embedded in their own app, IT staff reading a router's Wi-Fi QR sticker without typing out the WIFI: string by hand, support teams verifying what a customer-submitted QR code actually points to before recommending someone scan it, and security-conscious users who want to inspect a QR-encoded URL before opening it. Also useful for QA testing QR codes generated by another tool — including this site's own QR Code Generator — to confirm they decode correctly before printing or publishing them.
How to use the tool
Click the upload area, or drag and drop a QR code image (PNG, JPG, WebP, or a phone screenshot) directly onto it.
Prefer the clipboard? Copy any QR code image — a screenshot, a photo, or an image from another app — and press Ctrl+V (Cmd+V on Mac) anywhere on the page to paste it in directly.
The tool draws your image onto an in-browser canvas and decodes it locally with the jsQR library — the file itself is never uploaded or transmitted anywhere.
If the first decode attempt doesn't find a code, the tool automatically retries at a reduced resolution and with inverted colors before reporting a failure.
Review the decoded text in the result panel alongside a preview of the image you uploaded.
URLs are shown as plain, non-clickable text with an explicit 'Open Link' button and a safety reminder to check the domain first — the tool never opens a link automatically.
Wi-Fi QR codes are parsed into separate SSID, security type, and password fields instead of a raw WIFI: string you'd have to read manually.
vCard and MECARD contact codes are parsed into name, phone, email, and organization fields when present.
Click Copy to copy the decoded text, or upload/paste another image to decode again — no page reload needed.
Key Features
Three ways to load an image
Click-to-browse, drag-and-drop, or paste directly from the clipboard with Ctrl+V/Cmd+V — built for QR codes you've screenshotted, not just photographed.
Automatic retry pipeline
If a decode fails at natural resolution, the tool automatically retries at a downscaled resolution and with inverted colors (jsQR's attemptBoth mode) before reporting failure.
Content-aware parsing
URLs, Wi-Fi credentials (WIFI:S:...;T:...;P:...;;), and vCard/MECARD contact cards are automatically detected and rendered into labeled, copyable fields — not just a raw string.
Safety-first link handling
Decoded URLs are never auto-opened. They're shown as plain text with an explicit Open Link button and a reminder to verify the domain — a direct defense against QR phishing ('quishing').
100% client-side
Image decoding — canvas drawing, pixel reads, and the jsQR library itself — runs entirely in your browser. The image is never uploaded, logged, or stored.
Common Use Cases
Reading a router's Wi-Fi sticker
Scenario: A router or hotel room prints a WIFI:S:...;T:WPA;P:...;; QR code so guests can connect without typing the password.
✓ Photograph or screenshot the sticker and this tool parses it into separate SSID, security type, and password fields you can read and copy directly.
Checking a QR code before scanning it with your phone
Scenario: A flyer, parking meter, or email contains a QR code and you're not sure it's safe to open on your phone.
✓ Upload a photo of the code here first. The decoded URL is shown as inspectable text with an explicit Open Link button, so you can check the domain before visiting anywhere.
QA-testing a generated QR code
Scenario: You've just built a QR code with a generator (including this site's QR Code Generator) and want to confirm it decodes correctly before printing.
✓ Screenshot or export the generated code and paste it straight in — instant confirmation of exactly what will scan, without needing a phone.
Extracting contact details from a business card scan
Scenario: A business card has a vCard/MECARD QR code and you want the contact details without manually retyping them.
✓ The parser extracts name, phone, email, and organization into labeled fields you can copy individually.
100% client-side — your image is decoded entirely in the browser via Canvas and the jsQR library. It is never uploaded, logged, or stored anywhere. Verifiable in DevTools' Network tab: zero requests fire during decoding.
Frequently Asked Questions
How do I read a QR code from an image online?
Upload a QR code image by clicking the upload area, dragging a file onto it, or pasting a screenshot straight from your clipboard with Ctrl+V (Cmd+V on Mac) — the key feature for QR codes you've screenshotted rather than photographed. The tool draws the image to an in-browser canvas and decodes it with the jsQR library; if the first pass fails it automatically retries at a reduced resolution and with inverted colors before giving up. Decoded text appears instantly with a Copy button, and URLs, Wi-Fi credentials, and contact cards (vCard/MECARD) are automatically parsed into readable fields. No file is ever uploaded to a server, so you can decode multiple images back-to-back without reloading the page.
What is QR error correction and how much damage can a code survive?
QR codes use Reed-Solomon error correction encoded at one of four levels: L (~7% of the code can be damaged and still decode), M (~15%), Q (~25%), and H (~30%). This is why a QR code with a scratch, a logo overlay, or partial glare can still scan successfully — the redundant codewords reconstruct the missing modules mathematically. The error correction level isn't something you can read back from decoded text; it's baked into how densely the data and redundancy codewords are packed when the code is generated. Higher correction levels mean more modules are spent on redundancy rather than raw data, so identical content produces a visually 'busier' code at level H than at level L.
Does this tool upload my image to a server?
No. Decoding runs entirely in your browser: the image is drawn to an HTML canvas, the pixel data is read with getImageData, and the jsQR JavaScript library (loaded on demand) locates and decodes the QR pattern — all without a single network request. This is a genuine differentiator for a QR reader, since most 'online QR scanners' quietly upload your photo to a backend for processing. You can verify it yourself: open DevTools' Network tab before decoding and confirm zero requests fire when you upload or paste an image. That matters when the QR code encodes something sensitive — a private Wi-Fi password, a personal vCard, or an internal URL.
Is it safe to scan a QR code I found on a poster, parking meter, or email?
Treat unknown QR codes with the same caution as an unknown link — 'quishing' (QR phishing) is a real attack where a sticker is placed over a legitimate code to redirect victims to a credential-harvesting or malware site. This tool never auto-opens a decoded URL: it shows the raw address as plain text with an explicit 'Open Link' button, so you can inspect the domain before visiting. Check for lookalike domains, unexpected redirects, and mismatched branding. Never enter a password or payment details on a page you reached via an unverified QR code, and be extra wary of codes on physical signage that could have been tampered with or pasted over.
Why does my photographed QR code fail to decode?
jsQR — and most browser-based decoders — expect a reasonably flat, front-on view of the code. Common failure causes: perspective distortion from an angled photo, motion blur, low contrast (a light gray code on white, or a code printed too small relative to the photo), a missing 'quiet zone' (the blank border around the code gets cropped off), and heavy compression artifacts from repeated screenshot or re-save cycles. This tool automatically retries at a downscaled resolution and with inverted colors, which recovers many marginal cases, but it can't correct for genuine perspective skew or blur. If decoding fails, retake the photo straight-on, move closer so the code fills more of the frame, improve lighting to avoid glare, and keep the white border around the code intact.
What kinds of content can a QR code contain, and how does this tool detect them?
A QR code is just a container for text — what it 'means' depends on a prefix convention the scanner recognizes. This tool inspects the decoded text and detects: URLs (http:// or https://, shown with a safety note and an explicit Open Link button), Wi-Fi credentials (the WIFI:S:...;T:...;P:...;; format, parsed into SSID, security type, and password fields), contact cards (vCard's BEGIN:VCARD or MECARD:, parsed into name, phone, email, and organization), and plain text for everything else — phone numbers, SMS bodies, calendar events, or arbitrary strings. If detection misclassifies your content, the full raw decoded text is always shown too.
Can I recover a Wi-Fi password from a photo of a router's QR sticker?
Yes — many routers print a WIFI:S:NetworkName;T:WPA;P:password;; QR code on a sticker specifically so guests can join without typing the password. Upload or paste a photo of that sticker here and the tool parses it into separate SSID, security type, and password fields you can read and copy directly, instead of squinting at a raw WIFI: string. The same workflow works for a QR code on a business card (vCard contact details) or a printed poster (a URL). Because decoding is entirely client-side, this is safe even for a private home network's credentials — the password never leaves your device.
How much data can a single QR code hold?
It depends on the version (1-40, where a higher version means a larger grid) and the character set. At the largest size — version 40 with the lowest error correction level (L) — a QR code can hold up to 7,089 numeric digits, 4,296 alphanumeric characters, or 2,953 bytes of binary/UTF-8 data. Higher error-correction levels reduce usable capacity because more modules are spent on redundancy. In practice, real-world codes (Wi-Fi credentials, URLs, vCards) use far less than the maximum to stay reliably scannable at typical print sizes. Need to create a QR code instead of reading one? Use the [QR Code Generator](/tools/qr-code-generator/), which builds codes with configurable size and error-correction level.
Technical Specifications
Supported Formats
- ✓Image formats: PNG, JPEG/JPG, WebP, GIF, BMP, and any format the browser's <img> element can decode
- ✓Input methods: file picker, drag-and-drop, clipboard paste (Ctrl+V / Cmd+V)
- ✓Decode engine: jsQR (pure JavaScript, loaded on demand)
- ✓Decode pipeline: natural resolution, then a downscaled retry, with inverted-color attempts (jsQR attemptBoth) before failing
- ✓Content parsing: URL, Wi-Fi (WIFI:...;;), vCard (BEGIN:VCARD), MECARD:, plain text
Limits & Performance
- •File Size: No hard cap — very large photos are downscaled internally during the retry pass for performance
- •Validations: Detects a single QR code per image; if multiple codes are present, the first one located is decoded
- •Response Time: Typically under a second for a well-lit, front-on image; camera photos with low contrast or a shallow angle may need a retake
- •Browsers: All modern browsers (Chrome, Firefox, Safari, Edge) with Canvas 2D support
Pro Tips
- Screenshots decode more reliably than camera photos — there's no perspective skew or focus blur to worry about, which is exactly why clipboard paste is the fastest path for QR codes you already have on screen.
- If a photo won't decode, crop it tightly around just the code (including a small white border) before uploading — removing background clutter helps the locator find the finder patterns.
- For Wi-Fi QR codes, the parsed 'security' field of 'nopass' means the network is open and has no password, not that the field failed to parse.
- Never trust a decoded URL just because it decoded successfully — successful decoding only confirms the QR code is well-formed, not that the destination is safe.
Share This Tool
Found this tool helpful? Share it with others who might benefit from it!
💡 Help others discover useful tools! Sharing helps us keep these tools free and accessible to everyone.