mini-tools.dev icon

mini-tools.dev

QR Code Reader

Decode QR codes from uploaded images or your device camera — all processing happens in your browser.

Click to upload or drag and drop

PNG, JPG, GIF, WebP

Result

Scan or upload a QR code to see the result

How QR code decoding works

Decoding a QR code from an image is an image-processing task. The decoder first converts the image to grayscale and applies a threshold to produce a binary (black/white) version. It then searches for the three finder patterns — the distinctive square markers in three corners of every QR code — to locate and orient the code. Once found, it samples the module grid, applies Reed-Solomon error correction to recover any damaged data, and decodes the binary data back into the original text or bytes.

This tool uses the jsQR library, which performs all of these steps in JavaScript running in your browser. Your images and camera feed are never uploaded to any server.

Why QR reading sometimes fails

Not every QR code image decodes successfully. Common reasons:

  • Blur — the most common cause of failure. Camera shake, out-of-focus lens, or a screenshot taken at low resolution all reduce the sharpness of module edges, making it hard to determine which modules are black and which are white.
  • Low contrast — codes printed on colored backgrounds, with light-colored modules, or in conditions with glare and shadows may not have enough contrast for reliable detection.
  • Extreme angle — QR codes can be decoded from moderate angles, but highly skewed or perspective-distorted images may fail. Hold the camera parallel to the code surface.
  • Damage or obstruction — torn codes, logos that are too large (covering more than the error correction level allows), or fingerprints over a critical area can push beyond the code's recovery capacity.
  • Very small code in a large image — if the QR code is a tiny portion of a large image, the module resolution may be too low. Crop the image to the QR code before uploading.

Tips for capturing a clear QR code

  • Hold the camera steady and wait for autofocus to lock before capturing.
  • Ensure even, diffuse lighting — avoid direct sunlight or strong shadows that create glare or high-contrast areas outside the code.
  • Fill the camera frame with the QR code — it should occupy at least 50% of the image area.
  • For screenshots on a phone: increase screen brightness before screenshotting a QR code on another device.
  • If a scanned image fails, try cropping it tightly around the code and re-uploading.

QR code security warning

QR codes are just a way of encoding data — often a URL. Scanning a QR code from an untrusted source (sticker on a parking meter, random poster, link in an email) is equivalent to clicking an unknown link. This is a real attack vector known as QRLjacking — attackers print fake QR codes over legitimate ones in public places, or paste them in phishing messages, directing victims to malicious websites that harvest credentials or deliver malware.

Before navigating to a URL decoded from a QR code, review it in the result field first. Look for typosquatted domains (paypa1.com instead of paypal.com), unexpected URL shorteners, and mismatches between what a code claims to link to and the actual decoded URL.

Supported QR code types

QR codes can encode more than just URLs. Common types you may encounter:

  • URL — the most common type. Starts with http:// or https://.
  • Plain text — any arbitrary text string.
  • vCard — contact information. Starts with BEGIN:VCARD.
  • WiFi — network credentials. Format: WIFI:T:WPA;S:Name;P:Password;;
  • Email — opens a mail compose window. Format: mailto:address@example.com
  • SMS — opens the messages app. Format: smsto:+1234567890:Message text
  • Payment — various formats including GoPay, OVO, Dana, and other regional payment QR standards.