我是编程乐趣,一个10年.Net开发经验老程序员,点击右上方“关注”,每天为你分享开源项目和编程知识。
推荐一个跨平台的非常流行的条码库,方便我们在.Net项目集成条码扫描和生成功能。
01
项目简介
ZXing.Net是ZXing的.Net版本的开源库。支持跨多个平台工作,包括 Windows、Linux 和 macOS,以及在 .NET Core 和 .NET Framework 上运行。
解码器支持以下条形码:UPC-A、UPC-E、EAN-8、EAN-13、Code 39、Code 93、Code 128、ITF、Codabar、MSI、RSS-14(所有变体)、QR Code、Data Matrix、Aztec和PDF-417。
编码器支持以下格式:UPC-A、EAN-8、EAN-13、Code 39、Code 128、ITF、Codabar、Plessey、MSI、QR Code、PDF-417、Aztec、Data Matrix
支持.Net 2.0+、UWP、Unity3D、Xamarin.Android、支持COM互操作,可与VBA一起使用。
02
使用示例
1、安装依赖库
Install-Package ZXing.Net2、生成二维码
using ZXing;using ZXing.QrCode;using ZXing.Rendering;using static ZXing.Rendering.SvgRenderer;// 创建一个编码器实例var writer = new BarcodeWriter<SvgImage>(){ Format = BarcodeFormat.QR_CODE, // 设置条码格式为 QR_CODE Options = new QrCodeEncodingOptions { Height = 250, // 设置 QR 码的高度 Width = 250 // 设置 QR 码的宽度 }, Renderer = new SvgRenderer()};// 指定要编码的文本string encodedData = "https://www.example.com";//生成二维码var svg = writer.Write(encodedData);File.WriteAllText("qrCode.svg", svg.Content);在浏览器打开,效果如下:
3、识别二维码
using System.Drawing;using System.Drawing.Imaging;using System.Runtime.InteropServices;using ZXing;Func<Image, LuminanceSource> createLuminanceSource = _image => CreateLuminanceSourceFromMyImageType(_image);var reader = new BarcodeReader<Image>(createLuminanceSource);var image = Image.FromFile("f:/qrcode.jpg");var result = reader.Decode(image);Console.WriteLine(result); /// <summary>/// 图片转换/// </summary>/// <param name="image"></param>/// <returns></returns>LuminanceSource CreateLuminanceSourceFromMyImageType(Image image){ // 转换为Bitmap,以便可以访问像素数据 Bitmap bitmap = image as Bitmap ?? new Bitmap(image); // 锁定位图的内存区域以获取原始图像数据 Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height); BitmapData bitmapData = bitmap.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); // 计算需要的字节数组大小(每像素3字节:R, G, B) int bytes = bitmapData.Stride * bitmap.Height; byte[] rgbRawBytes = new byte[bytes]; // 将原始图像数据复制到数组中 Marshal.Copy(bitmapData.Scan0, rgbRawBytes, 0, bytes); // 解锁位图的内存区域 bitmap.UnlockBits(bitmapData); // 释放Bitmap资源(如果它不是传入的原始Image) if (bitmap != image) { bitmap.Dispose(); } return new RGBLuminanceSource(rgbRawBytes, image.Width, image.Height);}效果如下:
04
项目地址
https://github.com/micjahn/ZXing.Net
- End -
推荐阅读