自学内容网 自学内容网

ZXing.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.Net

2、生成二维码

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);
}

效果如下:

图片

03 项目地址

https://github.com/micjahn/ZXing.Net

- End -

更多开源项目: https://github.com/bianchenglequ/NetCodeTop

我是编程乐趣,一个.Net开发经验老程序员,欢迎“关注”我,每天为你分享开源项目和编程知识。
也欢迎加入【.Net技术编程交流社区】,和大家共同学习交流!,点击加入https://bbs.csdn.net/topics/613465368

推荐阅读

AutoFixture:.NET 的假数据生成工具

Coravel:一个可轻松实现任务调度、队列、邮件发送的开源项目

Plotly.NET:一个强大的、漂亮的.NET开源交互式图表库

OxyPlot:一个功能强大、漂亮.Net跨平台开源绘图库

NodaTime:一个.NET开源的强大日期和时间库


原文地址:https://blog.csdn.net/daremeself/article/details/142374035

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!