filetity
LocalThe picture is decoded in this tab and never uploaded. What reads here is a clean image: a screenshot, a scan, or a label photographed flat and in focus. Perspective, blur and a code turned upside down are a camera pipeline rather than a decoder, and this is a decoder.

IMAGE -> NUMBER · Local tool

Barcode Scanner

Read a Code 128, EAN, UPC or EAN-8 barcode out of a picture, check digit verified.

Last updated

How do I scan a barcode from an image instead of with a camera?

Open the picture in filetity's barcode scanner and it reads the number out of the pixels. It handles Code 128, EAN-13, UPC-A and EAN-8, draws the line it read back over the picture so you can see where the number came from, and verifies the check digit before showing anything, so a read that does not add up is refused rather than displayed. It works on a screenshot, a scan or a code inside a PDF page you saved as an image, which is exactly what a phone scanner cannot point at. Everything happens in your browser and no picture is uploaded.

  1. 01 / Your device

    the file stays here

  2. 02 / Browser memory

    the work runs locally

  3. 03 / Back to you

    saved on this device

When you would use this

Situations, not settings.

A code in a PDF, an email or a screenshot
A phone scanner needs something to point at. This reads the image file you already have, which is the case a camera cannot cover.
Checking a barcode you generated actually says what you meant
Run the picture back through and read the number out. A wrong check digit is refused rather than shown, which is the failure that costs a print run.
Typing a long product number off a label by hand
Photograph the label square and in focus, and copy the digits instead. Thirteen digits transcribed by eye is where the error creeps in.

How it works / no cloud

A conversion engine, not an upload form.

The picture is drawn to a canvas and ten rows across its middle are read a pixel at a time. Each row gets its own light and dark threshold from that row's own brightest and darkest pixel, so a scan that is grey rather than black still splits correctly, and bar widths come from rounding each cumulative edge against the whole symbol's width, so a slightly stretched image does not accumulate error and drift out of the tables. Every read is then verified: Code 128's modulo-103 checksum and EAN's check digit are both recomputed, and a read that disagrees returns nothing at all. That refusal is the point. A barcode that decodes to the wrong number is worse than one that does not decode.

  • Offline ready
  • Installable app
  • No file limit queue

Straight answers

No accordion. Nothing hidden.

Is it free?
Yes, with no watermark and no page limit.
Does it need an account?
No. There is no account system.
Is my file processed on my device?
Yes. The file is read by your browser and never uploaded. There is no server to send it to.
What formats are supported?
Code 128, EAN-13, EAN-8 and UPC-A, from PNG, JPG, WebP, GIF, BMP or anything else your browser opens as an image. Out as plain text you can copy.
What are the limits?
A clean image: a screenshot, a flat scan, or a label photographed square and in focus. There is no perspective correction, no deblurring and no reading of a code that is upside down, so a photo of a shelf taken at an angle will not read. QR codes are a different shape and have their own page.
Does it work on mobile?
Yes, on any modern mobile browser. Large files are limited by the memory the phone gives the browser.
Does it work offline?
Yes, once the page has loaded. The tool keeps working with no network connection.
Why will my photo not read?
Almost always angle or focus. This reads bar widths along a straight line, so a code photographed from the side has bars that are wider on one end than the other and the widths stop matching the tables. Hold the camera square to the label, fill the frame with the code, and let it focus. A screenshot or a scan reads first time.
It found nothing, but I can see the barcode clearly. Why?
Two other causes. The code may be a symbology this does not read, such as Code 39, ITF-14 or a 2D code like Data Matrix. Or the read did happen and failed its own arithmetic, which is a refusal rather than a failure: a code whose check digit does not add up is not shown, because the alternative is handing you a number that is confidently wrong.
Why does a 13 digit code starting with zero come back as UPC-A?
Because the bars are identical. A UPC-A is an EAN-13 with a leading zero, and the two are encoded exactly the same way, so nothing in the picture says which was intended. The twelve digit form is reported since that is what a UPC-A label prints underneath itself.
Do I need a camera or an app?
No. This reads an image file, which is the case a phone scanner cannot handle: a code in a PDF, a screenshot of a ticket, a photo somebody emailed you. It runs in the page with no upload and no install.

Keep working locally

7 available · more coming