国产化条码类库Spire.Barcode教程:使用 C# 读取二维码(QR Code)——从图片或数据流解析

二维码已成为现代应用的常见组成部分,广泛应用于用户身份验证、移动支付、商品包装和活动票务等场景。很多使用 C# 开发的系统需要从图像或扫描件中提取二维码信息,因此掌握二维码识别技术显得尤为重要。

为满足这类需求,开发者需要一种既可靠又易于集成的二维码解码方式。本文将通过一个简洁明了的示例,演示如何借助 Spire.Barcode for .NET 使用 C# 从图像中读取二维码,并在桌面或服务器端项目中轻松实现识别功能。

   Spire.Barcode for .NET试用下载

1. 项目配置

首先我们需要使用支持二维码解码的 .NET 条码库。E-iceblue旗下Spire系列产品是国产化文档处理和转换领域的佼佼者,支持国产化信创。本指南采用 Spire.Barcode for .NET,该库提供简洁API帮助开发者轻松从图片文件和数据流读取二维码。

1.1 通过NuGet安装库

可通过NuGet包管理器安装:

Install-Package Spire.Barcode

1.2 创建控制台项目

演示案例使用 Visual Studio 创建 C# 控制台应用:

  • 支持 .NET Framework.NET Core/.NET 6+ASP.NET 或 Xamarin 跨平台移动开发
  • 添加 Spire.Barcode.dll 引用(如未使用NuGet)

2. 用 C# 从图片读取二维码

通过库提供的静态方法 BarcodeScanner.Scan() 即可从图片文件读取二维码。该方法接收图片路径和 BarcodeType 作为参数,返回匹配指定类型(如二维码)的所有解码结果。此方法支持 JPG、PNG、EMF 等图片格式,适用于控制台应用、桌面应用或处理上传图像的服务端程序。

2.1 C# 示例代码:从图片文件解码二维码

