Loading... # .NET 使用 ZXing.Net 生成二维码,并识别 ## 前言 前面已经分享给很多创建二维码,条形码。。。等一系列的方式 各有优缺点,暂时不做评价。今天推荐`ZXing.Net` 。也是比较全面的一种方式,还支持`解码` - [.NET 二维码生成库-QrCodeGenerator](https://mp.weixin.qq.com/s/YLpZE3Qp6CtPBvd1YtpjEA) - [商业库--Spire.Barcode](https://mp.weixin.qq.com/s/yUxl_iSZZd-fOo6YOkYrng) - [ThoughtWorks.QRCode](https://mp.weixin.qq.com/s/uIvgBvEPHVObuhzYtQLrNw) - [QRCoder](https://mp.weixin.qq.com/s/uIvgBvEPHVObuhzYtQLrNw) - [SkiaSharp-跨平台方案](https://mp.weixin.qq.com/s/BH05BIK8F3yyxbpYg7TSDQ) ## 编码 想要条形码,参考文章:[.NET 使用 ZXing.Net 生成带有识别符的 EAN-13 条码](https://mp.weixin.qq.com/s/nZqR0HBvMzogIqx8NYzoeQ) ``` var qr = new QRCodeWriter() { }; // 创建一个QRCodeWriter实例用于生成QR Code var render = new AlternateBitmapRenderer(); // 创建一个AlternateBitmapRenderer实例用于渲染条形码图像 var contents = "http://weixin.qq.com/r/qzj377TEKulVrfCM9225"; // 条形码的内容,需要根据实际情况进行设置 // 使用QRCodeWriter对象的encode方法生成QR Code的位矩阵,指定条形码格式为QR_CODE,大小为400x400 var qrbitmatrix = qr.encode(contents, ZXing.BarcodeFormat.QR_CODE, 400, 400); // 使用AlternateBitmapRenderer对象的Render方法渲染条形码图像,指定条形码格式为EAN_13,内容为contents, // 同时使用EncodingOptions设置图像的宽度为400,高度为400 var bitmap = render.Render(qrbitmatrix, ZXing.BarcodeFormat.QR_CODE, contents, new EncodingOptions { Width = 400, Height = 400 }); // 将生成的Bitmap对象保存为图片文件,文件名为"image.jpg",格式为JPEG bitmap.Save("qr-image.jpg", ImageFormat.Jpeg); ``` ![](https://oss.hunji.xyz/blogoss/202310/1920368-20231007144036422-191402863.png) ## 解码 csharp代码 ``` // create a barcode reader instance IBarcodeReader reader = new BarcodeReader(); // 加载图片文件 Bitmap image = new Bitmap("D:\\PrideJoy\\Zxing.Demo\\Zxing.demo\\bin\\Debug\\net7.0\\qr-image.jpg"); // 获取rawRGB数据 Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); System.Drawing.Imaging.BitmapData bmpData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, image.PixelFormat); IntPtr ptr = bmpData.Scan0; int bytes = Math.Abs(bmpData.Stride) * image.Height; byte[] rawRGB = new byte[bytes]; System.Runtime.InteropServices.Marshal.Copy(ptr, rawRGB, 0, bytes); image.UnlockBits(bmpData); // 获取格式(format) RGBLuminanceSource.BitmapFormat format; switch (image.PixelFormat) { case System.Drawing.Imaging.PixelFormat.Format8bppIndexed: format = RGBLuminanceSource.BitmapFormat.Gray8; break; case System.Drawing.Imaging.PixelFormat.Format16bppGrayScale: format = RGBLuminanceSource.BitmapFormat.Gray16; break; case System.Drawing.Imaging.PixelFormat.Format24bppRgb: format = RGBLuminanceSource.BitmapFormat.RGB24; break; case System.Drawing.Imaging.PixelFormat.Format32bppRgb: format = RGBLuminanceSource.BitmapFormat.RGB32; break; case System.Drawing.Imaging.PixelFormat.Format32bppArgb: format = RGBLuminanceSource.BitmapFormat.ARGB32; break; // 其他格式的处理 default: format = RGBLuminanceSource.BitmapFormat.Unknown; break; } // 获取宽度(width)和高度(height) int width = image.Width; int height = image.Height; var result = reader.Decode(rawRGB,width,height, format); // do something with the result if (result != null) { Console.WriteLine("内容为:"+result.Text); } ``` ![识别的二维码](https://oss.hunji.xyz/blogoss/202310/1920368-20231007154142771-522783297.png) 条形码也是同样的方式 ![条形码的识别](https://oss.hunji.xyz/blogoss/202310/1920368-20231007154601585-1274709305.png) 参考: - [官方地址](https://github.com/micjahn/ZXing.Net/) #### 推荐阅读 - [开源项目MiniWord .NET Word-Word操作](https://mp.weixin.qq.com/s/-_aVbQjFft63EwLkJdzuEQ) - [博客系统必备-Moonglade Blog](https://mp.weixin.qq.com/s/wfcYZLPok8VnTK4fwDMp_A) - [C#编写的一款电子桌面宠物-Candy](https://mp.weixin.qq.com/s/51djCV3_u7qIqDuomA8_qw) - [ShellProgressBar控制台中漂亮的显示进度条](https://mp.weixin.qq.com/s/dY-4svHo5yJ03EDs0ZWGtg) - [控制台必备神器-AnsiConsole](https://mp.weixin.qq.com/s/FBDJKIOVR6swXBAYUwd7cg) - [WPFUI_直观的设计主题导航和新的沉浸式控件](https://mp.weixin.qq.com/s/D-jvb3CNSYVw11j59fji_g) - [一款的 WPF 主题和控件包,免费开源](https://mp.weixin.qq.com/s/5zCfz2XyLi4NeJM9HQf8Ow) - [Net开源项目-一款电子邮件神奇](https://mp.weixin.qq.com/s/sH9vviKLf-C0GAfb1ilI5Q) - [NET 7 + Vue.js 的前后端分离的通用后台管理系统框架](https://mp.weixin.qq.com/s/mM8de7hnjq24H20ifjsm4g) 欢迎关注我的公众号“**Net分享**”,技术文章第一时间推送,随缘更新 , 分享一些你可能注意不到的细节。 <center> <img src="https://oss.hunji.xyz/blogoss/202310/1920368-20221018151428175-1348767064.jpg" style="width: 140px;"> </center> 最后修改:2023 年 10 月 10 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