使用ZXing.Net生成二维码

news/2024/9/22 7:36:03

所需依赖组件

从工程安装的ZXing.Net Nuget包查看,ZXing.Net不依赖其他组件。

查看package包内容,发现内部就zxing.dll和zxing.presentation.dll两个动态库文件。

ZXing.Net生成的二维码形式

生成的二维码形式为内存Bitmap图像对象,如果需保存为文件或Base64字符串需另外书写代码实现。

关于大小:将“测试Url文本”作为内容生成的内存Bitmap对象保存到本地jpg文件,发现大小为33KB。

ZXing.Net生成二维码性能调研:

对“测试Url文本”进行50次生成二维码操作,记录消耗时长(单位:毫秒)。

进行10次记录,分别:219、218、216、233、223、221、219、221、223、217,计算平均数为:198.7。经观察发现首次启动程序后执行生成二维码操作所耗时长差距较大(如:309),前面的10次记录排除了首次消耗时长。

完整代码

using System;
using System.Drawing;
using System.Windows.Forms;
using ZXing;
using ZXing.Common;namespace QRCodeApp
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void generateQRCodeLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e){string qrCodeContent = contentTextBox.Text.Trim();int minValue = Math.Min(qrCodePictureBox.Width, qrCodePictureBox.Height);int width = minValue;int height = minValue;// 生成二维码内存Bitmap对象var qrImage = CodeHelper.GenerateQRCode(qrCodeContent, out string errorMessage, height, width, 1);if (!string.IsNullOrEmpty(errorMessage)){MessageBox.Show(errorMessage);return;}// 保存为本地jpg文件qrImage.Save($"{DateTime.Now.Ticks}.jpg");qrCodePictureBox.Image = qrImage;// 解析二维码内容string parsedConetnt = CodeHelper.ParseBarCode(qrImage);Clipboard.SetText(parsedConetnt);MessageBox.Show(parsedConetnt);#region 测试性能//Stopwatch stopwatch = new Stopwatch();//stopwatch.Start();//string url = "http://172.19.134.50:15866/home/toindex?zyh=7C9C27E3A77AB188C2F1F2964D5F95CB&kh=A007648177DE01AEF9C4B4EBC38B00D5&appId=315C119EB6B22411BA6F8E3CB767E214&token=382AB3C8441A478A800BE892F358B2D9400752295950261F61BE6764FC3EA1AB2FBE26BBD52AD9B37EC08BADD75482289A1F7219E6EAB4BF0864225D88D305001FC11A94282210F44B7632C186EF6096×tamp=A61A2B1E5D3DA278261D1850F9270DD3&ysdm=6134&clientIP=172.19.133.28";//for (int i = 0; i < 50; i++)//{//    var bitmap = CodeHelper.GenerateQRCode(url, out string _);//}//stopwatch.Stop();//MessageBox.Show(stopwatch.ElapsedMilliseconds.ToString());#endregion}}public class CodeHelper{/// <summary>/// 使用zxing动态库生成二维码/// </summary>/// <param name="conetnt">二维码内容</param>/// <param name="errorMessage">异常信息</param>/// <param name="logoPath">logo图片路径,默认为空。为空时生成的二维码不带logo</param>/// <param name="height">二维码图片高度,默认240 单位 pixels</param>/// <param name="width">二维码图片宽度,默认240 单位 pixels</param>/// <param name="margin">二维码图片边距,默认为0</param>/// <returns></returns>public static Bitmap GenerateQRCode(string conetnt, out string errorMessage, string logoPath = "", int height = 240, int width = 240, int margin = 0){errorMessage = string.Empty;try{BarcodeWriter barCodeWriter = new BarcodeWriter();barCodeWriter.Format = BarcodeFormat.QR_CODE;barCodeWriter.Options.Hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");barCodeWriter.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.H);barCodeWriter.Options.Height = height;barCodeWriter.Options.Width = width;barCodeWriter.Options.Margin = margin;BitMatrix bm = barCodeWriter.Encode(conetnt);Bitmap qrCodeImage = barCodeWriter.Write(bm);if (!string.IsNullOrEmpty(logoPath)){// 添加LogoBitmap logo = new Bitmap(logoPath);int logoSize = (int)(qrCodeImage.Width * 0.2); // Logo大小为二维码大小的1/5int logoX = (qrCodeImage.Width - logoSize) / 2;int logoY = (qrCodeImage.Height - logoSize) / 2;Graphics qrGraphics = Graphics.FromImage(qrCodeImage);qrGraphics.DrawImage(logo, new Rectangle(logoX, logoY, logoSize, logoSize));}return qrCodeImage;}catch (Exception ex){errorMessage = $"Exception raised when generating QRCode,, Exception;{ex}";return null;}}/// <summary>/// 使用zxing动态库解析/// </summary>/// <param name="image">二维码图像</param>/// <returns></returns>public static string ParseBarCode(Bitmap image){BarcodeReader reader = new BarcodeReader();Result result = reader.Decode(image);return result.Text;}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Netgear无线路由器漏洞复现(CVE-2019-20760)

本文复现的漏洞为Netgear路由器远程命令执行漏洞,1.0.4.26之前的NETGEAR R9000设备会受到身份验证绕过的影响,可利用漏洞将木马程序下载下来,获取 shell。漏洞概述 漏洞服务: uhttpd 漏洞类型: 远程命令执行 影响范围: 1.0.4.26之前的NETGEAR R9000设备会受到身份验证绕过…

经验分享:春招零Offer,5月份还有机会吗?

先说答案:5 月份依然有拿到 Offer 的机会。 5月份春招结束了吗?对于应届大学生来说(也就是今年暑假毕业的学生),5 月中旬春招就陆续结束了,但是 5 月份会有很多补录的机会。 对于非应届的大学生来说(今年之后毕业的学生)来说,5 月和 6 月正是在暑假最好的时机,尤其是…

PMS15

1. GPIO 相关的寄存器设置典型配置程序: //第一种配置方式 PA = 0b0110_0000; \ //设置数据 PAPH = 0b1110_0000; \ //设置上下拉 PAC = 0b1110_0000; \ //控制输入输出//第二种配置方式 PAC.4 = 0; …

探索大语言模型:理解Self Attention

一、背景知识 在ChatGPT引发全球关注之后,学习和运用大型语言模型迅速成为了热门趋势。作为程序员,我们不仅要理解其表象,更要探究其背后的原理。究竟是什么使得ChatGPT能够实现如此卓越的问答性能?自注意力机制的巧妙融入无疑是关键因素之一。那么,自注意力机制究竟是什么…

macOS Ventura 13.6.7 (22G720) 正式版发布,ISO、IPSW、PKG 下载

macOS Ventura 13.6.7 (22G720) 正式版发布,ISO、IPSW、PKG 下载macOS Ventura 13.6.7 (22G720) 正式版发布,ISO、IPSW、PKG 下载 5 月 14 日凌晨,macOS Sonoma 14.5 发布,同时带来了 macOS Ventru 13.6.7 安全更新。 macOS Ventura 13.6 及更新版本,如无特殊说明皆为安全…

如何将截图快速识别成文字?

随着数字化时代的发展,截图已经成为我们日常工作中必不可少的一环。无论是截取程序界面、聊天记录、网页内容还是电子邮件,截图都是传递信息和记录内容的重要手段。然而,由于截图本身是一种图像文件,如果我们需要将其中的文字提取出来进行编辑、复制或搜索,就需要转换截图…

记录一下在KEIL中修改STM32的栈顶地址

STM32的启动文件中定义的栈和堆的大小,由于栈是向下生长的。所以我们一般希望将栈顶设置为RAM的最高有效地址。这样就可以最大限度保护栈不会溢出。但是STM32的启动文件居然不是这样的思路。 那STM32的启动文件的分配思路是怎么样的呢。它其实是先确定用户使用RAM的情况,然后…