C#测试调用Net.Codecrete.QrCodeGenerator库生成二维码的基本用法

  .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/

相关推荐
yivifu3 小时前
CSS 自动级联编号有序列表完全指南
前端·css·c#·html·有序列表·级联编号
Ws_3 小时前
C# 桌面端开发工程师面试题 + 参考答案
开发语言·面试·c#
周杰伦fans5 小时前
掌握 MVVM Light:.NET 桌面应用开发的 MVVM 利器,掌握 ObservableObject、RelayCommand 和 Messenger
c#·wpf
Ws_6 小时前
WPF 面试题 + 参考答案,偏 C# 桌面端开发高频。
开发语言·c#·wpf
曹牧17 小时前
C#:主线程能够捕获到子线程中的异常
开发语言·数据库·c#
jiayong231 天前
海量数据处理技术方案与实现原理
大数据·c#·linq
z落落1 天前
C# 类与对象、字段、静态与非静态+四大访问修饰符
开发语言·c#
魔法阵维护师1 天前
从零开发游戏需要学习的c#模块,第三十二章(Boss 战系统)
学习·游戏·c#