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/

相关推荐
花落人散处20 分钟前
C# 核心编程知识点总结:网络编程、委托与事件、异步编程与LINQ
c#
fl1768313 小时前
基于C#WPF实现的内存加速球清理类似360加速球内存清理
开发语言·c#·wpf
CoderIsArt5 小时前
OPC UA 完整介绍、官网、C# 简单使用
开发语言·c#
界面开发小八哥5 小时前
界面控件DevExpress XAF v26.1新版亮点——AI Agent Skills
ai·c#·跨平台·devexpress·ui开发·xaf
csdn_aspnet5 小时前
C# 高效便利的处理数据
开发语言·windows·c#
淡海水6 小时前
03-02-线性-List-T-动态数组布局-扩容与操作成本
数据结构·windows·c#·list·编译·clr·机器码
csdn_aspnet16 小时前
C# 在逗号分割的字符串中判断是否包含指定字符
c#·正则·linq·string·regex·contains
宝桥南山16 小时前
Blazor Web Assembly - 体验一下Authentication State从Server共享给Client
microsoft·微软·c#·asp.net·.net·.netcore
淡海水18 小时前
02-06-历史-托管GC机制-垃圾回收如何影响数据结构选择
c#·编译·gc·机器码
李高钢21 小时前
除了 IDE,C#/WPF 开发者每天离不开的 10 个工具
ide·c#·wpf