QR Code Scanner
Read the content of a QR code from a screenshot or photo. Decoding happens locally in your browser, no image is uploaded, and links are offered as a
Drop your image file here
or click to browse files
Read the content of a QR code from a screenshot, a photo of a poster or a downloaded ticket. Add the image, and the decoded text appears immediately - links are offered as clickable results, so you can check where a code really points before opening it.
That is the useful part: a QR code is opaque until you scan it, and a sticker pasted over a legitimate code is a known attack. Decoding happens in your browser, so a screenshot of an internal document or a boarding pass is never uploaded.
How to read a QR code from an image
Add a screenshot or photo containing a QR code
Read the decoded content
Open the link or copy the text
FAQ
The scan found nothing - why?
The code is probably too small, blurred, cropped or photographed at an angle. Crop the image tightly around the code, avoid reflections on glossy paper, and keep the whole code with its quiet margin in frame.
Can it read several codes in one image?
The reader looks for the first code it can decode. Crop the image to isolate a specific code if a page contains several.
Does it work with inverted or coloured codes?
Light-on-dark inversion often fails because scanners expect dark modules on a light background. A very low-contrast or coloured code may also be rejected - convert it to black and white first.
Is it safe to scan an unknown code?
Scanning a picture reveals the link without opening it, so you can inspect it first. Treat any unexpected URL as suspicious and check the domain before continuing.
Does it read barcodes too?
This tool is for QR codes. Product barcodes use a different symbology and normally need a dedicated scanner.
Is my image uploaded?
No, decoding happens locally in your browser.
At a glance
| Input | image |
|---|---|
| Multiple files | No |
| Where it runs | In your browser - files are never uploaded |
| Works offline | Yes — once the page has loaded |
| Price | Free, no sign-up, no watermark |
Where conversions quietly break
Most conversion bugs are not about syntax, they are about meaning. A CSV column of postcodes loses its leading zeros the moment a spreadsheet guesses it is a number; a long ID exceeds floating-point precision; dates change meaning depending on whether they are day-first or month-first. JSON keys are unordered but arrays are not, and a tool that sorts keys changes nothing while one that sorts arrays changes the data. Unicode is another trap: text can arrive as UTF-8, UTF-16 or with a byte-order mark, and a decoder that guesses wrong turns accented characters into mojibake. Before trusting any conversion, spot-check the first and last row, any field with leading zeros, and any field containing quotes, commas or newlines.
Handling secrets safely
Developer tools process credentials more often than people realise, and the risk is not the algorithm but where the data goes. Hashing is one-way and is not encryption - MD5 and SHA-1 are broken for anything security-related, and even SHA-256 is the wrong tool for storing passwords, where bcrypt, scrypt or Argon2 exist precisely to be slow. Base64 is an encoding, not protection: anyone can decode it, so never treat it as obfuscation. A JWT can be read by anyone who holds it, which is why the payload must never contain secrets, and decoding a token does not verify its signature - verification requires the key. Everything on this site runs locally in your browser, which is the reason it can safely handle tokens and passwords at all.