.NET 使用 ZXing.Net 生成二维码,并识别

news2024/11/24 18:38:57

前言

前面已经分享给很多创建二维码,条形码。。。等一系列的方式
各有优缺点,暂时不做评价。今天推荐ZXing.Net 。也是比较全面的一种方式,还支持解码

  • .NET 二维码生成库-QrCodeGenerator
  • 商业库–Spire.Barcode
  • ThoughtWorks.QRCode
  • QRCoder
  • SkiaSharp-跨平台方案

编码

想要条形码,参考文章:.NET 使用 ZXing.Net 生成带有识别符的 EAN-13 条码

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

解码

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

识别的二维码
条形码也是同样的方式
条形码的识别

参考:

  • 官方地址
推荐阅读
  • 开源项目MiniWord .NET Word-Word操作
  • 博客系统必备-Moonglade Blog
  • C#编写的一款电子桌面宠物-Candy
  • ShellProgressBar控制台中漂亮的显示进度条
  • 控制台必备神器-AnsiConsole
  • WPFUI_直观的设计主题导航和新的沉浸式控件
  • 一款的 WPF 主题和控件包,免费开源
  • Net开源项目-一款电子邮件神奇
  • NET 7 + Vue.js 的前后端分离的通用后台管理系统框架

欢迎关注我的公众号“Net分享”,技术文章第一时间推送,随缘更新 , 分享一些你可能注意不到的细节。

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

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

相关文章

三维重建_使用OpenMVG/OpenMVS重建场景

目录 1. 安装环境 1.1 安装OpenMVS 1.2 安装OpenMVG 2. 测试 2.1 下载数据 2.2 进行三维重建 2.2.1 OpenMVG提取稀疏点云 2.2.2 OpenMVS稠密化点云/网格化/纹理贴图 3. 运行遇到问题记录 4. 参考 1. 安装环境 本地环境: Ubuntu20.04 没有cuda 1.1 安装O…

英特尔参与 CentOS Stream 项目