using Spire.Barcode;class Program
{static void Main(string[] args){// 加载二维码图片string imagePath = @"C:\qr-code.png";// 条码扫描器从图片读取二维码string[] results = BarcodeScanner.Scan(imagePath, BarCodeType.QRCode);// 显示解码结果foreach (string result in results){Console.WriteLine("二维码内容: " + result + "\n");}}
}

二维码图片及 C# 解码效果:

C#解码二维码输出结果到控制台

2.2 代码说明

  • Scan() 方法读取并解码图片中所有条码
  • BarCodeType.QRCode 参数确保仅检测二维码(可修改为其他类型)
  • 返回数组格式以支持多二维码场景

3. 用 C# 从数据流读取二维码

在Web API或现代应用中处理内存图像时,常需操作 Stream 对象——例如处理文件上传或读取云存储时。

BarcodeScanner.Scan() 方法直接支持 Stream 输入,无需转换即可轻松解码二维码:

using Spire.Barcode;
using System.IO;class Program
{static void Main(string[] args){using (FileStream fs = new FileStream(@"C:\qr-code.png", FileMode.Open, FileAccess.Read)){// 直接从数据流解析二维码string[] results = BarcodeScanner.Scan(fs, BarCodeType.QRCode, false);foreach (string result in results){Console.WriteLine("二维码内容: " + result);}}}
}

此方法特别适用于 WPF 或 ASP.NET Core 等需要内存处理的应用。

4. 提高准确率与错误处理

实际场景中可能因图像质量导致识别失败,以下是提升解码成功率的实践方案:

4.1 优化识别准确率

  • 使用高清图片,避免模糊或过度压缩
  • 保留静区(二维码周围空白区域)
  • 优先选择PNG格式保证清晰度
  • 避免透视畸变——使用正对拍摄的图片

4.2 增强错误处理

通过 try-catch 块优化异常处理:

try
{string[] results = BarcodeScanner.Scan(imagePath, BarCodeType.QRCode);if (results.Length == 0){Console.WriteLine("未检测到二维码");}else{Console.WriteLine("二维码内容: " + results[0]);}
}
catch (Exception ex)
{Console.WriteLine("解码错误: " + ex.Message);
}

5. 进阶技巧:获取二维码在图片上的坐标

有时需要获取二维码在图片中的精确位置(用于裁剪或标注),可通过 ScanInfo() 方法获取边界框:

ScanResult[] results = scanner.ScanInfo(imagePath, BarCodeType.QRCode);
foreach (BarcodeInfo result in results)
{Console.WriteLine("内容: " + result.DataString);Console.WriteLine($"坐标: " + string.Join(",", result.Vertexes.Select(p => $"({p.X},{p.Y})")) + "\n");
}

该方案可同时获取二维码数据和位置信息。

效果演示:

用C#解码二维码并读取其在图片上的坐标

6. 常见问题

如何在 C# 中读取二维码?

使用 Spire.Barcode for .NET 库的 BarcodeScanner.Scan() 方法,几行代码即可实现从图片或数据流读取二维码。

如何读取其他类型条码(非二维码)?

向 Scan() 方法传入图片路径后,将自动检测所有支持类型。若需限定检测类型(如仅 QR 码或 Code128),传入对应的 BarCodeType 参数即可。

如何扫描一张图片上的多个二维码?

直接使用 BarcodeScanner.Scan() 方法即可扫描一张图片上的多个二维码。该方法支持自动识别图片上条码的类型,并返回所有条码的扫描结果。

7. 总结

使用 Spire.Barcode for .NET 库,仅需少量代码即可在 C# 中实现二维码读取。该方案支持图片和数据流解码,完美适配桌面应用、服务端及 WPF 程序,且配置简单性能优异。

基于此基础,可进一步探索二维码生成、文档集成和实时扫描等进阶应用。

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

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

相关文章

IPSAN 共享存储详解:架构、优化与落地实践指南

一、IPSAN 技术定位与核心价值核心价值对比矩阵:维度IPSANFC-SAN实现方案成本端口成本$500端口成本$2000复用IP网络设备传输距离跨地域(VPN/专线)≤10公里两地三中心架构运维效率SNMP/CLI管理Zone/ALPA管理自动化运维工具链协议标准IETF RFC …

【卫星语音】基于神经网络的低码率语音编解码(ULBC)方案架构分析:以SoundStream为例

摘要 随着深度学习技术的快速发展,基于神经网络的音频编解码技术已成为下一代音频压缩的重要研究方向。本文以Google提出的SoundStream为核心分析对象,深入探讨其在低码率语音编解码领域的创新架构设计和关键技术突破。SoundStream通过全卷积编解码器网络…

技术面试问题总结一

MySQL的几种锁机制一、从锁的粒度角度划分表级锁机制:它是对整张表进行锁定的一种锁。当一个事务对表执行写操作时,会获取写锁,在写锁持有期间,其他事务无法对该表进行读写操作;而当事务执行读操作时,会获取…

Python(一)

基本语法:变量,语法变量类型:不同于Java,C语言,C,Python在创建一个变量的时候,不需要声明变量类型,由编译器自行识别Python语句在只有一个语句的时候语句末尾不需要分号,…

Adaptive AUTOSAR中的Firewall技术:智能汽车网络安全架构的核心

1 防火墙技术基础 1.1 定义与演进历程 防火墙(Firewall)作为一种位于内部网络与外部网络之间的网络安全系统,本质上是依照特定规则允许或限制数据传输的信息安全防护机制。在汽车电子电气架构从分布式向集中式转变的背景下,防火墙技术已从传统的IT领域深度融入Adaptive A…

android闪光灯源码分析

目录 一、APP层源码分析 二,framework层代码分析 ​​​​​​​2.1 binder溯源 这几天撸了android11 aosp闪光灯源码,本着前人栽树后人乘凉的原则,有志于android系统开发的新同学们提供一盏明灯,照亮你们前行。 本人撸代码风格&…

文心一言4.5开源部署指南及文学领域测评

📝个人主页:哈__ 期待您的关注 目录 一、引言 二、文心一言开源模型 2.1 MoE架构 2.2 文心一言MoE架构 三、文心一言稠密模型部署 3.1 产品选择 3.2 环境选择 3.3 Python3.12安装 3.3 PaddlePaddle-GPU安装 3.4 FastDeploy-GPU安装 ​编辑3.…

深入探讨 C++ 中的浮点数数据类型

核心概念:IEEE 754 标准 C 中的浮点数(float, double, long double)在绝大多数现代系统上遵循 IEEE 754 标准。这个标准定义了浮点数在内存中的二进制表示方式、运算规则、特殊值(如无穷大、NaN)等。数据类型与精度 fl…

相机:以鼠标点为中心缩放(使用OpenGL+QT开发三维CAD)

很多软件中(Auto CAD、ODA等)支持以鼠标点为中心进行放缩操作,有什么黑科技吗? 本章节为相机原理和实现的补充内容,支持鼠标放缩时以鼠标点为中心进行放缩。 对应视频课程已上线,欢迎观看和支持~ https:…

​​XAMPP安全升级指南:修复CVE-2024-4577漏洞,从PHP 8.2.12升级至PHP 8.4.10​​

​​1. 背景与漏洞概述​​ 近期,PHP官方披露了一个高危漏洞 ​​CVE-2024-4577​​,该漏洞影响PHP 8.2.x及更早版本,可能导致远程代码执行(RCE)或信息泄露。由于XAMPP默认捆绑的PHP版本(如8.2.12)可能受此漏洞影响,建议用户尽快升级至最新的​​PHP 8.4.10​​(或官…

ES 压缩包安装

以下是 Elasticsearch (ES) 通过 .tar.gz 压缩包安装的详细步骤(适用于 Linux/macOS 系统): 1. 准备工作 1.1 检查系统依赖 Java 环境:ES 需要 JDK,推荐 OpenJDK 11/17(ES 7.x/8.x 兼容版本)。…

RoboRefer:面向机器人视觉-语言模型推理的空间参考

25年6月来自北航、北大和北京智源的论文“RoboRefer: Towards Spatial Referring with Reasoning in Vision-Language Models for Robotics”。 空间参考是实体机器人与三维物理世界交互的基本能力。然而,即使有了强大的预训练视觉-语言模型 (VLM),近期方…

【Unity】MiniGame编辑器小游戏(十)连连看【Link】

更新日期:2025年7月9日。 项目源码:获取项目源码 索引 连连看【Link】一、游戏最终效果二、玩法简介三、正式开始1.定义游戏窗口类2.规划游戏窗口、视口区域3.方块 Block①.定义方块类②.生成方块所有类型③.生成连连看棋盘④.绘制方块阵列4.连线 Line①.点击方块连线②.尝试…

Enable ADB Debugging Before Connect

If you don’t enable Developer Options and turn on USB Debugging before plugging in the cable, adb devices won’t detect the phone because the Android system doesn’t trust the connection yet. Here’s what you need to do step-by-step to fix this:✅ 1. Enab…

从互联网电脑迁移Dify到内网部署Dify方法记录

一、在互联网电脑上准备迁移文件1. 保存 Docker 镜像# 获取所有 Dify 相关镜像(根据实际容器名调整) docker ps --filter "namedify" --format "{{.Image}}" | sort -u > dify-images.list# 保存镜像为 .tar 文件 docker save $(…

【EGSR2025】材质+扩散模型+神经网络相关论文整理随笔(一)

MatSwap: Light-aware material transfers in images介绍任务:输入一张拍摄图像、示例材质纹理图像(这里跟BRDF无关,通常我们讲到材质一般指的是SVBRDF,但是这里的材质指的只是纹理)、用户为拍摄图像指定的遮罩区域&am…

饿了么el-upload上传组件报错:TypeError: ***.upload.addEventListener is not a function

在本地上传没有报这个错误,部署到服务器后会报这个错误,一开始以为是服务器配置等什么原因,但是一想这个报错应该还是在前端,接口都还没请求,不可能到后台去,后面搜了好几个AI也没有找到想要的答案或解决方…

淘宝直播与开源链动2+1模式AI智能名片S2B2C商城小程序的融合发展研究

摘要:本文聚焦于淘宝直播这一以“网红”内容为主的社交电商平台,深入分析其特点与流量入口优势。同时,引入开源链动21模式AI智能名片S2B2C商城小程序这一新兴概念,探讨二者融合的可能性与潜在价值。通过分析融合过程中的技术、市场…

【macos用镜像站体验】Claude Code入门使用教程和常用命令

一、下载安装nodejs # macOS 用户安装nodejs brew update brew install node二、安装官方Claude Code # 安装 Claude Code npm install -g anthropic-ai/claude-code # 查看版本 claude --version三、正式使用(国内镜像站) 今天发现的一个镜像站&…

算法学习笔记:11.冒泡排序——从原理到实战,涵盖 LeetCode 与考研 408 例题

在排序算法的大家族中,冒泡排序是最基础也最经典的算法之一。它的核心思想简单易懂,通过重复地走访待排序序列,一次比较两个相邻的元素,若它们的顺序错误就把它们交换过来,直到没有需要交换的元素为止。虽然冒泡排序的…