How-To Guides

QR Code Scanner Online Free — Scan with Camera or Upload an Image

Most QR code scanners either require an app install, send your image to a remote server, or only work if you have a physical code in front of you. This guide covers a free browser-based alternative that supports two input methods — live camera via the getUserMedia API, and image upload decoded locally with ZXing/jsQR — with no app, no account, and no file leaving your device.

By · July 2, 2026 · 7 min read · Updated July 2026
Key Takeaways

  • Two input methods: live camera (getUserMedia API) and image upload (ZXing/jsQR decoding)
  • Decodes URLs, WiFi credentials, vCards, email links, SMS, calendar events, and plain text
  • All decoding happens in your browser — no image or data is sent to any server
  • QR codes tolerate up to 30% damage thanks to built-in Reed-Solomon error correction
  • Works on iPhone (Safari iOS 11+), Android Chrome, and all modern desktop browsers
  • Use fusionpdf.pro/qr-code to create QR codes; use fusionpdf.pro/qr-scan to scan them

A QR code scanner that works without an app and without sending your image to a server used to be a niche tool. With the getUserMedia API now supported in every major browser and WebAssembly-compiled decoding libraries like ZXing-js running at near-native speed, browser-based scanning is now fully practical — fast enough for live camera feeds and accurate enough to recover partially damaged codes.

Two Ways to Scan: Camera vs. Image Upload

The FusionPDF QR Scanner supports two input methods. Live camera scanning uses your device's camera through the browser's getUserMedia API — you point the camera at a code and it decodes in real time, with no shutter press needed. Image upload lets you select any saved image file — a screenshot, a photo from your camera roll, or a downloaded image — and decode the QR code contained in it. Both methods run the same ZXing/jsQR decoding engine inside your browser.

Live Camera

Point and scan in real time

Uses the getUserMedia API to stream your camera into a canvas element. The decoder samples each frame and fires as soon as a valid QR code is detected.

  • No button press — auto-detects when a code enters frame
  • Works on phones, tablets, and laptops with a webcam
  • Best for scanning physical codes (posters, packaging, screens)
  • Requires camera permission in the browser
Upload Image

Decode from a saved file

Accepts PNG, JPG, WEBP, GIF, or BMP. The image is loaded into a canvas element and the full decoding pipeline runs on the pixel data.

  • Perfect for screenshots and downloaded images
  • Works offline after the page has loaded
  • No camera permission needed
  • Can handle larger, higher-resolution images for better accuracy

Which method should you use? If you have a physical QR code in front of you — on a product, a flyer, or a screen — use the camera method. If you received a QR code as an image (in an email, a PDF, a webpage screenshot), use the upload method. Both produce the same decoded output.

How to Scan a QR Code Online Free (3 Steps)

The entire process takes under a minute. No account, no app install, and no file ever leaves your browser. The scanner works on any modern browser including Safari on iPhone, Chrome on Android, and desktop Chrome, Firefox, or Edge.

1

Open the scanner. Go to fusionpdf.pro/qr-scan. The page loads the ZXing/jsQR decoding library and initializes the input UI. No sign-up or account required.

2

Point your camera or upload an image. Click Start Camera to activate your device's camera — if prompted, grant camera permission. Point the camera at the QR code and hold it steady. Alternatively, click Upload Image and select a screenshot or photo file from your device. The decoder starts processing immediately on both inputs.

3

Read the decoded content. As soon as the decoder identifies a valid QR code, the result appears below the scanner. URLs are shown as clickable links. WiFi credentials display the network name, password, and security type. vCard data shows contact fields. Copy any result to your clipboard with one click.

Camera tip: Hold the camera 15–30 cm (6–12 inches) from the code and make sure the entire QR code is visible in frame. Good lighting makes a significant difference — avoid shadows falling across the code. If the camera struggles, try the upload method instead: take a photo with your phone's native camera app (which has better autofocus control) and upload the resulting image.

What Types of QR Codes Can It Decode?

