.NET开源库Net.Codecrete.QrCodeGenerator专用于针对字符串和字节数组生成二维码,其使用简单,适合需要快速集成二维码生成功能的各种项目。其主要特点包括以下几点:
.1)支持按照QR Code Model 2标准生成全部40个版本(尺寸)以及全部4个纠错等级的二维码;
.2)支持输出二维码原始模块/像素数据、SVG、XAML Path、PNG和BMP文件等多种格式;
.3)自动计算最优分段模式,使生成的二维码尺寸尽可能小;
.4)支持手动创建数据分段,同时支持将长文本分割到多个链接的二维码中(即结构化附加功能)。
Net.Codecrete.QrCodeGenerator库内最重要的类为QrCode,它代表一个包含文本或二进制数据的二维码,具备从编码生成到渲染输出的完整功能,支持QR Code Model 2标准的所有版本(1-40)、4种纠错等级和4种编码模式。QrCode类的主要属性及函数介绍如下表所示:
| 序号 | 名称 | 类型 | 说明 |
|---|---|---|---|
| 1 | EncodeText | 静态函数 | 基于指定的纠错等级将文本编码为二维码 |
| 2 | EncodeTextAdvanced | 静态函数 | 基于多种参数(包括纠错等级、版本等)将文本编码为二维码 |
| 3 | EncodeTextInMultipleCodes | 静态函数 | 基于指定的纠错等级和版本将本文分割到多个链接的二维码中 |
| 4 | EncodeBinary | 静态函数 | 将字节数组编码为二维码 |
| 5 | EncodeSegments | 静态函数 | 将多个数据片段编码为二维码 |
| 6 | Version | 属性 | 二维码的版本号(1-40),决定二维码的尺寸 |
| 7 | Size | 属性 | 二维码的尺寸(像素/模块数) |
| 8 | ErrorCorrectionLevel | 属性 | 二维码使用的纠错等级,从枚举值Ecc内取值(0~3 |
| 9 | Mask | 属性 | 使用的掩码模式编号(0-7),用于优化二维码的可读性 |
| 10 | GetModule | 函数 | 获取二维码中指定坐标处的颜色,返回结果值为true是深色,值为false是浅色) |
| 11 | ToSvgString | 函数 | 将二维码渲染为SVG矢量图字符串 |
| 12 | ToGraphicsPath | 函数 | 将二维码渲染为SVG或XAML中支持的Graphics Path数据 |
| 13 | ToRectangles | 函数 | 返回二维码中的深色块对应的长方形对象集合 |
| 14 | ToBmpBitmap | 函数 | 返回BMP格式的二维码图片数据 |
| 15 | ToPngBitmap | 函数 | 返回png格式的二维码图片数据 |
最后是使用示例,前几个是直接用的参考文献2中的示例,最后一个是编写测试生成分割长文本的多链接二维码(生成效果见截图)。
csharp
// 基于文本生成二维码
var qr = QrCode.EncodeText("Hello, world!", QrCode.Ecc.Medium);
string svg = qr.ToSvgString(4);
File.WriteAllText("hello-world-qr.svg", svg, Encoding.UTF8);
// 基于字节数组生成二维码
byte[] data = {
0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00,
0x01, 0x00, 0x80, 0x01, 0x00, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x0a,
0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x4c,
0x01, 0x00, 0x3b
};
var qr = QrCode.EncodeBinary(data, QrCode.Ecc.Medium);
string svg = qr.ToSvgString(4);
File.WriteAllText("bytearray-qr.svg", svg, Encoding.UTF8);
// 生成分割长文本的多链接二维码
try
{
List<QrCode> qrCodes = QrCode.EncodeTextInMultipleCodes(textBox1.Text, QrCode.Ecc.High,40);
Console.WriteLine($"自动分割为 {qrCodes.Count} 个关联二维码");
string savePath = Path.Combine(Environment.CurrentDirectory, "QRCodes");
Directory.CreateDirectory(savePath);
for (int i = 0; i < qrCodes.Count; i++)
{
string filePath = Path.Combine(savePath, $"QRCode_{i + 1}_of_{qrCodes.Count}.png");
File.WriteAllBytes(filePath, qrCodes[i].ToPngBitmap(4));
}
Console.WriteLine("所有二维码生成完成!");
}
catch (Exception ex)
{
Console.WriteLine($"生成失败:{ex.Message}");
}

参考文献:
1https://github.com/manuelbl/QrCodeGenerator
2https://codecrete.net/QrCodeGenerator/api/index.html
3https://www.keyence.com.cn/ss/products/auto_id/barcode_lecture/basic_2d/qr/