HomeToolsDeveloper Tools › QR Code Reader

QR Code Reader — Decode QR Codes Online Free

Upload an image containing a QR code, or scan one live with your camera. Decodes instantly and shows the full content. Free, no account, nothing stored.

QR decoding runs in your browser using jsQR. Uploaded images are decoded locally — nothing is stored on any server.

Drop a QR code image here, or click to browse

PNG, JPG, WEBP accepted · Max 10 MB

About QR Code Reader

QR Code Reader decodes QR codes from any image you upload — PNG, JPG, or WEBP — or from a live camera feed. Decoding runs entirely in your browser using jsQR, an open-source MIT-licensed JavaScript library. Neither the images you upload nor the camera frames are sent to any server. After the initial page load, decoding requires no network activity at all. The decoded result — a URL, plain text, Wi-Fi credentials, vCard contact, or other payload — appears in under a second for typical images.

Who uses it: developers verifying that a QR code generation feature produces the correct payload; security researchers checking a QR sticker's encoded URL before scanning with a phone; event staff decoding a printed QR ticket to inspect its content; IT admins reading embedded credentials from a network provisioning QR without scanning it through a phone.

How jsQR decodes a QR code

jsQR (version 1.4.0) is a pure JavaScript QR decoder that works on ImageData arrays read from an HTML canvas. The decode sequence: (1) the image or camera frame is drawn to an off-screen canvas; (2) getImageData() retrieves the raw RGBA pixel values; (3) jsQR converts to grayscale and scans for finder patterns — the three bordered squares in the QR code's corners that define its orientation and boundaries; (4) a projective transform corrects for perspective tilt and rotation; (5) the module bit matrix is sampled; (6) Reed-Solomon error correction decodes the data codewords — QR codes at Level H can recover from up to 30% damage; (7) the mode indicator and character count determine how to interpret the payload (numeric, alphanumeric, byte, or kanji mode); (8) the result is returned as a UTF-8 string.

Camera scanning

Clicking "Scan with camera" requests camera access via the browser's getUserMedia API (WebRTC). Frames are drawn to the same off-screen canvas in a requestAnimationFrame loop and decoded by jsQR on each frame. When a QR code is detected, the frame loop stops automatically and the result is shown. No camera frames are transmitted to any server. Clicking "Cancel camera scan" immediately releases the camera and stops frame capture.

Camera scanning works on Chrome and Firefox for Android, and Safari on iOS 11+. The page must load over HTTPS (which AT USE provides) for getUserMedia to be available on iOS.

What this tool does and does not decode

jsQR decodes standard QR codes (ISO/IEC 18004). It does not decode Data Matrix codes (used in pharmaceutical and postal labels), Aztec codes (used on boarding passes and transit tickets), PDF417 barcodes (driver's licenses, some event tickets), or 1D barcodes (EAN-13, UPC, Code 128). For those formats, a different decoder is required. If the image contains a 2D code that is not a standard QR code, the tool will return "No QR code found."

QR payload types

QR codes can encode any byte sequence. Common payload formats: URLs (http:// or https://), plain text, Wi-Fi credentials (format: WIFI:S:NetworkName;T:WPA;P:Password;;), vCard 2.1 and 3.0 contact records, email addresses (mailto:), phone numbers (tel:), SMS drafts (smsto:), calendar events (BEGIN:VCALENDAR), and geo-coordinates (geo:). The decoded content is displayed as plain text. For URL payloads, the tool renders a clickable link — verify the full URL before clicking, as QR codes can encode phishing URLs that look legitimate at a glance.

Common use cases

Frequently asked questions

Is anything uploaded to a server when I decode a QR code?

No. jsQR runs entirely in your browser as a client-side JavaScript library. Images you upload are read with the browser's FileReader API and drawn to an off-screen canvas in memory. Camera frames are drawn to the same canvas locally. After the page loads, decoding requires no network requests. Your image and decoded content never leave your device.

What should I do if the tool returns "No QR code found"?

Common causes: the QR code occupies a small fraction of the image (fewer than ~20×20 pixels at the code boundary), the image is blurry or motion-blurred, glare is washing out the dark modules, or the code is damaged beyond jsQR's error correction capacity. Try cropping the image to isolate the QR code and remove surrounding content, taking a cleaner photo, or photographing from a different angle. For QR codes on reflective surfaces, adjust the lighting to reduce glare.

What types of data can a QR code contain?

Any byte sequence. Common formats include URLs, plain text, Wi-Fi credentials (WIFI:S:NetworkName;T:WPA;P:Password;;), vCard contact data, email addresses (mailto:), phone numbers (tel:), SMS drafts (smsto:), calendar events (BEGIN:VCALENDAR), and geo-coordinates (geo:lat,lon). The decoded result is shown as plain text; URL payloads get a clickable link button.

Does camera scanning work on mobile?

Yes. Camera scanning works on Chrome and Firefox for Android, and Safari on iOS 11+. The page loads over HTTPS, which is required for getUserMedia on iOS. For best results, hold the phone steady and position the QR code so it fills at least one-third of the camera frame in good lighting.

What QR code variants does jsQR support?

Standard QR codes as defined by ISO/IEC 18004, including all error correction levels (L, M, Q, H) and all four data encoding modes (numeric, alphanumeric, byte, kanji). It does not decode Data Matrix, Aztec Code, PDF417, or 1D barcodes (EAN, UPC, Code 128, Code 39). For a code that is clearly a square 2D matrix but not decoding, try increasing image resolution or trying a different photo angle.

Can jsQR decode a QR code that is partially damaged or obstructed?

Depends on the error correction level encoded in the QR code. Level L: up to 7% of modules can be damaged. Level M: up to 15%. Level Q: up to 25%. Level H: up to 30%. Most QR codes printed for public use are Level M or L. If more than 15–30% of the code is obscured, torn, or unreadable in the image, decoding will fail. A cleaner photo from a different angle sometimes recovers enough modules for a successful decode.

Is there a file size limit for uploaded images?

Yes — 10 MB per image. Most QR code images (screenshots, phone photos) are well under 1 MB. Very large photos from high-resolution cameras might exceed the limit; resize or crop the image before uploading.

Also try

Related tools

LiveDeveloper Tools

QR Code Generator

Generate a QR code from any URL or text. Download as PNG or SVG. No account, no watermark. Works offline after load.

Open tool
LiveDeveloper Tools

Barcode Generator

Generate Code 128, EAN-13, UPC-A, and other standard barcodes from any value. Download as SVG or PNG.

Open tool
LiveDeveloper Tools

Binary Translator

Convert text, decimal, or hex to binary and back. Pure browser JavaScript — nothing sent to any server.

Open tool
LiveDeveloper Tools

Base64 Encoder / Decoder

Encode any text or binary data to Base64 or decode Base64 back to readable text. Browser-only, nothing stored.

Open tool