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/

相关推荐
用户7884773163410 小时前
WinForms 迁移 WPF:Upgrade Assistant 覆盖 30%,剩下 70% 我手写了六周
c#
寂寞的船14 小时前
【Unity知识速递】第13期 Unity 内存泄漏排查实战:从 Memory Profiler 到 Lua 引用泄漏的生产级全链路诊断
unity·junit·c#·游戏引擎·lua
用户3721574261351 天前
C# 提取 PDF 附件:包括文档附件和页面注释附件
c#
寂寞的船1 天前
【Unity Bug挑战】第12期 Awaitable 二次 await 死锁之谜 —— 为什么同一个异步操作等两次就卡死?
unity·c#·游戏引擎·bug
huaqianzkh3 天前
WinForm C#:循环修改控件UI闪烁卡顿?SuspendLayout / ResumeLayout 与 BeginUpdate 优化
开发语言·ui·c#
用户3721574261353 天前
C# 实现 Excel 单元格保护:锁定公式并允许编辑指定区域
c#·ai编程·编程语言
公子小六4 天前
基于.NET的Windows窗体编程之WinForms数据持久化(1)
windows·microsoft·c#·.net·winforms
三雷科技4 天前
第6章第4节:自定义分词器
开发语言·c#
zhanghaha13144 天前
C# 系列教程_12 字符串 string 保姆级系统教程(面向新手,大量示例 + 原理讲解)
开发语言·数据库·c#
Coder_Shenshen4 天前
罗克韦尔ACD工程归档离线变量树解析
算法·c#