Mercurial > hgrepos > Python2 > PyMuPDF
diff mupdf-source/thirdparty/zxing-cpp/wrappers/dotnet/ZXingCpp/README.md @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mupdf-source/thirdparty/zxing-cpp/wrappers/dotnet/ZXingCpp/README.md Mon Sep 15 11:43:07 2025 +0200 @@ -0,0 +1,108 @@ +# ZXingCpp + +ZXingCpp is a .NET wrapper for the C++ library [zxing-cpp](https://github.com/zxing-cpp/zxing-cpp). + +It is an open-source, multi-format linear/matrix barcode image processing library implemented in C++. +It was originally ported from the Java ZXing library but has been developed further and now includes +many improvements in terms of runtime and detection performance. + + +## Usage Reading + +```cs +using SkiaSharp; +using ZXingCpp; + +public class Program +{ + public static void Main(string[] args) + { + var img = SKBitmap.Decode(args[0]).Copy(SKColorType.Gray8); + var iv = new ImageView(img.GetPixels(), img.Info.Width, img.Info.Height, ImageFormat.Lum); + + var readBarcodes = new BarcodeReader() { + Formats = args.Length > 1 ? Barcode.FormatsFromString(args[1]) : BarcodeFormats.Any, + TryInvert = false, + // see the ReaderOptions implementation for more available options + }; + + foreach (var b in readBarcodes.From(iv)) + Console.WriteLine($"{b.Format} : {b.Text}"); + } +} +``` + +Executing this sample code from the command line would look like this: +```sh +dotnet run -- <image-file-name> [barcode-format-list] +``` + +See also the [ZXingCpp.DemoReader](https://github.com/zxing-cpp/zxing-cpp/blob/master/wrappers/dotnet/ZXingCpp.DemoReader/Program.cs) +which shows the use of extension classes to support SkiaSharp and ImageMagick based input. + +The NuGet package includes the runtime/native c++ libraries for the x64 architecture on +Windows, Linux and macOS. If something is not working out of the box or you need arm64 support +then you need to build the `[lib]ZXing[.dll|.so|.dylib]` file yourself and make sure the .NET +runtime find it (see e.g. the environment variables `LD_LIBRARY_PATH` on Linux or `PATH` on +Windows). + +Note: This is an alpha release, meaning the API may still change slightly to potentially feel even +more like a native C# library depending on community feedback. + +## Usage Writing + +```cs +using ZXingCpp; + +public class Program +{ + public static void Main(string[] args) + { + var barcode = new Barcode(args[1], Barcode.FormatFromString(args[0])); + File.WriteAllText(args[2], barcode.ToSVG()); + } +} +``` + +Executing this sample code from the command line would look like this: +```sh +dotnet run -- <barcode-format> <text> <out-svg-file-name> +``` + +For an example how to write a PNG file instead of a SVG file, have a look at the +[ZXingCpp.DemoWriter](https://github.com/zxing-cpp/zxing-cpp/blob/master/wrappers/dotnet/ZXingCpp.DemoWriter/Program.cs). + +## Why ZXingCpp? + +There are a number of areas where ZXingCpp shines compared to other popular .NET barcode scanner libraries. +The following comparison is with respect to the open source [ZXing.Net](https://www.nuget.org/packages/ZXing.Net) +and the commercial [Dynamsoft](https://www.nuget.org/packages/Dynamsoft.DotNet.Barcode) projects. + +### Performance + +To compare the performance of ZXingCpp with the other two libraries, I started the project +[zxing-bench](https://github.com/axxel/zxing-bench). +The [README](https://github.com/axxel/zxing-bench/blob/main/dotnet/README.md) contains a few details but to get +an idea: ZXingCpp is on average 2x-10x faster than Dynamsoft and 10x-50x faster than ZXing.Net. + +### Detection rate + +The benchmarking tool also showed that ZXingCpp has a superior detection rate compared to ZXing.Net while it is +sometimes better sometimes worse than the commercial Dynamsoft package, depending on the sample type and the +library configuration. The latter definitively supports more barcode formats compared to the two ZXing decendents. + +### Ease of use + +The sample program above shows the simplicitly of the API. The others are similar but seem a bit more +complicated with regards to setting parameters. + +### Standards support + +ZXingCpp has full support for binary data and ECI handling and provides a standards conforming `bytesECI()` +data that can be used to simulate a hardware/handheld barcode scanner. This seems not the case for ZXing.Net +and is unclear for Dynamsoft. + +### License / costs + +ZXingCpp has the liberal Apache-2.0 license and is free to use in commercial applications. That said, +I accept [donations](https://github.com/sponsors/axxel) and might be available for commercial consulting ;).
