QR Code Decoder
{{ validCount }} / {{ totalItems }} decoded
Invalid: {{ invalidCount }} · Duplicates pruned: {{ dupePrunedCount }}
{{ sourceLines().length }} line(s) {{ fileThumbs.length }} image(s) Dedupe: {{ dedupe ? 'On' : 'Off' }} Try harder: {{ tryHarder ? 'On' : 'Off' }} Also inverted: {{ alsoInverted ? 'On' : 'Off' }} Angles: {{ angles.sort((a,b)=>a-b).join('°, ') }}° Downscale ≤ {{ downscaleMax }} px Timeout {{ timeoutMs }} ms Concurrency {{ maxConcurrent }}
Images / URLs / data URIs:
{{ recentNotice }}
{{ t.name }} {{ (t.size/1024).toFixed(0) }} KB
# Source Status Type Content Bytes Format Charset EC ZX Bits Raw Angle° Scale Inv WxH Copy
{{ row.idx }} {{ row.sourceLabel }} {{ row.valid ? 'OK' : (row.error || 'Error') }} {{ row.derivedType || '—' }} {{ row.text || '—' }} {{ row.bytes || '—' }} {{ row.format || '—' }} {{ row.charset || '—' }} {{ row.ec || '—' }} {{ row.zx || '—' }} {{ row.bits !== '' ? row.bits : '—' }} {{ row.raw !== '' ? row.raw : '—' }} {{ row.angle !== '' ? row.angle : '—' }} {{ row.scale !== '' ? row.scale : '—' }} {{ row.inv || '—' }} {{ row.wh || '—' }}

  

Introduction:

Quick Response (QR) codes are two‑dimensional barcodes that store text or structured payloads in small square modules. When people say QR, they usually mean a matrix symbol you scan to retrieve readable content. Use this decoder when you need to decode QR codes from images and URLs without installing software for quick checks and batch reviews.

You provide pictures from your device by dropping them in or selecting them, or paste image links, data URIs, or long base64 lines when files are not handy. The decoder returns readable text plus helpful context such as the kind of content, character set, bytes, and error correction hints. You can export rows to a table or structured JSON for auditing or reuse.

Imagine a shipping label that hides a short link and a second code that encodes Wi‑Fi settings. You drop a screenshot or paste the image address and see one row that shows a URL and another that shows a Wi‑Fi payload you can review. Check destinations and text before you open or share anything, and treat unknown codes with care.

You can nudge accuracy by rotating candidates, trying inverted light on dark codes, or scanning at a few scales when needed. For galleries and pasted lists, run batches with measured concurrency and optionally remove duplicates so reviews stay tidy. These choices balance speed with coverage and let you focus on what the codes actually say.

Technical Details:

Behind the scenes, a dual‑engine pipeline rasterizes each image into pixel data and tests multiple pass combinations depending on your settings. The decoder may downscale large edges to a working canvas, rotate by allowed angles, and optionally try light on dark inversion. Each pass first attempts a QR reader that returns metadata including character set, error correction level, bits, raw bytes length, and barcode format. If that fails, a secondary reader searches for a plain data string. Successful hits are recorded with the pass parameters and byte counts derived using UTF‑8. Batches run with bounded concurrency so order remains stable while throughput improves on multi‑core devices.

Processing Pipeline:

  1. Collect sources from queued files and from non‑empty text lines.
  2. Turn each file or line into an HTML image element.
  3. Apply a per‑item timeout when configured.
  4. Choose a base scale from the maximum edge and any downscale cap.
  5. Build pass combinations from selected angles and the inversion flag.
  6. Add reduced‑scale passes when “try harder” is enabled.
  7. Rasterize each pass to a canvas frame.
  8. Run a QR decoder that can yield text and metadata.
  9. Fallback to a secondary data reader if needed.
  10. Record bytes, charset, format, and pass parameters for hits.
  11. Optionally remove duplicates by identical text or identical error.
  12. Execute tasks with limited concurrency and preserve original order.

Symbols & Units:

