C#二维码:利用 ThoughtWorks.QRCode 库实现二维码生成与解析

C#二维码:利用 ThoughtWorks.QRCode 库实现二维码生成与解析

在当今数字化信息交互频繁的时代,二维码凭借其信息容量大、容错能力强、易识别等特点,广泛应用于各个领域。从移动支付、产品溯源到活动签到,二维码无处不在。在 C# 开发过程中,通过引入ThoughtWorks.QRCode库,能够轻松实现二维码的生成与解析功能。接下来,我们将深入剖析一段基于该库的 C# 代码,详细了解其实现原理与使用方式。

一、代码结构与核心类解析

上述代码主要由几个关键部分构成:用于描述二维码图标信息的QrCodeIcon类、整合二维码生成配置选项的QrCodeOptions类、定义二维码纠错级别的QrCodeLevel枚举,以及提供二维码生成与解析核心方法的QrCode静态类。

QrCodeIcon

public class QrCodeIcon
{public string? Path { get; set; }public int Size { get; set; }public int Border { get; set; }
}

QrCodeIcon类用于封装二维码中间嵌入图标的相关信息。其中,Path属性用于指定图标的文件路径,方便开发者将自定义图标融入二维码;Size属性可以精确控制图标的大小,确保其在二维码中显示比例协调;Border属性则用于设置图标边框宽度,增加图标与二维码的视觉区分度 ,使生成的二维码更具个性化。

QrCodeOptions

public class QrCodeOptions
{public int Version { get; set; }public int Scale { get; set; }public QrCodeIcon? Icon { get; set; }public bool Edge { get; set; }public QrCodeLevel Level { get; set; }
}

QrCodeOptions类如同二维码生成的 “配置中心”,将各种关键配置选项集中管理。Version属性用于设定二维码的版本号,不同版本对应不同的尺寸和信息容量;Scale属性控制二维码的缩放比例,可根据实际需求调整二维码大小;Icon属性关联QrCodeIcon类,实现二维码图标嵌入功能;Edge属性决定是否显示二维码边缘,为外观设计提供更多选择;Level属性则通过QrCodeLevel枚举,设置二维码的纠错级别。

QrCodeLevel枚举

public enum QrCodeLevel
{L,M,Q,H
}

QrCodeLevel枚举定义了四种不同级别的二维码纠错能力。L级别表示可修正 7% 的字码错误,适用于对信息准确性要求不高、二维码不易受损的场景;M级别可修正 15% 的字码错误,是较为常用的默认选项;Q级别能修正 25% 的字码错误;H级别纠错能力最强,可修正 30% 的字码错误,适用于二维码可能面临磨损、遮挡等复杂环境的情况。开发者可根据实际应用场景,灵活选择合适的纠错级别,保障二维码的可靠识别。

QrCode静态类

QrCode静态类是实现二维码生成与解析功能的核心载体,其中的EncodeDecode方法是整个代码的关键逻辑所在。

Encode方法
public static Bitmap Encode(string message, QrCodeOptions? options = null)
{var defaultScale = 4;if (options != null){defaultScale = options.Scale;}var defaultLevel = QRCodeEncoder.ERROR_CORRECTION.M;if (options != null){defaultLevel = (QRCodeEncoder.ERROR_CORRECTION)options.Level;}var defaultVersion = 0;if (options != null){defaultVersion = options.Version;}var encoder = new QRCodeEncoder{QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE,QRCodeScale = defaultScale,QRCodeVersion = defaultVersion,QRCodeErrorCorrect = defaultLevel,QRCodeBackgroundColor = Color.White,QRCodeForegroundColor = Color.Black};return encoder.Encode(message, Encoding.UTF8);
}

Encode方法承担着将文本信息转化为二维码图片的重任。它接收两个参数,message为需要编码到二维码中的字符串信息,options为可选的二维码生成配置参数。方法内部首先设定默认的缩放比例、纠错级别和版本号,若传入了options,则使用其中的配置覆盖默认值。随后,创建QRCodeEncoder实例,对其编码模式、缩放比例、版本号、纠错级别以及二维码的背景色和前景色进行配置。最后,调用Encode方法将message编码为Bitmap格式的二维码图片并返回。

Decode
public static string Decode(Bitmap img)
{var decoder = new QRCodeDecoder();return decoder.decode(new QRCodeBitmapImage(img));
}

Decode方法的作用是将二维码图片中的信息提取出来。它接收一个Bitmap类型的参数img,即待解析的二维码图片。方法中创建QRCodeDecoder实例,将Bitmap对象转换为QRCodeBitmapImage对象后,调用decode方法解析二维码,最终返回解析得到的字符串信息。

二、实际应用示例

