Investigate barcode scanning problems

Inspect an unreadable barcode and test which changes affect decoding. Image measurements provide clues; they cannot establish every failure cause. Your image stays on this device.

  1. Bring an image.Upload, drop a file, use a sample or capture a frame.
  2. Mark the problem area.Select a detected barcode or draw a box around the unreadable one.
  3. Understand & test.Review image evidence, retry the selected area, or continue in Parameter Tuner.

Loading a sample…

Image & barcode regions

If the barcode is unreadable or missing from the detected regions, draw a box around the whole symbol with a small clear margin. Image analysis does not require a successful decode.

Green: decoded. Orange: unconfirmed candidate. Blue: your selection. Choose a region below to inspect it.

Scanability report

Ready for an image

Run an analysis to see decoding evidence and capture recommendations.

What the statuses mean

Potential issue

A possible scanning risk. Review the evidence and recommended actions.

Measurement only

A measured value, without a pass or fail verdict.

Inconclusive

Not enough evidence to judge this issue. This does not count as a pass.

How to read this report

This is a software-based scanability diagnostic, not an ISO-certified barcode verifier or a print-quality grade. Decode success applies to this image and this reader's default settings; it does not guarantee other scanners will read it.

Manual selections are analyzed directly from image pixels, even if the reader fails. Contrast measures grayscale differences; broad brightness transitions can suggest soft edges, while dim lighter pixels can suggest poor lighting. These are possible contributing factors, not proof of why decoding failed. A rectangular box does not establish barcode format, module size, orientation or perspective. Include the complete symbol and a small clear margin; avoid large areas of unrelated background.

For detected symbols, the SDK supplies location, module size and rotation. Selection-border and quiet-zone estimates are separate: a manual box checks its inner border, while a localized symbol checks surrounding pixels. Neither verifies format-specific quiet-zone compliance. White paper can resemble glare, and valid patterns can resemble damage. Unknown values are never counted as passes.

The optional selected-area decode test uses an unmodified crop at original resolution. If it succeeds after a full-image failure, restricting the area changed the result; this does not prove the original cause. Image evidence remains available when crop decoding fails or the SDK cannot activate.

No images or decoded text are sent to analytics. The SDK downloads its engine and contacts Dynamsoft for license activation. The hosted demo uses the CodePool domain license; local and self-hosted previews use the SDK trial license.

SDK localization measurements · Generate a barcode test image · Barcode Parameter Tuner

What this scanability analyzer does

When a barcode will not scan, this page measures the image instead of guessing: contrast range, edge softness, margin and brightness, read straight from the source pixels. Draw a box around the symbol and it also runs five bounded experiments — crop, inversion, contrast stretch, rotation and enlargement — and reports which of them this reader decoded. It is a diagnostic preflight, not an ISO-certified verifier.

Worked example: what the numbers mean, and where each one stops

Every row in the report carries a status, and the status vocabulary is the important part: Potential issue is a possible scanning risk, Measurement only is a value with no verdict attached, and Inconclusive means the evidence was not there — it never counts as a pass. The thresholds below are the ones the page actually applies:

Heuristic thresholds as implemented in this page. They are practical prompts for recapture and tuning, not normative print-quality limits.
Measurement How it is taken What trips a cue
Edge transition width Nine scan lines per axis; monotonic changes of at least 40 grayscale levels count as transitions. The axis with the stronger total change is used. With at least eight transitions, a median 10–90% width over 3 px flags soft edges.
Sample density Transitions are sampled in source pixels. Profiles finer than 1.5 source pixels per sample are reported inconclusive rather than measured.
Surrounding margin Dark content in the inner border of a manual selection. Over 20% dark content with a grayscale range of at least 70 raises a selection/margin cue.
Contrast Percentile grayscale range and lighter-pixel brightness across the region. Always a measurement — the report never labels overall brightness as a pass.
Module size, angle, format Reported by the reader, only after it has decoded the symbol. Unknown until then. A drawn box never substitutes for symbol geometry.

That last row is the one people argue with. Selecting a region tells the page where to look; it does not tell it how wide a module is, which way the symbol runs or what format it is. Those three come from the decoder or they stay unknown, and an empty value is shown as unavailable rather than filled in from the box.

