Skip to content
ImgKiloImgKiloOpen tools

QR Code Scanner

QR code scanner with webcam and image upload

Decode a QR code in your browser. Use the webcam for live scanning or upload a photo of the QR. jsQR runs locally; nothing is uploaded. The decoded payload is labelled by scheme (URL, Wi-Fi, vCard, mailto, etc.) so you know what you scanned.

Decode a QR code

Use your webcam or upload a photo of the QR. The decoded text appears on the right.

  • Files never leave your device
  • Runs in your browser
  • Free, no signup

How it works

  1. 1

    Pick camera or upload

    Live webcam scan, or pick a photo of the QR. Both run jsQR in the browser.

  2. 2

    Wait for a lock

    Camera mode auto-detects every frame. Uploads decode immediately on selection.

  3. 3

    Read and act on the payload

    Decoded text is shown with the scheme label. Copy, open the URL, or scan again.

What this QR scanner does

Local jsQR decoder

Pure JavaScript, runs in your browser. The camera stream and uploaded images stay on your device.

Scheme-aware labels

URL, Wi-Fi, vCard, mailto, tel, SMSTO, geo, UPI, ICS, plain text. The result tells you what kind of QR you scanned.

Camera plus upload

Live camera for the fast case; image upload for low light, glare and other tricky prints.

Where this helps

QA

Verify your own printed QRs

Scan the print before mass-mailing. Confirm the decoded payload is what you encoded.

Safety

Check sketchy public QRs

Decode without opening. Read the URL first, decide if it is worth tapping Open.

Desktop

Decode QRs from screenshots

Upload a screenshot from a chat or email; decode without printing or scanning again.

Contacts

Copy contact details from a business card

Scan the vCard QR, copy the parsed fields, paste into Contacts.

Wi-Fi

Read Wi-Fi QRs without joining

Decode the password to paste into the join screen. Some travel routers need this.

Calendar

Verify event invites

Decode the ICS QR to read date, location and description before adding to your calendar.

Tips that help

  • 1

    Use upload for laminated prints

    Glossy laminate reflects light into the camera. A still photo with flash off decodes more reliably.

  • 2

    Hold steady, not close

    Phone cameras hunt for focus too near the lens. 15-20 cm is the sweet spot for most cameras.

  • 3

    Always read the URL before opening

    QR codes can point at phishing pages. The scheme label and full URL appear before the Open button.

  • 4

    Sharper photo, easier decode

    Higher resolution and good light beat tight cropping every time. Re-shoot if the first scan fails.

How the decoder reads a QR

QR codes encode their payload in a Reed-Solomon protected grid of dark and light modules. A scanner finds the three corner finder squares to lock orientation, walks the alignment markers, then reads the data modules in order. The decoder reconstructs missing or damaged modules with the redundancy bits the encoder reserved.

Camera mode samples every frame

When you click 'Use camera', the browser opens a `getUserMedia` stream from the back camera. The scanner copies each video frame onto a canvas, reads the pixels, and passes them to jsQR. jsQR finds the finder squares and decodes in one pass.

QR code scanner with webcam and image upload

We loop with `requestAnimationFrame` so the scanner runs at the camera's frame rate (typically 30 fps). As soon as a QR is detected, we stop the stream and show the result. Battery and bandwidth stay low.

If your camera is busy (another app or tab), the scanner falls back to an error. Close the other app and retry.

Image upload handles edge cases

Some QRs do not scan cleanly from a live camera: laminate glare, low light, heavy crop. For those, take a still photo and upload it.

The upload path tries both polarity inversions (`attemptBoth`), so a QR printed white-on-black decodes as readily as the standard black-on-white.

Resolution helps. A 1024×1024 photo decodes faster and more reliably than a 320×240 one. Most phone cameras produce 2000-3000 px wide images by default; those are fine.

Scheme classification routes the next action

After decoding, we inspect the prefix of the payload. `https://` becomes a URL with an Open button. `WIFI:` shows the credentials but cannot auto-join (browsers cannot configure system Wi-Fi). `BEGIN:VCARD` shows the contact fields; users can copy and paste into Contacts.

Payment URIs (`upi://`) display the deep link; on mobile the user can tap Copy and paste into a UPI app, but desktop browsers cannot launch UPI directly.

Read more

Plain text stays as plain text. Copy and paste into wherever you needed it.

Why scans fail

Print quality. A blurry print, glossy laminate or low contrast between dark modules and the background all reduce scan reliability. The finder squares need clean corners.

Camera focus. Mobile cameras hunt for focus near the minimum focus distance (about 10 cm). Hold the camera further away or use the upload path.

Encoding density. A long payload (vCard with photo, long URL) produces a dense QR with small modules. Print it bigger or shrink the payload.

Frequently asked questions

Honest answers to what people ask before using this tool.

Further reading

Independent references if you want to go deeper on the formats and tradeoffs.