导读红帽官方发布公告欢迎英特尔参与进 CentOS Stream 项目,并表示 “这一举措不仅进一步深化了我们长期的合作关系,也构建在英特尔已经在 Fedora 项目中积极贡献的基础之上。” 目前,CentOS Stream 共包括以下特别兴趣小组(SIG&a…

排序算法之【归并排序】

📙作者简介: 清水加冰,目前大二在读,正在学习C/C、Python、操作系统、数据库等。 📘相关专栏:C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…

oralce配置访问白名单的方法

目录 配置sqlnet.ora文件 重新加载使配置生效 注意事项 Oracle数据库安全性提升:IP白名单的配置方法 随着互联网的发展,数据库安全问题也越来越严重。Oracle是目前使用较为广泛的一款数据库管理系统,而IP白名单作为提升数据库安全性的有效…

骑行上下坡,如何分配重心?让你的骑行更稳定、更安全

骑行,作为一种环保、健康的出行方式,越来越受到人们的喜爱。然而,在骑行过程中,尤其是上下坡时,如何分配好重心,确保骑行的稳定性和安全性呢?本文将为您提供一些实用的技巧,让您的骑…

电脑被删除的文件怎么恢复?2023年数据恢复方法分享

大多数人在使用电脑时都可能会遇到误删文件的情况。一不小心,重要的文件或数据就消失了,情急之下,大多会感到慌乱和无助。但其实,文件误删除并非不可挽回的灾难。本文将为大家介绍几种有效的文件恢复方法,以帮助大家在…

【Proteus仿真】【STM32单片机】汽车倒车报警系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602液晶、按键、继电器电机模块、DS18B20温度传感器、蜂鸣器LED、HCSR04超声波等。 主要功能: 系统运行后,LCD1602显…

MFC界面控件添加函数小技巧

1..选中控件的属性,点击闪电形状 2.在右侧的点击方式选中生成函数 选择需要响应的消息方式。代码会自动创建响应函数

延时队列java

Redis过期键通知(使用redis来实现延迟通知) Slf4j public class KeyExpiredListener extends KeyExpirationEventMessageListener {public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) {super(listenerContainer);}Overridep…

NodeMCU ESP8266 外设的 Arduino API 接口介绍

NodeMCU ESP8266 外设的 Arduino API 接口介绍 文章目录 NodeMCU ESP8266 外设的 Arduino API 接口介绍前言模块中断数字IO模拟输入模拟输出延时串口 总结 前言 Arduino在硬件上做了相应的封装,新的硬件需要兼容Arduino的接口。比如NodeMCU ESP8266的底层硬件做一次…

【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】

GUI系列操作 1.枚举菜单实现文件1:Assets/MyScript/Test1.cs代码如下: 文件2:Assets/MyScript/Editor/Test1Editor.cs代码如下: 测试一下新建一个场景,新建一个Empty 节点,用来测试枚举组件将文件1&#xf…

百面机器学习书刊纠错

百面机器学习书刊纠错 P243 LSTM内部结构图 2023-10-7 输入门的输出 和 candidate的输出 进行按元素乘积之后 要和 遗忘门*上一层的cell state之积进行相加。

格雷希尔针对汽车空调高压管异型管口快速密封的G72R高压连接器

汽车散热是汽车热管理的重要部件,不管是燃油车还是新能源车,散热都是必不可少的零部件,从散热水箱、到车用空调冷凝器、蒸发器、空调高压管件等,由于位置和固定方式等影响,虽然管件直径比较标准,但接口部分…

Python3操作文件系列(一):判断文件|目录是否存在三种方式

Python3操作文件系列(一):判断文件|目录是否存在三种方式 Python3操作文件系列(二):文件数据读写|二进制数据读写 Python3数据文件读取与写入 一: 文件操作认知: 提升认知:Python判断文件是否存在的三种方法1.使用os模块2.判断文件是否可做读写操作3.使用Try语句…

二、Excel VBA 简单使用

Excel VBA 从入门到出门一、Excel VBA 是个啥?二、Excel VBA 简单使用 👋Excel VBA 简单使用 ⚽️1. 如何在Excel中手动编写VBA代码⚽️2. 如何在 Excel 中运行 VBA 代码⚽️3. 如何在Excel中记录VBA代码⚽️4. 如何在Excel中编辑录制的VBA代码⚽️5. 如…

学习笔记|ADC|NTC原理|测温程序|STC32G单片机视频开发教程(冲哥)|第十九集:ADC应用之NTC

文章目录 1.NTC的原理开发板上的NTC 2.NTC的测温程序编写3.实战小练总结课后练习 1.NTC的原理 NTC(Negative Temperature Coefficient)是指随温度上升电阻呈指数关系减小、具有负温度系数的热敏电阻现象和材料。该材料是利用锰、铜、硅、钴、铁、镍、锌…

经典算法-----01背包问题(动态规划)

目录 前言 01背包问题 问题描述 ​编辑 动态规划 基本概念 怎么理解动态规划? 解决01背包问题 代码实现 前言 今天我们学习一种新的算法---动态规划,这种算法思想是属于枚举的一种,下面我就通过01背包问题来说明这种算法的解决思路。 01背包问…

GEE17: 基于Theil-Sen Median斜率估计和Mann-Kendall趋势分析方法分析四川省2022年NDVI变化情况

Theil-Sen Median Mann-Kendall 1. Theil-Sen Median Mann-Kendall 原理1.1 Theil-Sen Median1.2 Mann-Kendall 2. GEE code 1. Theil-Sen Median Mann-Kendall 原理 1.1 Theil-Sen Median Theil-Sen Median方法又称为Sen斜率估计,是一种稳健的非参数统计的趋势…

LeakyReLU激活函数

nn.LeakyReLU 是PyTorch中的Leaky Rectified Linear Unit(ReLU)激活函数的实现。Leaky ReLU是一种修正线性单元,它在非负数部分保持线性,而在负数部分引入一个小的斜率(通常是一个小的正数),以防…