QR codes are a container format — they encode text strings that follow specific conventions depending on the data type. The scanner decodes the raw string and then parses it to identify the data format, displaying it in a human-readable way. Here are the most common formats you'll encounter and what each looks like when decoded.

  • URLs. The most common type. The encoded string starts with https:// or http://. The scanner displays it as a clickable link. Always verify the URL before clicking — malicious QR codes can point to phishing pages.
  • WiFi credentials. Uses the WIFI:T:WPA;S:NetworkName;P:Password;; format. The scanner extracts and displays the network name (SSID), password, and security type (WPA, WEP, or open). Most modern phones can connect directly from a decoded WiFi QR code.
  • vCard contact data. Starts with BEGIN:VCARD and contains name, phone, email, address, and other contact fields in structured form. Useful for sharing contact information from business cards or name badges.
  • MECARD contact data. A more compact contact format used widely in Japan and East Asia. Contains similar fields to vCard but with a shorter encoding: MECARD:N:Surname,Given;TEL:+1234567890;EMAIL:user@example.com;;
  • Email links. Uses the MAILTO:user@example.com?subject=Hello format. Clicking the decoded link opens your email client with the address and optional subject pre-filled.
  • SMS messages. Uses SMSTO:+1234567890:Message text here. Opens your SMS app with the number and message pre-composed.
  • Calendar events. Uses the BEGIN:VEVENT format (iCalendar). Contains event title, start/end date-time, location, and description. Decoded output shows the event details; you can add them to your calendar manually.
  • Plain text. Any string that doesn't match the above conventions is displayed as plain text. Common for internal reference codes, serial numbers, or custom application data.

Note on barcode formats: The scanner is optimized for QR codes (ISO 18004). It does not decode other 2D or 1D barcode formats such as EAN-13, Code 128, UPC-A, PDF417, or Data Matrix. If you need to scan those, a dedicated barcode reader is the right tool.

How Browser-Side QR Decoding Works

QR codes store data as a 2D matrix of black and white modules (squares). Decoding one in a browser involves three stages: locating the code in the image, reading the pixel matrix, and applying error correction to recover the original data. All of this happens in JavaScript — specifically in the ZXing-js or jsQR library, compiled to WebAssembly for performance — without any server involvement.

Stage 1 — Detection and alignment

The decoder first locates the three finder patterns — the distinctive square-within-square patterns in three corners of every QR code. These are designed to be detectable at any rotation and from any angle. Once the finder patterns are located, the decoder calculates the perspective transform needed to extract the code as a flat grid, correcting for camera angle, rotation, and minor distortion.

Stage 2 — Reading the pixel matrix

With the grid aligned, the decoder samples each module position and reads it as black (1) or white (0), building a binary matrix. This matrix contains the format information (error correction level, mask pattern) along with the data codewords encoding the actual content. The decoder applies the mask pattern to unmask the data before reading it.

Stage 3 — Error correction and data extraction

QR codes use Reed-Solomon error correction, the same algorithm used in CDs and DVDs. Depending on the error correction level embedded in the code (L, M, Q, or H), the decoder can recover the original data even if part of the code is physically damaged, obscured, or printed poorly:

Error correction level Max damage tolerance Typical use case
L (Low) ~7% of modules Clean indoor environments, digital displays
M (Medium) ~15% of modules General purpose, most common default
Q (Quartile) ~25% of modules Industrial environments, slight wear expected
H (High) ~30% of modules Outdoor, high-wear, or decorative QR codes with logos
Reed-Solomon error correction in QR codes is applied at the codeword level, not the module level. At level H, up to 30% of the codewords can be corrupted and the original data can still be fully recovered. This is why QR codes with logos cut into their center still scan correctly — the logo occupies the high-redundancy zone. QR Code specification (ISO/IEC 18004:2015); ZXing decoding library documentation
30%
maximum damage a QR code can survive At error correction level H, a QR code can still be decoded even if 30% of its surface is damaged, covered, or obscured. This is why branded QR codes with logos in the center still work — and why many damaged codes are still recoverable.

Why No-Upload Scanning Matters for Privacy

