四时宝库

程序员的知识宝库

在CSharp中使用zxing类库实现二维码的生成和解析

  ZXing是一个开源项目,由Java实现,主要提供二维码的生成和识别功能。支持类型有:QR Code, PDF 417, EAN, UPC, Aztec, Data Matrix, Codabar等。后续作者移植到.NET平台,进行 了许多优化和改进,在CSharp中可以直接使用 ZXing.Net 库来实现二维码的生成和解析功能。

应用步骤如下:

1. 安装 ZXing.Net 库:

通过 NuGet 包管理器在 Visual Studio 中安装 “ZXing.Net” 包和“ZXing.Net Bindings for Windows Compatibility”包。



还可以使用包管理器控制台执行以下命令:

Install-Package ZXing.Net
Install-Package ZXing.Net Bindings for Windows Compatibility

2. 生成二维码:

使用 ZXing 的“BarcodeWriter”类来生成二维码。可以设置二维码的格式、大小、前景色和背景色等。

引入命名空间

using ZXing;
using ZXing.Common;
using ZXing.QrCode;
using ZXing.QrCode.Internal;
using ZXing.Windows.Compatibility;

生成Bitmap,可以设置二维码的高度,宽度,编码格式等信息。

        public static Bitmap CreateQrCode1(string data, int width, int height)
        {
            var writer = new BarcodeWriter
            {
                Format = BarcodeFormat.QR_CODE,
                Options = new QrCodeEncodingOptions
                {
                    DisableECI = true,
                    CharacterSet = "UTF-8",
                    Width = width,
                    Height = height,
                    Margin = 0,
                    ErrorCorrection = ErrorCorrectionLevel.L
                }
            };
            var bitmap = writer.Write(data);
            return bitmap;
        }

将Bitmap转为ImageSource,可在Image中显示。

        public ImageSource ChangeBitmapToImageSource(Bitmap bitmap)
        {
            IntPtr hBitmap = bitmap.GetHbitmap();
            return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                hBitmap,
                IntPtr.Zero,
                Int32Rect.Empty,
                BitmapSizeOptions.FromEmptyOptions());
        }

3. 集成到 WPF 或 Windows Forms 应用程序:

可以在 WPF 或 Windows Forms 应用程序中显示生成的二维码。可以将生成的二维码图像设置为图片框(PictureBox)的图像,或者在 WPF 中使用“Image” 控件显示。

WPF的xaml

 <Image  x:Name="imgQRCode" Width="100" Height="100"/>

C#实现

imgQRCode.Source = ChangeBitmapToImageSource(CreateQrCode1("Hello World", 100, 100));


4. 解析二维码:

使用 ZXing 的“BarcodeReader” 类来解析二维码图像。你可以处理图像文件或图像流。

public  string DecodeQRCode(string filePath)
{
    // 创建一个BitMatrix对象,该对象表示二维码的位矩阵
    BitMatrix bitMatrix = new BitMatrix();
    // 使用文件流读取二维码图片
    using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
    {
        BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedSource(stream)));
        // 创建二维码解码器
        QRCodeReader qrCodeReader = new QRCodeReader();
        // 解码二维码
        Result result = qrCodeReader.Decode(binaryBitmap, new ResultPointCallback(point => { }));
        // 获取解码结果
        string resultText = result.GetText();
        return resultText;
    }
}

调用“DecodeQRCode”方法

 string filePath = "path_to_your_qrcode_image.png";
string decodedText = DecodeQRCode(filePath);

在这个例子中,定义了一个DecodeQRCode方法,它接受二维码图片的文件路径作为输入,并返回解码后的文本。我们使用BinaryBitmap类来读取二维码图片的位矩阵,然后使用QRCodeReader类来解码二维码。最后输出文本。在使用时替换filePath变量的值为实际二维码图片文件路径。

通过上述步骤,使用 C# 和 ZXing.Net ,可以轻松实现二维码的读写功能。另外,这个库提供了许多高级选项,比如定制生成的二维码,包括调整其大小、边距、错误纠正等级等。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接