Symbols and units used by the decoder
Symbol Meaning Unit/Datatype Source
W,HRaster frame width, heightpxDerived
aRotation angledegreesInput
sScale factor per passunitlessDerived
tPer‑image timeoutmsInput
cMax concurrencytasksInput/Derived
invInversion attemptbooleanInput
dDe‑duplicate rowsbooleanInput
bytesLength of decoded textbytesDerived
bitsEncoded bit countbitsDerived
rawRaw byte lengthbytesDerived
ZXBarcode format labelstringDerived
ECError correction levelstringDerived
CSCharacter setstringDerived

Variables & Parameters:

Input parameters and their effects
Parameter Meaning Unit/Datatype Typical Range Sensitivity Notes
De‑duplicate Remove identical OK texts or identical errors boolean off or on Low Neutral when off
Try harder Add extra reduced‑scale passes boolean off or on Medium Adds more attempts per image
Also scan inverted Test light on dark codes boolean off or on Medium Helps inverse designs
Angles Rotations to attempt set 0°, 90°, 180°, 270° High More angles increase coverage
Downscale max edge Cap the longest image edge px 0 or positive integer Medium 0 keeps original size
Per‑image timeout Abort slow image loads ms 0 or positive integer Medium 0 means no timeout
Max concurrency Parallel decode limit integer 0 auto yields 1–4 Medium Higher values may help on multi‑core

Constants & Coefficients:

Decoder constants
Constant Value Source Notes
Allowed angles[0, 90, 180, 270]CodeOrder normalized ascending
Scale levels[1, 0.85, 0.7]CodeExtra levels only when “try harder”
Auto concurrency1–4 tasksCodeDerived from hardware threads

Units, Precision & Rounding:

  • Decimal separator is a dot. Scale values display with two decimals.
  • Byte counts use UTF‑8 encoding via a standard text encoder.
  • Displayed values use JavaScript’s built‑in rounding for fixed decimals.
  • Thumbnail sizes display in kilobytes as whole numbers.

Validation & Bounds Extracted from Code:

Inputs with types, limits, and helper text
Field Type Min Max Step/Pattern Error Text Placeholder
Images file input, multiple accept="image/*" read_error, img_error Drop or browse
Downscale max edge number 0 step 1 0 = original size
Per‑image timeout number 0 step 100 timeout 0 = no timeout
Max concurrency number 0 step 1 0 = auto (1–4)
Angles checkboxes allowed: 0, 90, 180, 270

I/O Formats & Encoding:

