|

.NET C# 使用 ZXing.Net 生成二维码(QR Code)全面指南

ZXing.Net 是一款强大且开源的二维码与条形码处理库,支持生成与识别功能,适配 .NET Framework、.NET Core、Xamarin 等多种平台。以下内容将一步步教你如何用它生成二维码图像并灵活应用。

准备工作 —— 安装 ZXing.Net

在项目中通过 NuGet 安装 ZXing.Net,以及适配不同图形库的绑定包(如需使用 Bitmap):

  • 安装主要库:ZXing.Net
  • 若使用系统绘图(System.Drawing),还需安装 ZXing.Net.Bindings.Windows.Compatibility

安装后,即可在控制台、WinForms、ASP.NET 等项目中使用。

生成二维码图片(PNG)

以下是生成二维码的基本步骤:

using ZXing;
using ZXing.QrCode;
using System.Drawing;
using System.Drawing.Imaging;

string text = "Hello, ZXing.Net!";
var options = new QrCodeEncodingOptions {
    DisableECI = true,
    CharacterSet = "UTF-8",
    Width = 300,
    Height = 300
};

var writer = new BarcodeWriter {
    Format = BarcodeFormat.QR_CODE,
    Options = options
};

using Bitmap bitmap = writer.Write(text);
bitmap.Save("qrcode.png", ImageFormat.Png);

这段代码设置了二维码尺寸、字符编码等参数,生成一张 PNG 格式的二维码图像。

高级用法:SkiaSharp 输出与跨平台支持

若你的项目使用 SkiaSharp 而非 System.Drawing,可结合 ZXing.Net 和 SkiaSharp 输出二维码:

using ZXing;
using ZXing.SkiaSharp;
using SkiaSharp;
using System.IO;

SKBitmap GenerateQr(string url, int width, int height) {
    var options = new QrCodeEncodingOptions {
        DisableECI = true,
        CharacterSet = "UTF-8",
        Width = width,
        Height = height
    };
    var writer = new BarcodeWriter<SKBitmap> {
        Format = BarcodeFormat.QR_CODE,
        Options = options
    };
    return writer.Write(url);
}

var bmp = GenerateQr("https://example.com", 500, 500);
using var stream = new MemoryStream();
bmp.Encode(stream, SKEncodedImageFormat.Png, 100);
File.WriteAllBytes("qrcode_skia.png", stream.ToArray());

采用 SkiaSharp 渲染的方式易于在跨平台与移动项目中使用,支持灵活输出并注重性能。

自定义样式:背景色、前景色与边距

你可以在生成二维码时进一步定制样式。例如在 Unity 或类似环境中,可自定义色彩与边距:

using ZXing;
using ZXing.QrCode;
using ZXing.Rendering;
using UnityEngine;

var writer = new BarcodeWriter {
    Format = BarcodeFormat.QR_CODE,
    Options = new QrCodeEncodingOptions {
        Width = 256,
        Height = 256
    },
    Renderer = new Color32Renderer {
        Background = new Color32(255, 0, 0, 0), // 透明背景
        Foreground = new Color32(0, 255, 0, 255) // 绿色二维码主体
    }
};

Texture2D qrTex = new Texture2D(256, 256);
qrTex.SetPixels32(writer.Write("Custom Color QR"));
qrTex.Apply();

通过 Color32Renderer,你可以设置二维码前景与背景的颜色,甚至实现透明背景的效果。

生成 SVG 格式二维码

如果你需要输出矢量格式,可以使用 BarcodeWriterSvg 来生成 SVG 代码:

using ZXing;
using ZXing.Rendering;

var svgWriter = new BarcodeWriterSvg {
    Format = BarcodeFormat.QR_CODE,
    Options = new QrCodeEncodingOptions {
        Width = 300,
        Height = 300,
        PureBarcode = true
    },
    Renderer = new SvgRenderer()
};

var svgImage = svgWriter.Write("SVG QR");
string svgContent = svgImage.Content;
// 可将 svgContent 返回给客户端或保存为 .svg 文件

生成的 SVG 内容可直接嵌入网页或进一步打印,具备无损缩放的优点。

在 ASP.NET MVC 中集成示例

用 ZXing.Net 构建一个简单的二维码生成 Web 页面:

  • Controller 接收用户输入文本,使用 BarcodeWriterPixelData 生成二维码字节流。
  • 渲染成 Base64 后在 View 中内嵌显示。

该方案适合快速构建二维码 Web 生成器。

总结

  • 安装:通过 NuGet 安装 ZXing.Net 及必要绑定包。
  • 基本生成:使用 BarcodeWriter 和 QrCodeEncodingOptions 输出 PNG。
  • 跨平台支持:结合 SkiaSharp 使用 BarcodeWriter<SKBitmap>。
  • 样式自定义:利用 Color32Renderer 改变二维码颜色或背景。
  • 矢量输出:使用 BarcodeWriterSvg 生成 SVG 格式。
  • Web 集成:可直接在 ASP.NET MVC 中接受输入并实时渲染二维码。

ZXing.Net 入门简单、功能强大,适用于多种 .NET 技术栈。希望这篇教程能帮你在项目中轻松集成二维码生成功能。

评论