C#代码实现扫描图片中的条形码
作者:SunnyJourney
时间:2026-07-01
来源:互联网
浏览:0
概述了在.NET项目中使用C#实现一维条码扫描的方法,包括通过FreeSpire.Barcode库从图片文件、内存流和位图对象读取条码,并支持指定条码类型以提高识别效率。文中还对比了ZXing.NET、IronBarcode和Aspose.BarCode等免费与商用方案,并强调了图片质量对识别率的影响。
在实际业务系统中,条码的识别需求几乎无处不在——仓储物流的包裹追踪、零售业的商品扫码、票务系统的票据验证、医疗行业的样本追溯……这些场景都依赖对条码图片的自动化解析。
下面,我们就来聊聊如何通过 C# 在 .NET 项目中实现一维条码扫描。内容包括从图片文件、内存流中读取条码,以及获取条码位置信息等实用示例,希望能帮到正在做相关功能的朋友。
**注意**:本文使用的免费库 FreeSpire.Barcode **不支持**二维码(QR Code、Data Matrix 等)的扫描,这一点需要提前说明。
所有 `Scan` 和 `ScanInfo` 方法都提供了带 `BarCodeType` 参数的重载版本,可以指定只识别特定类型的一维条码(如 Code128、EAN-13 等),这样能有效提高识别效率。
本文内容来源于互联网,如有侵权请联系删除。
下面,我们就来聊聊如何通过 C# 在 .NET 项目中实现一维条码扫描。内容包括从图片文件、内存流中读取条码,以及获取条码位置信息等实用示例,希望能帮到正在做相关功能的朋友。
**注意**:本文使用的免费库 FreeSpire.Barcode **不支持**二维码(QR Code、Data Matrix 等)的扫描,这一点需要提前说明。
一、环境配置与依赖安装
先创建一个 .NET 项目,控制台应用或桌面程序都可以。然后通过 NuGet 包管理器安装依赖库:Install-Package FreeSpire.Barcode或者在 .NET CLI 中执行:
dotnet add package FreeSpire.Barcode安装完成后,在代码文件顶部引入命名空间:
using Spire.Barcode;
二、核心 API 说明
条码扫描主要靠 `BarcodeScanner` 类完成。下表列出了几个常用方法,在实际使用中可以根据场景灵活选择:| 方法 | 说明 |
|---|---|
Scan(string path) | 从图片文件中扫描所有条码 |
Scan(Stream stream) | 从数据流中扫描所有条码 |
Scan(Bitmap bitmap) | 从位图对象中扫描所有条码 |
ScanOne(...) | 快速扫描单一条码(适用于图像中只包含一个条码的场景) |
ScanInfo(...) | 扫描并获取条码类型、位置坐标等详细信息 |
三、从图片文件扫描条码
3.1 扫描单张图片中的条码
最简单的场景就是扫描一张图片里已有的条码。下面这个示例演示了如何从图片文件中读取 Code128 条码的内容:using Spire.Barcode;
class Program
{
static void Main(string[] args)
{
// 指定图片路径
string imagePath = @"C:barcode-sample.png";
// 扫描图片中的条码,仅识别 Code128 类型
string[] results = BarcodeScanner.Scan(imagePath, BarCodeType.Code128);
// 输出识别结果
if (results.Length > 0)
{
foreach (string result in results)
{
Console.WriteLine("识别到条码内容: " + result);
}
}
else
{
Console.WriteLine("未识别到任何条码。");
}
}
}
`Scan()` 方法返回的是一个字符串数组,这意味着它可以处理一张图片中包含多个条码的情况。如果你确定图片里只有一个条码,用 `ScanOne()` 方法会更直接:
string result = BarcodeScanner.ScanOne(imagePath, BarCodeType.Code128);
3.2 扫描多种条码类型
实际业务中,一张图片可能包含不同类型的一维条码,比如 Code 128 和 EAN-13 混合出现。如果事先不确定类型,可以直接调用不指定类型的方法重载:string[] results = BarcodeScanner.Scan(imagePath);
四、从数据流扫描条码
在 Web 应用或微服务架构里,用户上传的图片通常以数据流(Stream)的形式存在,不需要写入磁盘就能直接处理。这样做的好处是减少 I/O 开销,提升响应速度,也更适合云端部署场景。using System;
using System.IO;
using Spire.Barcode;
namespace BarcodeScanDemo
{
class StreamScan
{
static void Main(string[] args)
{
string imagePath = @"C:Barcodestream_barcode.jpg";
// 1. 将图片转换为内存流(适配上传流、网络流直接使用)
using (FileStream fs = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
using (MemoryStream ms = new MemoryStream())
{
fs.CopyTo(ms);
// 流指针复位(关键:必须将流位置重置到起始位置)
ms.Position = 0;
// 2. 从内存流中扫描条码(自动检测类型)
string[] results = BarcodeScanner.Scan(ms);
// 输出结果
if (results != null && results.Length > 0)
{
Console.WriteLine("流数据条码识别结果:" + results[0]);
}
}
}
}
}
除了 `Stream` 输入,`Scan()` 方法还支持直接从 `Bitmap` 对象进行扫描,方便与现有的图像处理流程集成。
五、知识扩展
在 C# 中识别图片里的条形码,方案其实不止一种。具体选哪个,主要看项目的预算、性能需求以及功能要求。 **1. 免费开源方案:ZXing.NET** 对于绝大多数开发者来说,这通常是首选。它免费,功能也足够强大。 **安装**:在 NuGet 包管理器控制台中执行:Install-Package ZXing.Net**从图片文件识别**:这是最基础的功能,几行代码就能搞定。
using ZXing;
public string ScanBarcodeFromFile(string imagePath)
{
var reader = new BarcodeReader();
var result = reader.Decode(imagePath);
if (result != null)
{
Console.WriteLine($"识别成功!类型: {result.BarcodeFormat}, 内容: {result.Text}");
return result.Text;
}
else
{
Console.WriteLine("未识别到条形码。");
return null;
}
}
**从内存中的 Bitmap 识别**:如果你的图片以 `Bitmap` 对象存在于内存中,同样可以轻松处理。
using System.Drawing;
using ZXing;
public string ScanBarcodeFromBitmap(Bitmap bitmap)
{
var reader = new BarcodeReader();
var result = reader.Decode(bitmap);
return result?.Text;
}
**识别图片中的多个条码**:ZXing 也支持一次识别多个条码。
using ZXing; using ZXing.Common; using System.Drawing; public List**处理中文内容**:如果条码内容是中文,识别时可能出现乱码。强制指定字符编码可以解决这个问题。ScanMultipleBarcodes(Bitmap bitmap) { var reader = new BarcodeReader(); var results = reader.DecodeMultiple(bitmap); if (results != null && results.Length > 0) { return results.Select(r => r.Text).ToList(); } return null; }
var reader = new BarcodeReader
{
Options = new DecodingOptions
{
CharacterSet = "UTF-8"
}
};
**2. 商用方案:简单高效**
对于有预算的企业级应用,商用库能提供更便捷的 API、更全面的技术支持以及更复杂的条码识别能力。
**IronBarcode**
特点:API 设计极为简洁,甚至一行代码就能完成识别。它还提供了调试视图,方便开发时定位问题。
**安装**:
Install-Package BarCode**代码示例**:
using IronBarCode;
public string ScanBarcodeWithIron(string imagePath)
{
var result = BarcodeReader.Read(imagePath).FirstOrDefault();
return result?.Value;
}
**Aspose.BarCode**
特点:功能全面的专业级库,提供精细的配置选项,适合对识别速度和准确性要求极高的场景。
**安装**:
Install-Package Aspose.BarCode**代码示例**:
using Aspose.BarCode.BarCodeRecognition;
public string ScanBarcodeWithAspose(string imagePath)
{
using (BarCodeReader reader = new BarCodeReader(imagePath, DecodeType.AllSupportedTypes))
{
foreach (BarCodeResult result in reader.ReadBarCodes())
{
Console.WriteLine($"Code Type: {result.CodeType}, Code Text: {result.CodeText}");
return result.CodeText;
}
}
return null;
}
六、总结
到这里,我们已经走完了在 .NET 项目中用 C# 实现一维条码扫描的完整流程——从环境配置、单张图片扫描、数据流处理,到多码识别和性能优化,各个环节都有涉及。 关键要点可以归纳为: - `BarcodeScanner.Scan()` 和 `ScanOne()` 是条码识别的核心方法,支持图片文件、Stream 流和 Bitmap 对象三种输入方式。 - `ScanInfo()` 能获取条码类型和位置坐标,方便后续做区域标注或数据分析。 - Web 应用中推荐使用内存流直接处理上传图片,省去磁盘 I/O 的开销。 - 条码识别率受图片质量影响较大,需要关注静区、分辨率和清晰度。 - 通过指定条码类型、缩小图片尺寸等方法,可以有效提升扫描速度。 条码识别作为自动化数据处理的基础环节,稳定性和准确度直接影响业务流程的效率。掌握了这些技术要点之后,你可以根据实际需求灵活构建适合自己的二维(注:此处应为“一维”)条码扫描解决方案。
作者最新文章
图几
2026-09-16 17:43
SQL中ROUND函数对0.5的处理机制及强制四舍五入方法
2026-09-15 14:19
JS金额计算怎么避免四舍五入误差
2026-09-14 17:32
韩国8月携号转网数据:Galaxy Z8系列iPhone用户转化率约为Z7系列2倍
2026-09-08 17:02
AE基础教程:如何创建合成并制作关键帧动画
2026-09-04 09:27
上一篇:
C++异常机制:抛出、捕获与栈展开
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多
Windows 10
Windows
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式
Windows/macOS/Linux
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















