tessl install tessl/github-zxing-cpp--zxing-cpp@2.3.0Open-source, multi-format linear/matrix barcode image processing library implemented in C++
ZXing-C++ ("zebra crossing") is an open-source, multi-format barcode image processing library for C++. It reads and writes barcodes in 20+ formats including QR codes, Data Matrix, Aztec, PDF417, and all common linear barcodes (UPC, EAN, Code 128, etc.).
ZXing#include "ZXing/ReadBarcode.h"
auto image = ZXing::ImageView(data, width, height, ZXing::ImageFormat::Lum);
auto options = ZXing::ReaderOptions().setFormats(ZXing::BarcodeFormat::Any);
auto barcodes = ZXing::ReadBarcodes(image, options);
for (const auto& barcode : barcodes) {
if (barcode.isValid()) {
std::cout << barcode.text() << "\n";
}
}#include "ZXing/WriteBarcode.h"
ZXing::CreatorOptions options(ZXing::BarcodeFormat::QRCode);
auto barcode = ZXing::CreateBarcodeFromText("Hello World", options);
auto svg = ZXing::WriteBarcodeToSVG(barcode);namespace ZXing {
// Reading
Barcode ReadBarcode(const ImageView& image, const ReaderOptions& options = {});
Barcodes ReadBarcodes(const ImageView& image, const ReaderOptions& options = {});
// Writing (experimental)
Barcode CreateBarcodeFromText(std::string_view contents, const CreatorOptions& options);
Barcode CreateBarcodeFromBytes(const void* data, int size, const CreatorOptions& options);
std::string WriteBarcodeToSVG(const Barcode& barcode, const WriterOptions& options = {});
Image WriteBarcodeToImage(const Barcode& barcode, const WriterOptions& options = {});
}class ImageView {
ImageView(const uint8_t* data, int width, int height, ImageFormat format,
int rowStride = 0, int pixStride = 0);
int width() const;
int height() const;
ImageView cropped(int left, int top, int width, int height) const;
ImageView rotated(int degree) const;
};
class Barcode {
bool isValid() const;
const Error& error() const;
BarcodeFormat format() const;
std::string text() const;
const ByteArray& bytes() const;
const Position& position() const;
int orientation() const;
};
class ReaderOptions {
ReaderOptions& setFormats(BarcodeFormats v);
ReaderOptions& setTryHarder(bool v);
ReaderOptions& setTryRotate(bool v);
ReaderOptions& setTryInvert(bool v);
ReaderOptions& setMaxNumberOfSymbols(uint8_t v);
};UPC-A, UPC-E, EAN-8, EAN-13, Code 39, Code 93, Code 128, Codabar, ITF, GS1 DataBar (all variants), DX Film Edge
QR Code, Micro QR Code, rMQR Code, Aztec, Data Matrix, PDF417, MaxiCode
| Format | Description | Bytes/Pixel |
|---|---|---|
Lum | Grayscale | 1 |
RGB | Red-Green-Blue | 3 |
BGR | Blue-Green-Red (OpenCV) | 3 |
RGBA | RGB + Alpha | 4 |
BGRA | BGR + Alpha | 4 |
| Option | Default | Description |
|---|---|---|
formats | None | Barcode formats to detect |
tryHarder | true | Spend more time for accuracy |
tryRotate | true | Try 90/180/270° rotations |
tryInvert | true | Try inverted colors |
tryDownscale | true | Downscale large images |
maxNumberOfSymbols | 255 | Max barcodes to find |
| Type | Description |
|---|---|
None | No error |
Format | Decoding/format error |
Checksum | Checksum validation failed |
Unsupported | Unsupported feature |
BarcodeFormat::LinearCodes // All 1D formats
BarcodeFormat::MatrixCodes // All 2D formats
BarcodeFormat::Any // All formatsZXING_EXPERIMENTAL_API=ON - Enable writing APIZXING_WRITERS=ON - Enable barcode writingZXING_READERS=ON - Enable barcode reading (default)ZXING_C_API=ON - Build C API wrapperOfficial wrappers available for: C, Python, Rust, Android (Java/Kotlin), iOS (Objective-C/Swift), .NET (C#/F#), WebAssembly, WinRT, Kotlin/Native
cv::Mat mat = cv::imread("image.jpg");
auto image = ZXing::ImageView(mat.data, mat.cols, mat.rows,
ZXing::ImageFormat::BGR, mat.step);
auto barcode = ZXing::ReadBarcode(image);ZXing::CreatorOptions opts(ZXing::BarcodeFormat::QRCode);
opts.ecLevel("H");
auto barcode = ZXing::CreateBarcodeFromText("https://example.com", opts);
auto svg = ZXing::WriteBarcodeToSVG(barcode);auto options = ZXing::ReaderOptions()
.setFormats(ZXing::BarcodeFormat::Any)
.setMaxNumberOfSymbols(10);
auto barcodes = ZXing::ReadBarcodes(image, options);auto barcode = ZXing::ReadBarcode(image);
if (!barcode.isValid()) {
std::cerr << "Error: " << barcode.error().msg() << "\n";
}tryRotate, tryInvert if not neededtryDownscale for high-resolution imagesconst std::string& ZXing::Version(); // Get library versionCurrent version: 2.3.0