How to scan a QR code from a picture
- Drop a screenshot or photo into the box above, choose one, or press Ctrl+V (Cmd+V on a Mac) to paste a screenshot straight from the clipboard.
- Or press Use camera and hold the code up to your webcam. The camera stops by itself as soon as a code is read.
- Each code found is numbered on the picture and listed underneath with what it contains: the site a link goes to, the network and password of a Wi-Fi code, the payee of a payment code.
- Copy the text, or press Open link once you are happy with where it goes. Several codes can be copied together or saved as a CSV list.
On a laptop, the screenshot route is usually the quickest: Win+Shift+S on Windows or Cmd+Shift+4 on a Mac, drag over the code, then paste it here. No file is saved anywhere.
A picture with more than one code
Concert tickets, boarding passes for a family, a sheet of product labels, a slide with a code for each link: plenty of pictures hold several QR codes, and most scanners return one of them or nothing at all. We tested why with jsQR, the open-source decoder this page is built on. A QR code is found by its three big corner squares, and with two or more codes in view the decoder pairs up squares that belong to different codes, then gives up.
| Test picture | Codes in it | jsQR on the whole picture | This page |
|---|---|---|---|
| One code, 400 × 400 | 1 | 1 | 1 |
| Two codes side by side | 2 | 0 | 2 |
| Two codes with the same link (two identical tickets) | 2 | 0 | 2 |
| Three codes in a row | 3 | 0 | 3 |
| Six codes in a 1920 × 1080 screenshot | 6 | 0 | 6 (about 2 seconds) |
| Light code on a dark background | 1 | 1, only when inverted reading is switched on | 1 |
| Code turned 25° | 1 | 1 | 1 |
Covering the first code and reading again does not help, because the first read already returns nothing. So this page looks for the patterned areas first: every QR code is surrounded by an empty margin, so the picture is split into separate busy regions at a few different scales, and each region is handed to the decoder on its own. Two codes with the same content in different places are counted twice, because two tickets are two tickets. The test pictures and the script are generated from the same QR library our QR Code Generator uses, so anyone can repeat them.
Where does the link really go?
A QR code hides its address until your phone opens it, which is why fake parking-meter
stickers, “your parcel is waiting” letters and emails asking you to scan a code to
keep your account are such a common trick. Here nothing opens by itself. Each link shows the
site it goes to, with the part that decides who owns it in bold — in
login.example.com.secure-check.net that is secure-check.net, not
example.com. The page also says when:
- The site name uses letters from another alphabet. A Cyrillic “а” looks identical to a Latin “a”, so a fake site can be spelled to look exactly like a real one. The page shows the name as it really is.
- A company name sits in front of an @. In
https://www.paypal.com@login-check.example/everything before the @ is ignored; the link goes to login-check.example. - The link uses a shortener or a QR redirect service. The real destination is decided when the link is opened, so neither you nor this page can see it in advance.
- The address is a bare number instead of a site name, uses plain http, carries a second address inside it, or points straight at an app or a file to download.
These checks read the address, not the site behind it. A clean result means the address is what it looks like, not that the site is honest — you still need to recognise the name in bold.
What else a QR code can hold
| Code type | What the page shows |
|---|---|
| Wi-Fi | Network name, password and security type, with a button to copy the password |
| Contact card (vCard, MeCard) | Name, phone, email and company, and a .vcf file to add to your contacts |
| Calendar event | Title, start, end and place, and an .ics file for your calendar |
| UPI payment (India) | The UPI ID and name that would be paid, and the amount if it is fixed |
| SEPA transfer (EPC, Europe) | Payee, IBAN, amount and reference |
| Two-factor login key (otpauth) | Account and issuer; the secret itself is masked on screen |
| Email, phone, text message, map location | The address or number, with a button that opens the right app |
| Plain text or binary data | The text, or the bytes in hex when it is not text |
Two of these deserve a pause. A screenshot of a two-factor setup code is as good as the key itself, so delete it once the account is in your authenticator app. And a UPI code always pays out: nobody needs you to scan a code, or type your PIN, for you to receive money.
When a code will not read
A QR code is a grid of small squares, and the reader needs about two pixels for each one. A code that is tiny inside a large screenshot, or photographed from across a room, may simply not have that many. Zoom in before taking the screenshot, or take the photo closer and straight on, with no glare across the code. A PNG saved with a transparent background is put on white before reading, because see-through pixels are read as black and the code becomes a black square. If you made the code yourself and it fails here, test it before printing with our QR Code Generator, which reads back every code it makes.