生成个性化二维码

class Program
{static void Main(){var message = "https://www.example.com";var icon = new QrCodeIcon{Path = "logo.png",Size = 50,Border = 2};var options = new QrCodeOptions{Scale = 6,Level = QrCodeLevel.Q,Version = 3,Icon = icon,Edge = true};var qrCode = QrCode.Encode(message, options);qrCode.Save("custom_qr_code.png", System.Drawing.Imaging.ImageFormat.Png);}}

在上述示例中,我们想要生成一个包含网站链接的二维码,并在其中嵌入自定义图标。首先定义要编码的链接message,创建QrCodeIcon实例配置图标信息,再通过QrCodeOptions实例设置二维码的缩放比例、纠错级别、版本号、图标以及边缘显示等参数。最后调用QrCode.Encode方法生成二维码,并将其保存为png格式的图片。

解析二维码

class Program
{static void Main(){var img = new Bitmap("custom_qr_code.png");var result = QrCode.Decode(img);Console.WriteLine(result);}
}

该示例展示了解析二维码的过程。我们加载之前生成的二维码图片,将其作为参数传入QrCode.Decode方法,解析出二维码中的信息并输出到控制台。

三、总结与拓展

通过对这段 C# 代码的详细解读,我们掌握了使用ThoughtWorks.QRCode库实现二维码生成与解析的方法。无论是在 Web 应用、桌面程序还是移动开发中,这套代码都能为我们快速集成二维码功能提供有力支持。在实际项目应用中,开发者还可以进一步拓展代码功能,比如添加对二维码颜色渐变效果的支持,优化图标与二维码的融合算法,或者结合数据库实现动态二维码生成等。如果在使用过程中有任何疑问或独特的应用场景,欢迎在评论区交流分享,共同探索二维码技术在 C# 开发中的更多可能!

以上博客详细阐述了代码的功能与使用。若你希望增加代码优化建议、补充更多应用场景示例,随时和我说。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/907421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java Web】速通JavaScript

参考笔记:JavaWeb 速通JavaScript_javascript 速通-CSDN博客 目录 一、JavaScript快速入门 1. 基本介绍 2. JavaScript特点 3. JavaScript的引入方式(重要) 3.1 写在script标签中 ​​​​​3.2 以外部文件方式引入 二、JS的数据类型 1. 变量 2. 常用数据类型 3.特殊值 三、…

Python打卡训练营-Day13-不平衡数据的处理

浙大疏锦行 知识点: 不平衡数据集的处理策略:过采样、修改权重、修改阈值交叉验证代码 过采样 过采样一般包含2种做法:随机采样和SMOTE 过采样是把少的类别补充和多的类别一样多,欠采样是把多的类别减少和少的类别一样 一般都是缺…

Mac OS 使用说明

Mac 的启动组合键 了解可通过在启动时按住一个或多个按键来访问的 Mac 功能和工具。 若要使用这些组合键中的任何一个,请在按下电源按钮以开启 Mac 后或在 Mac 开始重新启动后,立即按住相应按键。请一直按住,直至电脑出现对应的行为。 !!!上…

LoadRunner 是什么

LoadRunner 是一款由 Micro Focus(原惠普企业软件部门)开发的性能测试工具,广泛应用于软件、应用程序和系统的 负载测试、压力测试 和 性能分析。它通过模拟大量用户并发操作,帮助测试人员评估系统在高负载下的性能、稳定性和可扩…

RISC-V PMA、PMP机制深入分析

1 PMA PMA(Physical Memory Attributes),物理内存属性,顾名思义就是用来设置物理内存属性的,但这里说“设置”,并不合理,因为一般情况下各存储的属性,在芯片设计时就固定了&#xf…

SQL正则表达式总结

