It reads a QR code and shows you what is inside. Give it a picture that contains a code, from a file, a screenshot, the clipboard or a drag and drop, or point your device's camera at one. The decoded text appears at once. If the text is a known kind of thing, such as a Wi-Fi network, a contact card or a web address, the tool also lays it out as a small table so you can read it without squinting at raw characters.
Everything happens in your browser. The picture is decoded on your device and is never uploaded, and the camera picture is not recorded or sent anywhere. The camera is switched off as soon as a code is found, when you press Stop, and when you leave the page.
How to use it
- Choose a picture, drop one on the page, or paste a copied image (a screenshot works well). The result appears in a moment.
- Or press Scan with camera, allow the camera when your browser asks, and hold the code steady inside the frame. The first code it recognises is shown and the camera stops.
- Copy the text, or use the button that fits the kind of code: Open link, Open map, Write e-mail, Call number or Save as .vcf.
The camera needs a secure page (https) and your permission. If it is blocked or missing, the tool says so and you can still choose a picture instead. A picture with several codes in it lists them all when your browser can find more than one.
What it understands
| In the code | What you see |
|---|
| A web address | The domain, port, path and each query parameter, plus warnings |
|---|
WIFI:T:WPA;S:name;P:password;; | Network name, password, security type and whether it is hidden |
|---|
| A vCard or MECARD | Name, company, phones, e-mails, address, note, and a .vcf download |
|---|
mailto:, tel:, sms:, geo: | The address, number, message or coordinates |
|---|
otpauth:// | The account, issuer, algorithm, digits and period of an authenticator setup |
|---|
| Anything else | The text exactly as it was stored |
|---|
The Wi-Fi format escapes the characters \, ;, ,, : and " with a backslash, and the tool undoes that, so a password such as a;b\c is shown as you would type it.
Links are shown, never opened
A QR code can hold any address, and you cannot tell by looking at it which one. Printed codes are sometimes covered with a sticker that points somewhere else, and a link may imitate a familiar site. So this tool never opens anything by itself. A web address is shown in parts (the real domain is the part just before the first single slash), with warnings when it is not encrypted (http), uses an international look-alike domain (it starts with xn--), carries a user name or password before the domain, or is just an IP number. Text that starts with javascript:, data: or file: is shown as plain text and gets no open button at all.
Check the domain, then press Open link yourself. It opens in a new tab with no information passed to the page you came from. If the code is a QR for a payment, a login or an app install, be as careful as you would be with a link in an unexpected message.
If a code will not scan
- Too blurry or too far away. Each dark or light square in the code needs to be at least a couple of pixels wide. Take the picture closer, or crop it to the code with the image crop tool.
- No empty border. The standard asks for a quiet zone of four squares around the code. A code cropped right up to its edge can fail.
- Glare, a curved surface or a steep angle. Photograph the code straight on, and tilt the page away from lights.
- Light code on a dark background. The tool tries both polarities, so this is usually fine, but very low contrast is not.
- A barcode, not a QR code. This tool reads QR codes only. For making linear barcodes see the barcode generator.
A QR code carries error correction, so a code that is partly scratched, folded or covered can still be read: the four levels can repair roughly 7, 15, 25 or 30 percent of the code. To make your own, use the QR code generator.
How it reads the picture
If your browser has a built-in barcode detector, the tool uses it first because it is fast and works on camera frames. Many browsers do not have one, so a small open-source decoder (jsQR, about 57 KB compressed) is loaded the first time it is needed. A large photo is tried at its own size and then smaller, because a code that fills a twelve-megapixel photo is easier to find in a reduced copy. The decoder runs on your device, so the same picture gives the same answer here as anywhere else.