The default bundled sample produces a report before you draw anything:

{
  "sample": "multiple-symbologies-multiple-barcodes-9.jpg",
  "regions": {
    "decoded": 6,
    "unconfirmed": 1
  },
  "firstDecodedSymbology": "CODE_128",
  "measurementsReferTo": "original image"
}
Barcode Scanability Analyzer showing a product label, detected barcode regions and an image observations report
The default sample analysed in Chrome on 26 October 2026. Six regions decoded and one remained unconfirmed; the report describes measurements and suggested checks, not a pass or fail grade. The input is the bundled sample photo, reused from Parameter Tuner with its original provenance.

Failure case: the crop decodes, and that still is not the answer

The optional Try decoding selected area test crops the region at original resolution with default reader settings. If it succeeds after a full-image failure, one thing is established: restricting the scan area changed this reader's behaviour. It does not establish why the full image failed — a neighbouring symbol may have captured the localization, or the crop may simply have removed competing detail. The report says so instead of claiming a cause, and when every experiment fails it states that the failure is unexplained rather than nominating a suspect.

The five comparison tests are bounded on purpose: colour inversion, grayscale percentile stretch, a 90-degree rotation and 2× nearest-neighbour enlargement, each on the same selected area. Scaling is skipped when the output would exceed 8 megapixels, and a flat crop cannot be stretched at all. An unavailable test is reported separately from a test that decoded nothing.

Supported and not supported

Capability This tool
Input Bundled tuner samples, PNG/JPEG/WebP/BMP upload or drop, or a captured camera frame. Up to 30 MB and 24 megapixels; transparency is composited on white and original resolution is kept. Camera capture needs HTTPS or localhost and browser permission.
PDF, TIFF and large files PDF and TIFF are not accepted; rasterize the page to PNG or JPEG first. Accepted images are capped at 30 MB and 24 megapixels.
Analysis without a working decoder Manual region analysis reads source pixels directly, so it still works if the SDK cannot initialise, localize or decode.
Comparison experiments Five, each shown with the exact operation applied, the decoded text and the processing time.
Export JSON report: image findings, your selection coordinates and crop-test status. Unknown decode results are null, never false.
Handoff to the parameter tuner The selected image is passed through same-origin IndexedDB, consumed once and expired after an hour.
An overall quality grade Not offered. There is no aggregate score, and a clean measurement set does not certify a symbol.
Motion blur, glare, inversion or damage as diagnosed causes Not diagnosed automatically, and no placeholder metric is shown for them. Inversion is tested as an experiment instead.
Format-specific quiet-zone compliance Not established. The margin cue measures dark content around a box, which is not a quiet-zone measurement for any particular symbology.
Privacy and network Images stay in the browser and are not uploaded; decoded text never reaches analytics — though the downloaded report does contain it. The SDK contacts Dynamsoft for licence activation.

Use the tool, or build it into your app

Use the free hosted tool

No account and no key: the page activates a licence bound to dynamsoft.com. Upload the photo that would not scan at the till, in the warehouse or on the line.

Integrate it in your application

"Free" describes the hosted demo, not the source code. The measurements come from the SDK's localization results plus the page's own heuristics, so a self-hosted build needs its own licence.

Limits worth knowing before you rely on it

Can I use this report as an ISO verification grade?
No. ISO/IEC verification uses a calibrated device, a defined aperture and graded parameters. This is a software preflight on the pixels you have, which is useful before a recapture and not evidence in a compliance argument.
Why does a row say Inconclusive instead of passing?
Because the measurement was not available at usable resolution. A flat or low-contrast region may have no strong transitions at all, so softness cannot be judged even while contrast itself gives something actionable. Inconclusive is deliberately not a pass.
Why is the module size blank on my manually drawn box?
Module size is supplied by the reader after it localizes and decodes a symbol. A hand-drawn rectangle carries no symbol geometry, so the value stays unknown rather than being estimated from the box — an estimate there would look like evidence and be wrong.
Does a successful crop test mean the barcode is fine?
It means this reader decoded the cropped region with default settings. It does not reproduce your original failure cause, and it says nothing about the scanners your customers use.