Most online QR scanners that accept image uploads send the image to their server for processing. That works fine for a code encoding a restaurant menu URL — but it creates a real problem for QR codes containing sensitive information. A browser-based decoder that runs entirely in JavaScript never transmits anything: the image stays in your device's memory, the decoded result stays in your browser, and nothing is logged or stored remotely.

Here are the concrete cases where no-upload decoding matters:

  • WiFi passwords. A QR code encoding your home or office WiFi credentials contains your network name and password in plain text. Sending that image to a third-party server means their logs contain your password.
  • Internal company QR codes. Many companies use QR codes for internal links, asset tracking, or access control. These often encode internal URLs or identifiers that shouldn't be visible to external services.
  • vCard data from private contacts. A QR code on a business card contains the person's phone, email, and sometimes home address. Sending it to an external server shares that contact's personal information without their knowledge.
  • Authentication codes. Some systems use QR codes for one-time login or device pairing. Sending those to a server could expose an active session.

The FusionPDF QR scanner processes everything in your browser. The camera feed is read by JavaScript and never written to disk or transmitted. Uploaded images are loaded into a canvas element in memory and released when you close the page. No analytics are collected on what codes you scan or what their decoded content is.

Scanning vs. Creating QR Codes

Scanning and creating are two separate operations that work in opposite directions. If you need to read an existing QR code, the scanner at fusionpdf.pro/qr-scan is the right tool. If you need to generate a new QR code from a URL, WiFi credentials, or contact data, use the QR code creator at fusionpdf.pro/qr-code.

The QR creator lets you encode any of the data types described above — URLs, WiFi credentials (WIFI: format), vCards, SMS, and plain text — into a downloadable QR code image. It also lets you choose the error correction level and adjust the size and quiet zone. Like the scanner, it runs entirely in your browser.

Common workflow: Generate a QR code with the creator, print or display it, then use the scanner to verify it decodes correctly before distributing. This is especially important for WiFi codes — a typo in the password produces a scannable but non-functional code.

Troubleshooting: Blurry, Damaged, or Mirrored Codes

Most failed scans come down to three causes: the image isn't sharp enough for the decoder to read individual modules, the code is damaged beyond the error correction threshold, or the code appears mirrored or inverted. Each has a specific fix.

Blurry scans (distance and lighting)

The most common cause of a failed camera scan is motion blur or focus blur. QR code modules are small — a blurry image means module boundaries become ambiguous and the decoder can't reliably determine black from white. Fixes:

  • Hold the camera steady for 1–2 seconds to let autofocus lock
  • Move slightly closer — most phone cameras autofocus faster in the 15–25 cm range
  • Improve lighting: avoid shadows falling across the code, and avoid glare on glossy surfaces
  • If the camera method keeps failing, switch to the upload method: photograph the code with your native camera app (which has better stabilization), then upload the resulting image

Damaged QR codes

A physically damaged code — torn, partially covered, or with a logo that exceeds the error correction capacity — may not decode even though it looks mostly intact. The key variables are the error correction level embedded in the code and what percentage of modules are actually recoverable. Things to try:

  • Try the upload method and use a higher-resolution source image — more pixels per module give the decoder more information to work with
  • Increase contrast: if the code is faded, open the image in any photo editor and boost contrast before uploading
  • If the code has a decorative logo or cutout, it was likely generated at error correction level H (30% tolerance) — but if the logo is very large, it may exceed even that
  • Contact the code's issuer for a replacement — some damage genuinely cannot be recovered

Mirrored or inverted codes

QR codes are designed to be rotation-invariant — they decode correctly when rotated 90, 180, or 270 degrees, because the finder patterns and timing markers are symmetric in a way that lets the decoder determine orientation. However, a mirrored (horizontally flipped) QR code is technically a different image and may not decode with all decoders. The ZXing library includes mirror-correction logic and will attempt to decode mirrored images, but results vary. If you suspect mirroring, flip the image horizontally in any image editor before uploading. An inverted code (dark background, light modules) similarly may not decode — invert the image to restore normal polarity before trying again.

