Welcome to the QR and barcode recognition-and-generation tool. Please upload any photo that contains a barcode or QR code—we can convert it into the same symbol as a cleaner, sharper image.

Working...

Type and Data

Data

QR options & tips

Workflow: Upload or paste an image in the left column; the decoder uses the primary detected symbol. Edit Data in the middle column if needed. Generate refreshes the preview in the right column whenever you want, as long as Data is not empty. Re-decode sits on the upload area (bottom-right): it runs decode again on the current image without opening the file picker.

Code types: Compact buttons list symbologies. QR Code is rendered with Python qrcode. QR Code (ZXing) uses zxing-cpp (pip install zxing-cpp). Code 93, UPC-E, PDF417, Data Matrix, Aztec are also generated with zxing-cpp. The decoder often reports QRCODE for both QR engines; choose the encoder you want when regenerating. 1D linear types take width from Code size and bar height from Bar height.

Code size (right): Output size in pixels. For QR and other 2D codes this sets the bitmap side. For 1D (vertical-bar) codes it mainly controls width.

Bar height (1D only): Shown only for linear barcodes (Code 128, I25, Code 39, EAN/UPC, Codabar, …). It sets how tall the bars are in the preview box and in the downloaded PNG. QR, PDF417, Data Matrix, and Aztec do not use this control.

Density: QR Model 2 version V → (21+4(V-1)) modules per side. Auto picks the smallest version that fits the payload.

ECC level: L / M / Q / H — stronger correction reserves more modules and changes the pattern.

Mask: Patterns 0–7 (or Auto) alter module placement for the same bytes; try different values to match another printed QR.

Linear barcodes: By default the PNG has no text under the bars. Check Show under text in image to draw it. Text font uses real .ttf files on the server (not browser/CSS names): DejaVu is bundled; Arial/OCR/Courier need system fonts or files you place in the project fonts/ folder (e.g. fonts/Arial.ttf, fonts/OCRAEXT.ttf).

Code 128 (A / B / C): Plain Code 128 is “auto”: the library may switch A/B/C to shorten the symbol (like “Code 128 Auto”). Code 128-A / -B / -C follow common online tools (e.g. free-barcode.com): Start A/B/C and no mid-data cross-set switches (so e.g. 128-B keeps numeric runs in set B instead of compressing to set C). Set A disallows lowercase; set B disallows set-A-only controls; set C is digits only. For GS1 + FNC1 use GS1-128 (FNC1).

I25 (ITF): Decoders label Interleaved 2 of 5 as I25 or ITF. That is a two-width numeric code (digits in pairs), not Code 128 and not Industrial 2 of 5. Regeneration uses standard I25: the decoded digits as-is, no extra check digit, no ITF-14 bearer bars, wide/narrow ratio 2.5 (typical printed range is 2.0–3.0). Other type buttons encode the same digits in a different symbology, so those images will not match the original I25.

Same-type copy: Decoder names (pyzbar I25, ZXing ITF, OpenCV EAN_13, ISBN-13, …) are mapped onto the matching generate button. A failed generate does not silently become Code 128. Code 39 encodes the decoded characters as-is (no extra Mod 43 check digit). Codabar is drawn directly (python-barcode has no Codabar class). ISBN-13 is regenerated as EAN-13. Types the app cannot draw (e.g. GS1 DataBar) show an error instead of a wrong symbol.

Auto-refresh: When Data is not empty, changing Code types, Code size or Bar height (sliders after release), Density, ECC level, Mask, or linear under-bar options refreshes the preview the same way as Generate.

Sharp output: With a fixed density, set Code size to a multiple of (cells per side) when you can (assumes ISO 4-module quiet zone).

Pixel match: Payload must match byte-for-byte. Different libraries or settings can still produce visually different QR images.

No code generated yet. Upload or paste an image, then click Generate.
Code size
320 px
Enlarged code image