Accepted inputs and produced outputs
Input Accepted Families Output Encoding/Precision Rounding
Local image files PNG, JPEG/JPG, WebP, GIF Decoded text with metrics UTF‑8 bytes; scale shown to 2 decimals Fixed decimals via built‑in rounding
Remote image URLs http(s) ending .png .jpg .jpeg .gif .webp .bmp .svg Decoded text with metrics Loaded in browser with cross‑origin hints As above
Data URIs data:image/* Decoded text with metrics Rendered directly in the browser As above
Bare base64 line [A–Z a–z 0–9 + / =], length > 64 Wrapped as data:image/png Standard base64; decoded as PNG image As above
CSV / JSON export Rows or structured payload Includes inputs, totals, and items Scale to 2 decimals in CSV

Networking & Storage:

  • Processing occurs in your browser. Local files are not uploaded.
  • Remote image URLs are fetched by the browser using standard image loading.
  • No server endpoints, credentials, or API keys are used by the decoder.
  • Concurrency is bounded; tasks complete deterministically in stable order.

Performance & Complexity:

  • Per‑pass decoding is roughly linear in pixel count of the raster frame.
  • Total attempts scale with angles × inversion states × scale levels.
  • Auto concurrency picks a small pool to match available hardware threads.
  • Large images may be downscaled to reduce memory and increase throughput.

Diagnostics & Determinism:

  • Common error texts include “No QR found”, “Unsupported line”, “img_error”, “read_error”, “timeout”, and “Decode failed”.
  • Order of results matches the input order even with concurrency.
  • Duplicate pruning uses exact text or exact error matching.

Security Considerations:

  • Decoded text is displayed for review; nothing is auto‑opened.
  • Be cautious with links and commands embedded in codes.
  • Some hosts block pixel reads; such images cannot be inspected client‑side.

Worked Example:

Input: one image URL line https://example.com/offer-qr.png.

Settings: angles 0° and 90°, try harder on, inverted off, downscale cap 1600 px, concurrency 3.

s=0.85a=90°

Result: one OK row with type URL, a readable link, byte length, format label, error correction level, pass angle, and raster size.

bytes=|UTF8(text)|=42

Assumptions & Limitations:

  • Focuses on QR symbols; barcode types outside this family are not targeted.
  • Only the first detectable code per pass is reported.
  • Heads‑up Remote images may be blocked by cross‑origin policy.
  • Animated images are treated as a single frame.
  • Heads‑up Duplicate removal is exact text or exact error match.
  • Bits and raw byte length may be unavailable on some successful reads.
  • Timeout applies to image loading, not to pixel decoding once loaded.
  • SVG rasterization and very large bitmaps depend on browser limits.

Edge Cases & Error Sources:

  • Very low contrast or glossy glare reduces detection reliability.
  • Severe perspective skew without the chosen angle can hide a hit.
  • Inverted designs require the inversion option for best results.
  • Partial occlusion or tiny modules may defeat decoders.
  • Short or mixed‑alphabet base64 lines are treated as unsupported.
  • Non‑image links fail with image load errors.
  • Cross‑origin blocks cause canvas read failures and error rows.
  • Corrupted files or timeouts surface as explicit error texts.

Privacy & Compliance:

Files are processed locally in your browser; nothing is uploaded. When you paste an external image link, your browser fetches that image directly; the app does not store or transmit decoded data to a server.

Step‑by‑Step Guide:

Start with a single image or a batch. Then refine passes only if needed.

  1. Add pictures under Images or drop them into the pane.
  2. Paste image URLs, data URIs, or base64 lines into Text.
  3. Click Decode to run the batch.
  4. Enable Try harder or Also inverted if hits are missing.
  5. Tick needed Angles for rotated captures.
  6. Optional Cap size, set timeouts, or adjust concurrency for large sets.
  7. Review rows, then copy or export CSV/JSON.

Example: Paste two PNG links and tick 0° and 90°. One row shows URL with readable text; the other shows Text content. Export CSV for a quick audit log.

  • Use duplicates off when you need every attempt recorded.
  • Increase angles before trying inversion on dark themes.

FAQ:

Is my data stored?

No. Decoding happens in your browser. Local files are read directly, and pasted links load as images without sending results to a server.

What inputs are supported?

Image files, image URLs that end with common extensions, data:image URIs, and long base64 lines that become PNG images are accepted.

How accurate is it?

Accuracy depends on contrast, resolution, rotation, and design. Try angles, reduced scales, and inversion when the first pass fails.

Can I work offline?

Local files and data URIs decode in the browser. External image links require a network connection to load the image.

Why does a URL fail?

Some sites block pixel access across origins. In those cases the browser cannot expose image data for decoding.

What do CSV and JSON include?

They include your input settings summary, totals, and rows with text, bytes, character set, format label, error correction level, angle, and raster size.

How are duplicates handled?

When enabled, duplicates are pruned by exact text for OK rows or exact error text for failed rows.

Do I need an account?

No sign‑in is required. You can decode and export immediately.

Troubleshooting:

  • No results on a clear code: enable angles and try harder.
  • Dark design fails: enable the inversion option.
  • Large photos stall: set a downscale cap and a timeout.
  • Remote link fails: download the image and use it as a file.
  • CSV looks misaligned: open with UTF‑8 and respect quoted fields.

Advanced Tips:

  • Tip Add only needed angles to reduce extra passes.
  • Tip Use a modest downscale to speed up very large photos.
  • Tip Keep batches organized by clearing rows between distinct tasks.
  • Tip Copy all decoded text to move results into scripts or notes.
  • Tip Prefer crisp, in‑focus images to minimize retries.

Glossary:

QR code
Matrix barcode with black and white modules.
Data URI
Inline image string beginning with data:image/….
Base64
Text encoding for binary data using 64 symbols.
Error correction level
Label indicating redundancy used in the symbol.
Charset
Declared character encoding of decoded text.
Raster
Pixel grid produced for decoding passes.
Concurrency
Number of decoding tasks running in parallel.
Inversion
Attempt with light modules on dark background.
UTF‑8 bytes
Length of text measured in UTF‑8 encoded bytes.
CSV
Comma‑separated values file for tabular export.