Read a barcode from an image
Drop in a photo, or point your camera at a barcode, and get the decoded format and text back instantly — every symbology this site can generate, decoded entirely on your device.
Drop a barcode photo here, or click to choose one
PNG, JPG, WebP, or GIF — or paste an image with Ctrl+V / Cmd+V. Decoded on this device; nothing is uploaded.
What this reader can decode
This page reads back every symbology the rest of BarcodeSheets can generate — Code 128, Code 39, EAN-13, EAN-8, UPC-A, UPC-E, ITF-14, and GS1-128 — plus 2D formats like QR Code and Data Matrix, and a good deal more besides (Aztec, PDF417, Codabar, DataBar, and others) via the same open-source zxing-cpp decoder used by a lot of native scanning apps. If an image has more than one barcode in it, every one that decodes cleanly is listed, each with its format, its decoded text, and its own copy button — not just the first match.
How decoding works — entirely in your browser
The decoder is a WebAssembly build of zxing-cpp, loaded once from this site and run locally on whatever image you give it — a dropped file, a pasted screenshot, or a live camera frame. None of that ever touches a server: there's no upload step to wait on, no image stored anywhere, and camera mode grabs frames straight off the video feed into an in-memory canvas rather than recording or transmitting anything. Close the tab and it's gone, exactly like the barcode generator on this site never uploads what you type into it either.
Getting a clean scan from a photo
Most failed decodes come down to the same handful of fixable things: a blurry or out-of-focus shot, the barcode too small in frame for the decoder to resolve individual bars, glare or a shadow crossing the symbol, or the quiet zone — the blank margin required on each side — cropped out of the picture. Fill the frame with the barcode, use even lighting without a direct reflection off the surface, and hold the camera steady; a slightly imperfect angle is usually fine, but motion blur rarely is. Camera mode keeps scanning every quarter-second until it gets a clean read or you stop it, so small repositioning between attempts is often all it takes.
Decoding a number isn't the same as owning it
Reading a barcode back to its underlying digits or text is purely mechanical — it says nothing about whether that number is registered to anyone, valid for retail sale, or assigned at all. A UPC or EAN that scans successfully here could still be a duplicate, an unregistered placeholder, or someone else's real GTIN. If you're building labels for products you plan to sell, generate new codes with the bulk generator and get any GTIN you need to be unique properly issued through GS1 rather than assuming a number that scans is a number you're free to use.
Frequently asked questions
How can I read a barcode from a picture?
Can I scan a barcode from a screenshot?
Is there a free barcode reader online?
Why is my barcode not scanning?
What barcode types can this reader decode?
Is decoding a barcode the same as owning that number?
Keep going
Generate a Code 128, EAN-13, UPC, or QR code, then bring the image back to this page to confirm it reads back correctly.
Bulk barcode generatorCSV, Excel, or a pasted list — generate a whole batch, then spot-check any of them here.
Barcode won't scan?Decoding fine here but failing at a register? The causes are almost always print-side.