Scan barcodes from images or camera. Supports EAN-13, EAN-8, UPC-A, UPC-E, Code 128, Code 39, ISBN, and more. Search products instantly.
Read barcodes from images or live camera input. Supports common barcode formats including EAN-13, UPC-A, Code 128, Code 39, and QR codes. Upload a photo of a barcode or point your camera at one to decode the value instantly.
Related reading
Initializing in your browser…
Scan QR codes from images or using your camera. Supports URLs, WiFi, contacts, emails, phone numbers, and more. 100% offline - no data uploaded.
Test how your images and designs appear to people with different types of color vision deficiency including protanopia, deuteranopia, tritanopia, and more
Crop and trim images with precision visual selection. Features aspect ratio presets (1:1, 16:9, 4:3), free-form cropping, grid overlays, and pixel-perfect adjustments for professional results.
You need the digits behind a product barcode in a photo to look up the item.
Input
package.jpg (EAN-13 barcode)
Decoded
Type: EAN-13 Value: 4006381333931
The reader detects the symbology and decodes the bars to their numeric value, including the check digit, so you can verify or look up the product. Multiple formats (EAN, UPC, Code 128, QR) are recognised automatically.
Read barcodes from images or live camera input. Supports common barcode formats including EAN-13, UPC-A, Code 128, Code 39, and QR codes. Upload a photo of a barcode or point your camera at one to decode the value instantly.
Scan a product barcode to get its identifier for price comparison or inventory tracking.
Decode barcodes from photos of warehouse labels or shipping packages.
Extract barcode values from scanned documents or forms.
The Barcode Reader decodes 1D linear barcodes through a three-stage fallback pipeline rather than a single library. It first tries the browser's native BarcodeDetector API (available in Chrome) configured for nine symbologies: ean_13, ean_8, upc_a, upc_e, code_128, code_39, code_93, codabar, and itf (Interleaved 2 of 5). If the native API is unavailable or finds nothing, it loads html5-qrcode via scanFileV2, which has stronger Code-128 handling. As a final fallback it loads @ericblade/quagga2 and re-attempts the decode three times with progressively different locator patch sizes (medium, then large, then small, each with halfSample disabled and locate enabled, inputStream size 800), since the right patch size depends on how large the barcode appears in the frame. Quagga is run with nine readers (ean_reader, ean_8_reader, upc_reader, upc_e_reader, code_128_reader, code_39_reader, code_93_reader, codabar_reader, i2of5_reader). When all three stages fail it reports 'No barcode found in the image' and suggests a clearer image or different angle.
Beyond raw decoding, the tool classifies what it scanned and links out for lookup. An EAN-13 value beginning with 978 or 979 is recognized as a book and labeled 'Book (ISBN-13)', a UPC-A code (or an EAN-13 starting with 0) is labeled as a retail product, and other EAN-13/EAN-8 values are tagged as international products; each result gets a 'Search Product' button that opens a Google query (e.g. 'ISBN 978...', 'UPC ...', 'EAN ...'). The decoded value is also re-rendered as a clean barcode image using JsBarcode (width 2, height 80, value displayed), mapping the scanned format back to JsBarcode's EAN13/EAN8/UPC/UPCE/CODE128/CODE39/CODE93/codabar/ITF formats, with a CODE128 fallback for any value the strict format rejects. Every scan is appended to a 'Recent Scans' history capped at the last 20 entries, each copyable to clipboard.
A camera mode is included for live scanning: it requests getUserMedia with facingMode 'environment' (rear camera) at an ideal 1280x720, draws each video frame to a canvas in a requestAnimationFrame loop, and runs the same detection on the frame (BarcodeDetector first, Quagga2 as fallback), stopping the stream on the first successful read. A SwitchCamera control toggles between the rear ('environment') and front ('user') cameras. All scanning happens locally in the browser via these client-side libraries and the canvas/Image APIs; images and camera frames are processed in-page and not uploaded. Because these are 1D linear symbologies with no error correction, the in-app error tip notes that the barcode should be clearly visible, straight, and undamaged for a reliable read.
EAN-13, EAN-8, UPC-A, UPC-E, Code 128, Code 39, ITF, and QR codes.
It works best with clear, well-lit images. Moderate damage or blur may still decode, but heavily degraded barcodes may fail.
QR codes are supported. For other 2D formats like Data Matrix, results may vary.
Images are decoded, edited, and exported entirely inside this browser tab. No originals, exports, or metadata are uploaded.