QR Code Scanner

Scan QR codes using your camera, upload an image, or paste from clipboard. Instant results with scan history.

Click "Start Camera" to begin scanning

Drag & drop an image here

or click to browse

Scan Result
No QR code detected yet

Scan History

How the QR Code Scanner Works

This scanner decodes QR codes entirely in your browser using the jsQR JavaScript library. No images or camera data are ever sent to a server. The tool supports three input methods -- live camera, image upload, and clipboard paste -- so you can scan QR codes from any source without installing an app.

In camera mode, the scanner captures video frames at the device's native frame rate and passes each frame to the jsQR decoder. When a valid QR code pattern is detected, the decoded content appears instantly in the result panel. The tool automatically identifies the data type (URL, email, phone number, text) and shows relevant action buttons such as "Open Link" for URLs or "Copy" for text.

How to Scan QR Codes

Choose one of three scanning methods depending on where your QR code is.

  1. Camera scanning: Click "Start Camera" and point your camera at the QR code. Detection is automatic and continuous -- no need to press a capture button. The result appears as soon as the code is recognized.
  2. Upload image: Switch to "Upload Image" tab and drag & drop or click to select a QR code image from your device. Supported formats include PNG, JPG, GIF, BMP, and WebP.
  3. Paste from clipboard: Copy a QR code image from any application (screenshot, email, chat) and click "Paste from Clipboard" to scan it instantly.
  4. View result: The decoded content appears in the result panel with smart action buttons based on content type.
  5. Take action: Open URLs directly in a new tab, copy decoded text to clipboard, or click a history entry to reload a previous scan.

Supported QR Code Types

