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
静态类是实现二维码生成与解析功能的核心载体,其中的Encode
和Decode
方法是整个代码的关键逻辑所在。
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# 开发中的更多可能!
以上博客详细阐述了代码的功能与使用。若你希望增加代码优化建议、补充更多应用场景示例,随时和我说。