FIRST CH TOOLS / Other / 46 QR CODE READER

QR Code Reader

Drop in a picture of a QR code and read the text it actually holds. If it is a URL, nothing is opened: the scheme, domain and path are laid out separately so you can judge the destination first. That makes it a way to check a suspicious code on a flyer, a parking sign or a piece of post without visiting it. Decoding runs inside this page and the image is never uploaded.

QR code image
Drag & drop an image here or click to choose a file (PNG / JPEG / WebP / GIF / AVIF — pasting a screenshot works too)

For a code that is already on your screen, a screenshot pasted with ⌘/Ctrl+V is the quickest route. For a photo, crop so that the code fills most of the frame with a little white left around it.

How to Use

  1. Add the imageDrag & drop it, click to choose a file, or paste with ⌘/Ctrl+V. Codes that are rotated, or printed white-on-black, still read.
  2. Read the contentsThe stored text appears as it is. For a URL, look at the domain before anything else. A name you do not recognise, a plain http link, or odd characters in the domain are all reasons to stop right there.
  3. Open it only if you want toPress "Open in a new tab" once you are satisfied. Nothing happens until you do. Copy the text if you need to keep a record.

About This Tool

The image is analysed inside this page. It is drawn onto a canvas, the finder patterns are located from the light/dark boundaries, the perspective is corrected back into a grid of modules, Reed–Solomon error correction repairs the damaged parts, and the bits are turned back into text. No API and no reading server is involved, so a QR code holding an internal URL or a client's contact details never leaves your device. The decoding is done by jsQR (Apache-2.0), bundled with this site.

URLs are not opened for you. A QR code hides its contents by design, and a reader app that jumps straight to the link gives you no chance to look at it. This tool separates the two steps and breaks the URL into scheme, domain, path and query. Disguises that rely on the browser discarding everything before an "@" (https://well-known-brand.example@another-domain/ goes to the second one), internationalised domains mixing scripts, bare IP addresses, link shorteners and unencrypted http are each called out. For javascript: and data: links no open button is offered at all.

A note listed here does not mean the code is malicious — and an empty list is not proof that it is safe, since legitimate domains do get compromised. What is shown are only the facts that can be read off the URL string itself; the link is never fetched to inspect what is behind it (doing so would break the promise that nothing leaves your device). The last judgement is whether that code belongs where you found it.

Wi-Fi and contact formats are parsed too. WIFI: (network name, security, password, hidden flag), MECARD: and vCard contacts, mailto:, tel:, SMSTO: and geo: are listed field by field alongside the raw string. If a Wi-Fi password is stored in the clear, you are told before you share your screen.

Japanese text that would otherwise be garbled is handled. Byte mode carries no encoding declaration, and codes produced by Japanese devices or older apps often hold Shift_JIS. A plain decode turns those into blanks, so this tool keeps the recovered raw bytes, checks whether they are valid UTF-8, and falls back to Shift_JIS when they are not (the same test used by Encoding & Line Ending Converter). When a fallback happens, the encoding is shown in the breakdown.

To create a QR code instead, use QR Code Generator (SVG / PNG download, with Wi-Fi and email templates). To strip tracking parameters off a URL you decoded, see URL Parameter Editor; to shrink the image itself, WebP Converter.

When nothing is found

Crop closer to the code

In a photo taken from a distance, one module (a single square) can be a couple of pixels wide, and the grid cannot be recovered. Crop until only a little white remains around the code. Screenshots, which usually have plenty of resolution, read almost as they are.

Glare, shadows and creases

Glossy printing reflects the light and blows out whole modules. Retaking the photo at a different angle is the reliable fix. How much damage a code survives depends on the error correction level it was made with, which the reading side cannot change.

Include the quiet zone

Readers use the white margin around a code to find its edges. Codes squeezed by a layout, or with text printed right against them, are harder to read. Frame the shot so that the white border is included.

More than one code in the picture

When an image holds several QR codes, only the first one found is read. Crop the picture down to the code you actually want.

Barcodes (EAN / UPC) are not supported

This tool reads QR codes only. Striped retail barcodes and other 2D symbologies such as DataMatrix or PDF417 are out of scope.

Other Tools