Upload a photo, get the link or text instantly
Drop in any screenshot or saved image containing a QR code and this QR code scanner reads it for you in seconds — no camera, no app, no sign-up required. The decoded URL, plain text, contact details, or Wi-Fi credentials appear right on screen, ready to copy or open.
Your image never leaves your device. Decoding happens entirely in your browser with JavaScript, so nothing is uploaded to any server. That makes this safer than most online QR readers, which silently send your file to their backend.
How to scan a QR code from an image
- Get the image. Take a screenshot, save a photo, or download any image that contains a QR code.
- Upload or drag it in. Click the upload area above — or drag the image file straight onto it.
- Read the result. The decoded text, link, or data appears immediately below the preview.
- Copy or act on it. Hit Copy to grab the result, or click any detected link to open it directly.
Worked example: decoding a QR code screenshot
Input: A screenshot saved as ticket-qr.png containing a QR code printed on an event ticket. The code encodes a URL.
Output after scanning:
https://events.example.com/checkin?token=A3F9-2KX7You can then paste that URL into your browser, or copy it into another tool for further processing. If the QR code holds plain text or a vCard (contact card), the full text is shown exactly the same way.
How to decode a QR code in code
If you need to automate QR decoding in a script or app, here are the most common approaches.
Python — using the pyzbar library
from PIL import Image
from pyzbar.pyzbar import decode
img = Image.open('ticket-qr.png')
results = decode(img)
for r in results:
print(r.data.decode('utf-8'))
# Output: https://events.example.com/checkin?token=A3F9-2KX7Install with pip install pyzbar Pillow. On macOS you may also need brew install zbar.
JavaScript (browser) — using the jsQR library
import jsQR from 'jsqr';
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
const code = jsQR(imageData.data, imageData.width, imageData.height);
if (code) {
console.log('Decoded:', code.data);
// Output: https://events.example.com/checkin?token=A3F9-2KX7
}Install with npm install jsqr. The jsQR library is what powers many browser-based QR decoders, including this tool.
How it works under the hood
QR codes (Quick Response codes) store data in a 2-D grid of black and white squares. The scanner uses a JavaScript image-decoding library to locate the three square 'finder patterns' in the corners, correct for any skew or blur, then read the binary data and decode it using the ISO/IEC 18004 QR code standard.
Error-correction data built into every QR code means the scanner can recover the full content even if part of the image is damaged or obscured — up to 30% of the code can be missing and it will still decode correctly.
When this scanner is the right choice — and when it isn't
| Situation | Use this tool? |
|---|---|
| QR code in a screenshot or saved image file | ✅ Yes — ideal |
| QR code in a PDF or document screenshot | ✅ Yes — upload the screenshot |
| Blurry or very small QR code in a photo | ⚠️ Try it — error correction helps, but extreme blur may fail |
| Live camera scanning on your phone | ❌ Use your phone's built-in camera app instead |
| Batch-decoding hundreds of images automatically | ❌ Use a command-line tool like zbarimg or a Python script |
Works on screenshots and saved images — not just camera feeds
Most people only think of QR scanners as camera apps. This tool fills a different gap: you already have the image on your computer — maybe from a PDF, a forwarded screenshot, or a web page — and you just need to read what's inside the code.
Common uses include checking a ticket QR code before an event, reading Wi-Fi credentials embedded in a QR sticker, and verifying that a QR code you just generated actually encodes the right URL. For generating new codes, pair this scanner with a QR code generator to create and immediately verify in the same workflow.
If the decoded content comes back as JSON — for example, some API tokens or structured data payloads are stored in QR codes — you can paste it straight into the JSON Beautifier to make it readable, the JSON Validator to check it for errors, or the JSON Viewer to explore its structure interactively. The JSON Pretty Print tool is handy for a quick clean-up, and if you need YAML output, JSON to YAML Converter handles that in one click.
Drop your image into the scanner above and get the result in under a second.