Security warning for unknown codes: Before clicking a URL decoded from a QR code from an unknown source, inspect it carefully. Look for subtle misspellings, unusual domains (e.g. paypa1.com), or URL shorteners that hide the real destination. QR code phishing (quishing) is a real attack vector — the physical format gives attackers a way to bypass link filters in email and messaging apps.

Phone Built-In Scanner vs. Browser Scanner

Most smartphones now include a built-in QR scanner in the native camera app or control center. For scanning a physical code with your phone, that's almost always the fastest option. The browser-based scanner fills the gaps: when you need to scan a code on a desktop computer, decode a saved image, or scan without sending data to Apple's or Google's servers.

Feature Phone built-in scanner Browser scanner (fusionpdf.pro/qr-scan)
Scan physical code with phone camera Yes — fastest option Yes — via getUserMedia
Scan from a saved image or screenshot No (iOS/Android camera app only scans live) Yes — upload any image file
Scan on a desktop or laptop No Yes — webcam or image upload
No data sent to server Varies — some platforms log scan activity Yes — fully local processing
Shows decoded content before opening Partial — shows URL but auto-redirects on some devices Yes — always shows full decoded text first
Decodes WiFi, vCard, SMS, calendar formats Yes — for common formats Yes — all standard QR data types
Works offline Yes After initial page load
App install required Built in — no extra install No install needed

The practical recommendation: use your phone's native scanner for physical codes on your phone. Use the browser scanner when you're on a desktop, when you have an image file to decode, when privacy matters for the specific code you're scanning, or when you want to see the full decoded content before acting on it.

Frequently asked questions
Can it scan a QR code from a screenshot?

Yes. The upload-image method accepts any image file — screenshots, photos saved to your device, or images downloaded from a webpage. Click "Upload Image", select the file, and the decoder will extract the QR code from it. The image is processed entirely in your browser; nothing is sent to any server. This is one of the main advantages over your phone's built-in camera scanner, which can only read live camera feeds.

Does the QR code scanner work on iPhone?

Yes. The browser-based scanner works on Safari on iOS (iPhone and iPad). Camera access uses the getUserMedia API, which Safari has supported since iOS 11. For the upload method, you can select images from your Photos library or Files app directly from the browser file picker. If Safari prompts for camera permission, tap Allow. The scanner also works in Chrome for iOS and Firefox for iOS.

Can it read a damaged or partially obscured QR code?

QR codes include built-in error correction using Reed-Solomon codes at four levels (L, M, Q, H). At the highest level (H), a QR code can still be decoded even if up to 30% of its surface is damaged, covered, or printed incorrectly. The decoder (ZXing/jsQR) automatically applies error correction during decoding — you don't need to do anything special. If a code is too damaged to read, try uploading a higher-resolution image of it, or boost the contrast in an image editor before uploading. Some damage genuinely cannot be recovered regardless of the tool used.

Does it decode all QR code formats?

The scanner decodes standard QR codes (ISO/IEC 18004) in all common data formats: plain URLs, WIFI: credential strings, MECARD and vCard contact data, MAILTO: email links, SMSTO: SMS messages, BEGIN:VEVENT calendar events, and arbitrary plain text. It does not decode other barcode symbologies such as EAN-13, Code 128, UPC-A, Data Matrix, PDF417, or Aztec Code — those are different formats that require a separate barcode reader. If you scan a code and get an unrecognized string, it may be a proprietary app-specific format designed to be read only by a particular application.

Is the scanned data sent to any server?

No. All decoding happens locally in your browser using JavaScript. Whether you use the camera or upload an image, the pixel data is processed by the ZXing/jsQR library running inside your browser tab. The decoded result — including any WiFi passwords, contact data, or URLs — never leaves your device and is never sent to any server. This makes the tool safe for scanning confidential QR codes such as internal company links, WiFi credentials, or private contact information.

Scan Any QR Code — Free, No Upload, No App

Camera or image upload, any device. Decodes URLs, WiFi passwords, vCards, and more — entirely in your browser. Nothing sent to any server.