This scanner decodes all standard QR code data types. Here is what happens when you scan each type.

  • URL (https://...): The scanner shows an "Open Link" button that opens the URL in a new browser tab. The full URL is displayed for verification before clicking.
  • Email (mailto:...): Decoded as an email address with optional subject and body. Copy the address or open your default email client.
  • Phone (tel:...): Shows the phone number for copying. On mobile devices, tapping the number initiates a call.
  • SMS (sms:...): Displays the phone number and pre-filled message text. On mobile, opens the messaging app.
  • WiFi (WIFI:T:WPA;S:...;P:...;;): Shows the network name and security type. On supported devices, tapping offers to connect to the network.
  • vCard (BEGIN:VCARD): Displays contact fields. On mobile, offers to add the contact to your address book.
  • Plain text: Any other encoded data is displayed as plain text with a copy button.

QR Code Scanner Features

  • Live camera scanning: Real-time QR code detection using your device camera at native frame rate.
  • Multi-camera support: Choose between front and back cameras on mobile devices using the camera selector dropdown.
  • Image upload: Drag & drop or browse to upload QR code images in PNG, JPG, GIF, BMP, or WebP format.
  • Clipboard support: Paste QR code images directly from clipboard -- useful for scanning screenshots or images from chat apps.
  • Smart actions: Automatically detects URLs, emails, phone numbers, WiFi credentials, and vCards, showing context-appropriate action buttons.
  • Scan history: Stores up to 50 recent scans with timestamps in your browser's local storage. Click any entry to reload its content.
  • Privacy-focused: All scanning happens entirely in your browser using client-side JavaScript. No camera feed, images, or decoded data are transmitted to any server.

Troubleshooting Scanner Issues

  • Camera not starting: Ensure the site is loaded over HTTPS. Check that you granted camera permission when prompted by the browser. On iOS Safari, camera access must be re-granted per session.
  • QR code not detected from camera: Hold the camera steady and ensure the entire QR code is visible within the frame. Good lighting and a flat surface improve detection. Avoid extreme angles.
  • Uploaded image not decoding: Ensure the image is clear and the QR code is not too small, blurry, or heavily compressed. Minimum recommended QR code size in the image is 100x100 pixels.
  • Clipboard paste not working: Some browsers restrict clipboard access. Try using Chrome or Edge, and ensure you copied an actual image (not a file reference). The page must be in focus when you click "Paste from Clipboard".

QR Code Scanning Technology Deep Dive

Understanding the technical mechanisms behind QR code scanning helps troubleshoot common issues and optimize your QR code designs for maximum readability across diverse devices and environments.

How Optical Recognition Works

QR code scanning operates through a multi-stage computer vision pipeline. First, the camera captures a digital image consisting of pixels with RGB color values. The scanning algorithm converts this to grayscale, then applies adaptive thresholding to separate black modules from white background, accounting for variable lighting conditions.

Next, the decoder identifies the three position markers (large squares in corners) which establish the QR code's orientation and scale. Alignment patterns (smaller squares) compensate for perspective distortion when scanning at angles. Timing patterns (alternating black-white rows) determine module grid density. Once the grid is mapped, Reed-Solomon error correction algorithms reconstruct the original data even if up to 30% of modules are damaged or obscured.

This tool uses the jsQR JavaScript library, which implements these algorithms efficiently in WebAssembly for near-native performance in the browser. Frame processing runs at 30-60 FPS on modern hardware, providing real-time detection without latency.

Camera Resolution and Scanning Distance

The minimum QR code size detectable by a camera depends on sensor resolution and optical zoom. A 1080p webcam (1920x1080 pixels) scanning a QR code that occupies 200x200 pixels in the frame can reliably decode codes up to Version 10 complexity (57x57 modules). Each module consumes approximately 3.5 pixels, providing sufficient sampling for accurate recognition.

For smartphone cameras with 12MP+ sensors, even small QR codes (1 cm at 30 cm distance) decode successfully. However, budget webcams with 480p resolution (640x480 pixels) struggle with codes smaller than 3 cm at typical desk distances (50 cm). If your camera fails to scan, move closer or increase the QR code's physical size in your design.

Autofocus mechanisms on smartphone cameras continuously adjust lens position to maximize sharpness, enabling reliable scanning from 5 cm to 100+ cm. Webcams typically use fixed focus optimized for video conferencing (50-100 cm range), limiting close-up scanning. For best results with webcams, position the QR code 40-60 cm from the camera.

Lighting Conditions and Exposure Compensation

QR code scanning requires sufficient contrast between foreground and background modules. In dim lighting, camera sensors amplify gain (ISO sensitivity), introducing noise that corrupts module boundaries. Overexposed images from bright lighting wash out contrast, making black modules appear gray.

Modern camera APIs provide automatic exposure compensation, but scanning algorithms can enhance tolerance. This tool accepts QR codes even when contrast drops to 3:1 (below the recommended 4:1), though reliability decreases. If scanning fails in poor lighting, increase ambient light or enable a desk lamp behind the camera (front lighting creates glare on glossy surfaces).

For printed QR codes on reflective materials (laminated cards, glossy brochures), tilt the material slightly to redirect specular reflections away from the camera lens. Matte finishes provide the most consistent scanning performance across lighting conditions.

Advanced QR Code Scanning Use Cases

Extracting Data from Screenshots and Documents

Business workflows often involve scanning QR codes from non-physical sources: PDF documents, email attachments, web pages, or mobile app screenshots. Upload mode handles these scenarios by accepting image files in PNG, JPG, GIF, BMP, and WebP formats.

Screenshot workflow example: A remote worker receives a conference badge PDF via email. They open the PDF, take a screenshot of the QR code section (Windows: Win+Shift+S, Mac: Cmd+Shift+4), then upload the screenshot to this scanner. The decoded result provides the registration URL without needing to print the badge.

For batch scanning of documents containing multiple QR codes, open each page as an image, crop around one code, scan, repeat. Alternatively, use image editing software to extract individual codes before scanning. This tool decodes one QR code per image; multiple codes in a single image will decode whichever the algorithm detects first.

Scanning Damaged or Partially Obscured QR Codes

Reed-Solomon error correction enables QR codes to remain functional even when physically damaged. The four correction levels (Low 7%, Medium 15%, Quartile 25%, High 30%) determine how much of the code can be missing or corrupted while still decoding successfully.

Common damage scenarios include scratched packaging, faded printing, torn labels, and liquid stains. If a QR code fails to scan due to damage, try these techniques:

  • Enhance contrast: Use a photo editing app to increase brightness and contrast before uploading.
  • Remove obstructions: Digitally erase minor stains or marks using a photo editor's clone stamp tool.
  • Scan from multiple angles: Physical obstructions may block fewer modules when viewed from different perspectives.
  • Clean the surface: Wipe dirt or residue from printed codes before scanning.

If damage exceeds the error correction level, the code becomes unrecoverable. This is why high-value applications (product authentication, payment codes) use High error correction.

Privacy and Security Considerations for Scanned QR Codes

Scanning a QR code from an untrusted source can expose you to security risks. QR codes frequently encode URLs, and visiting a malicious URL can trigger drive-by downloads, phishing attacks, or browser exploits. Always review the decoded URL before clicking "Open Link".

This scanner displays the full URL in plain text, allowing you to verify the domain before visiting. Watch for suspicious patterns:

  • URL shorteners: bit.ly/xxx or tinyurl.com/xxx obscure the final destination. Hover over the link or use a URL expander service to preview before clicking.
  • Typosquatting: amaz0n.com (zero instead of 'o') or paypa1.com (numeral 1 instead of 'l') mimic legitimate sites. Verify exact spelling.
  • Unusual TLDs: .tk, .ga, .ml are free domains frequently used by scammers. Exercise caution.
  • Excessive query parameters: Long strings of random characters after ? may indicate tracking or session hijacking attempts.

This tool operates entirely client-side using JavaScript. No scanned QR code data, camera feed, or uploaded images are transmitted to any server. Your scan history is stored only in your browser's local storage and can be cleared at any time.

Browser Compatibility and Technical Limitations

Camera API Support Across Browsers

This scanner uses the MediaDevices.getUserMedia() API to access your camera. Browser support is universal on modern versions:

  • Chrome/Edge 53+: Full support including camera selector for devices with multiple cameras.
  • Firefox 36+: Full support. May require explicit permission grant per session on mobile.
  • Safari 11+ (iOS/macOS): Requires HTTPS. iOS Safari requests camera permission per page load due to privacy restrictions.
  • Opera 40+: Full support, identical to Chrome implementation.

On iOS devices, camera access requires HTTPS and user interaction to initiate (clicking "Start Camera"). Safari enforces strict privacy policies that prevent background camera access or automatic recording. After scanning, click "Stop Camera" to release the device, allowing other apps to use the camera.

Image Upload Format and Size Constraints

Upload mode accepts the following image formats via browser's native decoding: PNG, JPG/JPEG, GIF (first frame only), BMP, and WebP (where supported). Maximum file size is limited by browser memory allocation, typically 10-20MB for images. Attempting to upload files exceeding this triggers an out-of-memory error.

For optimal performance, resize images to maximum 2000x2000 pixels before uploading. The decoding algorithm processes every pixel; excessively large images (e.g., 4K photos from high-end smartphones) consume unnecessary processing time without improving accuracy. Use image editing software to crop around the QR code before uploading for fastest results.

Frame Rate and Real-Time Detection Performance

In camera mode, the scanner processes frames as quickly as the jsQR decoder can analyze them. On high-end desktop hardware (modern CPU with 8+ cores), frame processing reaches 60 FPS with sub-17ms latency. Budget laptops and older smartphones process 15-30 FPS.

Frame rate impacts scan speed: at 60 FPS, a QR code held steadily in frame is detected within 1-2 frames (17-33ms). At 15 FPS, detection may require 3-5 frames (200-333ms), creating perceptible lag. This scanner automatically adapts to device capabilities; no configuration is needed.

Frequently Asked Questions

The scanner uses the jsQR JavaScript library to decode QR codes directly in your browser. In camera mode, it continuously captures video frames and analyzes each frame for QR code patterns. In upload mode, it processes the image you provide. All decoding happens client-side, so no image data is sent to any server. The tool supports all standard QR code formats including URLs, text, email, SMS, WiFi, and vCard data.

Camera access requires HTTPS and browser permission. Make sure you are accessing the site over HTTPS and that you have granted camera permission when prompted. On mobile devices, check that no other app is using the camera. If you have multiple cameras, try switching between them using the camera selector dropdown. Some browsers may also block camera access in private or incognito mode.

This scanner reads all standard QR codes regardless of the data they contain. It can decode URLs, plain text, email addresses (mailto), phone numbers (tel), SMS messages, WiFi network credentials, vCard contact cards, calendar events, and any other data encoded in QR format. The scanner automatically detects the content type and shows appropriate action buttons, such as an "Open Link" button for URLs.

Yes, all scanning happens entirely in your browser. No camera feed, uploaded images, or decoded results are transmitted to any server. Scan history is stored only in your browser's local storage and can be cleared at any time. This makes the tool safe for scanning QR codes that contain sensitive information like WiFi passwords or personal contact details.

Yes, switch to the "Upload Image" tab to scan QR codes from any image file. You can drag and drop an image, click to browse for a file, or paste an image directly from your clipboard. The scanner supports all common image formats including PNG, JPG, GIF, and BMP. This is useful for scanning QR codes received via email, messaging apps, or screenshots.

Scan history appears automatically in the right panel below the scan result. The tool stores up to 50 of your most recent scans with timestamps. Click any history entry to reload its content. You can clear all scan history using the "Clear History" button. History is saved in your browser's local storage, so it persists between visits but is not shared across devices.

Yes, the camera mode works with any physical QR code including printed documents, product packaging, business cards, posters, and labels. Position the QR code 40-60 cm from your webcam for optimal focus. Ensure good lighting and avoid glare from glossy surfaces by tilting the material slightly. For smartphone cameras, you can scan from much closer distances (5-30 cm) due to superior autofocus capabilities.

Camera access requires HTTPS and explicit browser permission. Check that you clicked "Allow" when prompted for camera access. If you accidentally clicked "Block," open your browser settings, navigate to Site Permissions or Privacy settings, find this site, and grant camera permission. On iOS Safari, camera permission must be granted each time you visit. Ensure no other application is using your camera simultaneously. Try refreshing the page and clicking "Start Camera" again.