这里写目录标题 一、元字符二、正则表达函数1、 regexp_like(x,pattern[,match_option])2、 regexp_instr(x,pattern[,start[,occurrence[,return_option[, match_option]]]]) 3、 REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]]) 4、 REGEXP_REPLACE(x,patter…

Shortest path 代码

Project https://graphics.cs.utah.edu/research/projects/shortest-path-to-boundary/ Build and Debug Fork:(在Win10上) https://github.com/chunleili/Shortest-Path-to-Boundary-for-Self-Intersecting-Meshes commit hash d3160168d2b6a58188d12e6cd959da…

AMBA总线家族成员

在AMBA总线协议体系中,AXI4虽然是最新且性能最强的总线协议,但AHB和APB仍然被广泛使用,主要原因在于​​场景适配性、资源优化和系统兼容性​​的综合考量。以下是具体分析: AMBA 1‌:仅包含ASB和APB1。‌AMBA 2‌&am…

前端高频面试题1:HTML/CSS/浏览器/计算机网络

目录 1.为什么会出现margin塌陷? 2.如何解决margin塌陷? 3.HTML5有哪些新特性? 4.常见的语义化标签有哪些?语义化标签的好处? 5.使用css和js做动画有何优劣 6.如何实现文本超出展示省略号 7.deep在css中存在吗&…

基于 Spring Boot + Vue 的墙绘产品展示交易平台设计与实现【含源码+文档】

项目简介 本系统是一个基于 Spring Boot Vue 技术栈开发的墙绘产品展示交易平台,旨在提供一个高效、便捷的在线商城平台,方便用户浏览、选购墙绘产品,并提供管理员进行商品管理、订单管理等功能。系统采用了前后端分离的架构,前…

STM32F103_Bootloader程序开发05 - Keil修改生成文件的路径与文件名,自动生成bin格式文件

导言 通过Keil的相关配置,可以灵活地修改输出文件的保存路径及文件名称。在Bootloader程序开发过程中,合理配置输出文件对于后续固件升级和自动化脚本处理至关重要。完成路径和文件名配置后,还可以借助Keil自带的fromelf.exe工具,…

力扣每日一题2025.5.28——题号:3372.连接两棵树后最大目标节点数目 |

目录 题目链接:3372. 连接两棵树后最大目标节点数目 I - 力扣(LeetCode) 题目描述 解法一: Java写法: C写法: 运行时间 时间复杂度和空间复杂度 总结 题目链接:3372. 连接两棵树后最大目…

华为防火墙NAPT配置

1.实验拓扑 2.实验配置 [SW1]dis cu # sysname SW1 # vlan batch 10 20 # interface Vlanif10ip address 192.168.10.254 255.255.255.0 # interface Vlanif20ip address 192.168.20.253 255.255.255.0 # interface GigabitEthernet0/0/1port link-type accessport default vl…

java导入excel

这样读取excel时,得到的是结果值,而不是单元格的公式 import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil;InputStream inputStream file.getInputStream(); ExcelReader reader ExcelUtil.getReader(inputStream, 1); L…

stm32cube ide如何生成LL库工程

在 STM32Cube IDE 里生成使用 LL(Low Layer)库的工程,可按以下步骤操作: 1. 新建 STM32 工程 启动 STM32Cube IDE,选择File→New→STM32 Project。依据需求挑选目标 MCU 型号,接着点击Next。 2. 配置工程…

阿里通义实验室突破空间音频新纪元!OmniAudio让360°全景视频“声”临其境

在虚拟现实和沉浸式娱乐快速发展的今天,视觉体验已经远远不够,声音的沉浸感成为打动用户的关键。然而,传统的视频配音技术往往停留在“平面”的音频层面,难以提供真正的空间感。阿里巴巴通义实验室(Qwen Lab&#xff0…

二十八、面向对象底层逻辑-SpringMVC九大组件之ViewResolver接口设计

在 Spring MVC 框架中,视图解析器(ViewResolver)是连接控制器逻辑与具体视图技术的核心纽带。它通过抽象化的接口设计,将视图的渲染逻辑与业务逻辑解耦,使开发者能够灵活支持 JSP、Thymeleaf、FreeMarker 等多种视图技…

LiveWallpaperMacOS:让你的 Mac 桌面动起来

随着桌面美化需求的不断提升,用户对于桌面壁纸的要求已经不再局限于静态图片。越来越多的 Mac 用户希望桌面能像 Windows 一样,拥有动态壁纸,展现个性、提升体验。LiveWallpaperMacOS 正是这样一款让你的 Mac 桌面焕发活力的开源项目。 本文将详细介绍 LiveWallpaperMacOS …

豆瓣电视剧数据工程实践:从爬虫到智能存储的技术演进(含完整代码)

通过网盘分享的文件:资料 链接: https://pan.baidu.com/s/1siOrGmM4n-m3jv95OCea9g?pwd4jir 提取码: 4jir 1. 引言 1.1 选题背景 在影视内容消费升级背景下,豆瓣电视剧榜单作为国内最具影响力的影视评价体系,其数据价值体现在&#xff1a…

集成均衡功能电池保护芯片在大功率移动电源的应用,创芯微CM1341-DAT、杰华特JW3312、赛微微电CW1244、中颖SH366006

一文了解集成均衡功能电池保护IC在大功率移动电源的应用 创芯微CM1341-DAT 创芯微CM1341-DAT是一款专用于4串锂离子/磷酸铁锂电池的保护芯片,内置有高精度电压检测电路和电流检测电路。通过检测各节电池的电压、充放电电流及温度等信息,实现电池过充电…