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/

相关推荐
吴可可12328 分钟前
C# CAD二次开发自定义实体实现
c#
z落落2 小时前
C# WinForm 线程池与事件等待+进度条暂停恢复实战案例
开发语言·c#
酷酷的身影4 小时前
Managers/APConfigManager.cs
开发语言·ui·c#
贾斯汀frank16 小时前
C# 15 类型系统改进:Union Types
开发语言·windows·c#
时代的狂17 小时前
如何理解 C# 的 async 和 await
c#·.netcore·async·await
xiaoshuaishuai820 小时前
C# AI实现PR处理、单元测试
开发语言·c#·log4j
LONGZHIQIN20 小时前
C#基础复习笔记
开发语言·笔记·c#
时代的狂1 天前
如何理解 C#/.NET 的依赖注入与生命周期
c#·.net·依赖注入·控制反转
品尚公益团队1 天前
C#在asp.net网页开发中的带cookie登录实现
前端·c#·asp.net
吴可可1231 天前
C#自定义CAD多段线零件实体
c#