USING IRONBARCODE How to Build a Barcode Scanner API in C# Using IronBarcode Jordi Bardia 已发布:九月 29, 2025 下载 IronBarcode NuGet 下载 DLL 下载 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在双子座打开 向 Gemini 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 在.NET中构建C#扫描器API传统上需要复杂的扫描器SDK集成或有限的软件库。 使用IronBarcode,开发人员可以在几分钟内创建一个强大的、生产就绪的条码扫描器API。 这些可以轻松从图像、PDF,甚至是受损的扫描输入中处理条码数据。 本教程演示了如何使用ASP.NET Core在Windows上构建RESTful扫描器API,为硬件扫描器设备提供了可扩展的替代方案,同时保持企业级的准确性。 该API能够处理多种扫描器类型,处理二进制数据,并从任何支持的矩阵或表格格式中提取条码值。 我如何安装和设置IronBarcode? 开始使用IronBarcode就像安装一个NuGet包一样简单。 打开你的ASP.NET Core项目,并在包管理器控制台中运行此命令: Install-Package BarCode 安装后,向控制器添加IronBarcode命名空间,并用这个单行示例来测试库: using IronBarCode; // Simple test to verify installation var result = BarcodeReader.Read("test-barcode.png"); Console.WriteLine($"Scanned: {result.First().Value}"); using IronBarCode; // Simple test to verify installation var result = BarcodeReader.Read("test-barcode.png"); Console.WriteLine($"Scanned: {result.First().Value}"); IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 这段代码读取一个条码图像并输出其值。 BarcodeReader.Read()方法自动检测条码格式并返回结果集,使从任何支持的图像(jpeg、bmp、png、tiff)提取条码数据和处理数组或二进制数据格式变得非常简单。 我如何构建一个完整的扫描器API控制器? 用ASP.NET Core创建扫描器API涉及设置一个接收各种输入源参数的控制器。 这里是一个完整的实现: using Microsoft.AspNetCore.Mvc; using IronBarCode; using System.Drawing; namespace BarcodeScannerAPI.Controllers { [ApiController] [Route("api/[controller]")] public class ScannerController : ControllerBase { // Model for API responses public class ScanResult { public bool Success { get; set; } public List<string> BarcodeValues { get; set; } = new List<string>(); public string BarcodeFormat { get; set; } public string ErrorMessage { get; set; } } [HttpPost("scan-file")] public async Task<ActionResult<ScanResult>> ScanFile(IFormFile file) { if (file == null || file.Length == 0) return BadRequest(new ScanResult { Success = false, ErrorMessage = "No file uploaded" }); try { using var stream = new MemoryStream(); await file.CopyToAsync(stream); // Configure scanner options for better accuracy var options = new BarcodeReaderOptions { Speed = ReadingSpeed.Balanced, ExpectMultipleBarcodes = true, ExpectBarcodeTypes = BarcodeEncoding.All }; // Read barcodes from the uploaded file var results = BarcodeReader.Read(stream.ToArray(), options); if (results.Any()) { return Ok(new ScanResult { Success = true, BarcodeValues = results.Select(r => r.Value).ToList(), BarcodeFormat = results.First().BarcodeType.ToString() }); } return Ok(new ScanResult { Success = false, ErrorMessage = "No barcodes found" }); } catch (Exception ex) { return StatusCode(500, new ScanResult { Success = false, ErrorMessage = $"Processing error: {ex.Message}" }); } } [HttpPost("scan-base64")] public ActionResult<ScanResult> ScanBase64([FromBody] string base64Image) { try { // Convert Base64 string to byte array byte[] imageBytes = Convert.FromBase64String(base64Image); // Process with IronBarcode var results = BarcodeReader.Read(imageBytes); return ProcessResults(results); } catch (Exception ex) { return BadRequest(new ScanResult { Success = false, ErrorMessage = $"Invalid Base64 data: {ex.Message}" }); } } private ScanResult ProcessResults(BarcodeResults results) { if (results.Any()) { return new ScanResult { Success = true, BarcodeValues = results.Select(r => r.Value).ToList(), BarcodeFormat = results.First().BarcodeType.ToString() }; } return new ScanResult { Success = false, ErrorMessage = "No barcodes detected" }; } } } using Microsoft.AspNetCore.Mvc; using IronBarCode; using System.Drawing; namespace BarcodeScannerAPI.Controllers { [ApiController] [Route("api/[controller]")] public class ScannerController : ControllerBase { // Model for API responses public class ScanResult { public bool Success { get; set; } public List<string> BarcodeValues { get; set; } = new List<string>(); public string BarcodeFormat { get; set; } public string ErrorMessage { get; set; } } [HttpPost("scan-file")] public async Task<ActionResult<ScanResult>> ScanFile(IFormFile file) { if (file == null || file.Length == 0) return BadRequest(new ScanResult { Success = false, ErrorMessage = "No file uploaded" }); try { using var stream = new MemoryStream(); await file.CopyToAsync(stream); // Configure scanner options for better accuracy var options = new BarcodeReaderOptions { Speed = ReadingSpeed.Balanced, ExpectMultipleBarcodes = true, ExpectBarcodeTypes = BarcodeEncoding.All }; // Read barcodes from the uploaded file var results = BarcodeReader.Read(stream.ToArray(), options); if (results.Any()) { return Ok(new ScanResult { Success = true, BarcodeValues = results.Select(r => r.Value).ToList(), BarcodeFormat = results.First().BarcodeType.ToString() }); } return Ok(new ScanResult { Success = false, ErrorMessage = "No barcodes found" }); } catch (Exception ex) { return StatusCode(500, new ScanResult { Success = false, ErrorMessage = $"Processing error: {ex.Message}" }); } } [HttpPost("scan-base64")] public ActionResult<ScanResult> ScanBase64([FromBody] string base64Image) { try { // Convert Base64 string to byte array byte[] imageBytes = Convert.FromBase64String(base64Image); // Process with IronBarcode var results = BarcodeReader.Read(imageBytes); return ProcessResults(results); } catch (Exception ex) { return BadRequest(new ScanResult { Success = false, ErrorMessage = $"Invalid Base64 data: {ex.Message}" }); } } private ScanResult ProcessResults(BarcodeResults results) { if (results.Any()) { return new ScanResult { Success = true, BarcodeValues = results.Select(r => r.Value).ToList(), BarcodeFormat = results.First().BarcodeType.ToString() }; } return new ScanResult { Success = false, ErrorMessage = "No barcodes detected" }; } } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 这个控制器提供两个端点:一个用于文件上传,另一个用于Base64编码的图像。 ScanFile端点接受多部分表单数据,非常适合用户直接上传图像的Web应用程序。 流处理确保了内存使用的效率,而BarcodeReaderOptions配置在速度和准确性之间取得平衡。 ScanBase64端点处理图像以Base64字符串形式传输的场景,这是移动应用程序和API到API通信中的标准。 它能够从上传的图像或流中读取一维和二维(矩阵)条码。 输出 首先,我们使用Swagger来测试我们的端点。 在这里,你可以看到扫描器API端点: 现在,我们来测试它们并查看输出。 在这个例子中,我会用一个简单的字符串值"Hello World"编码的样品条码图像。 正如你在这里看到的,我们的程序已正确扫描了条码并检索了其中的数据。 扫描器能处理哪些不同的输入源? IronBarcode在处理各种输入格式时表现出灵活性。 除了标准图像,扫描器API还处理PDF、上传流和多种图形格式: // Scanning PDFs with multiple pages [HttpPost("scan-pdf")] public async Task<ActionResult<ScanResult>> ScanPdf(IFormFile pdfFile { using var stream = new MemoryStream(); await pdfFile.CopyToAsync(stream); // ReadPdf method handles multi-page documents var results = BarcodeReader.ReadPdf(stream.ToArray()); return ProcessResults(results); } // Processing from URL [HttpPost("scan-url")] public async Task<ActionResult<ScanResult>> ScanFromUrl([FromBody] string imageUrl) { using var client = new HttpClient(); var imageBytes = await client.GetByteArrayAsync(imageUrl); var results = BarcodeReader.Read(imageBytes); return ProcessResults(results); } // Scanning PDFs with multiple pages [HttpPost("scan-pdf")] public async Task<ActionResult<ScanResult>> ScanPdf(IFormFile pdfFile { using var stream = new MemoryStream(); await pdfFile.CopyToAsync(stream); // ReadPdf method handles multi-page documents var results = BarcodeReader.ReadPdf(stream.ToArray()); return ProcessResults(results); } // Processing from URL [HttpPost("scan-url")] public async Task<ActionResult<ScanResult>> ScanFromUrl([FromBody] string imageUrl) { using var client = new HttpClient(); var imageBytes = await client.GetByteArrayAsync(imageUrl); var results = BarcodeReader.Read(imageBytes); return ProcessResults(results); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel ReadPdf方法自动扫描PDF文档的所有页面,从运输标签、发票或多页报告中提取条码。 对于基于URL的扫描,API获取远程图像并处理它们,无需本地存储,理想地融合云存储服务或处理外部系统的图像。 现在,你可以看到更新后的Swagger UI,带有我们的新端点: 为了测试我们的新方法,我使用了一个包含两个条码样本的PDF。 第一个是带有URL的基本条码,第二个是我们最后一个例子中的基本字符串编码条码。 这是通过端点运行我们PDF时的输出: 正如你所见,它已正确检测到两个条码并从扫描的条码中提取了数据。 优化条码扫描器的性能和准确性 为特定用例微调扫描器显著提升了速度和准确性: var optimizedOptions = new BarcodeReaderOptions { // Speed settings: Faster, Balanced, Detailed, ExtremeDetail Speed = ReadingSpeed.Detailed, // Specify expected barcode types to reduce processing time ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128, // Enable parallel processing for batch operations Multithreaded = true, MaxParallelThreads = 4, // Define scanning area to focus on specific regions CropArea = new Rectangle(100, 100, 400, 200), // Optional: define specific scanning area // Apply image corrections for damaged barcodes ImageFilters = new ImageFilterCollection() { new SharpenFilter(), new ContrastFilter() } }; var optimizedOptions = new BarcodeReaderOptions { // Speed settings: Faster, Balanced, Detailed, ExtremeDetail Speed = ReadingSpeed.Detailed, // Specify expected barcode types to reduce processing time ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128, // Enable parallel processing for batch operations Multithreaded = true, MaxParallelThreads = 4, // Define scanning area to focus on specific regions CropArea = new Rectangle(100, 100, 400, 200), // Optional: define specific scanning area // Apply image corrections for damaged barcodes ImageFilters = new ImageFilterCollection() { new SharpenFilter(), new ContrastFilter() } }; IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 注意:CropArea属性允许扫描器在图像中专注于特定的矩阵或表格区域。 然而,一些对象或条码位置可能落在定义区域之外,导致扫描器失败。 如果发生这种情况,只需删除或注释掉CropArea属性。 IronBarcode将识别并解码默认完整图像中的所有条码数据,确保扫描器能够处理任何Windows或Microsoft运行时环境。 为已知的扫描器类型使用优化的选项可减少处理时间。嵌入式图像滤镜增强了低质量输入的条码可读性。 开发人员可以配置扫描器SDK,枚举可用的扫描器,整合UI组件或视频捕捉设备。 摘要 使用IronBarcode构建C#扫描器API将复杂的条码处理转化为简单的REST端点。 该库从完美的数字条码到具有挑战性的现实世界捕获都能处理,提供企业级的准确性,而无需硬件依赖。 支持多种输入格式,高级图像校正和优化的性能设置,开发人员可以在几分钟内部署生产就绪的扫描解决方案。 开始免费试用 以实现你的扫描器API,或者探索完整的文档以获取高级特性,如批处理和机器学习驱动的检测。 常见问题解答 使用 IronBarcode 构建扫描器 API 的主要好处是什么? IronBarcode 允许开发人员以最小的复杂性快速创建功能强大、可投入生产的条形码扫描器 API。它通过消除复杂的扫描器 SDK 集成来简化过程。 IronBarcode 可以处理损坏的条形码输入吗? 是的,IronBarcode 旨在即使在扫描输入损坏时也能处理条形码数据,从而确保在实际应用中的高可靠性。 IronBarcode 在 C# 扫描器 API 中可以处理哪些类型的输入? IronBarcode 可以处理来自各种输入的条形码数据,如图像和 PDF,提供多样化的解决方案以满足不同的扫描需求。 是否有使用 IronBarcode 构建条形码扫描器 API 的教程? 是的,网页上提供了一个全面的教程,其中包含代码示例,以指导开发人员构建使用 IronBarcode 的 RESTful 条形码扫描端点。 使用 IronBarcode 可以多快设置条形码扫描器 API? 使用 IronBarcode,开发人员可以在几分钟内设置条形码扫描器 API,从而简化开发时间和精力。 IronBarcode 需要任何复杂的 SDK 集成吗? 不,IronBarcode 消除了复杂的扫描器 SDK 集成的需要,使开发人员更容易实现条形码扫描功能。 使用 IronBarcode 构建扫描器 API 使用哪种编程语言? IronBarcode 与 C# 一起用于构建扫描器 API,利用 .NET 框架实现稳健的性能。 Jordi Bardia 立即与工程团队聊天 软件工程师 Jordi 最擅长 Python、C# 和 C++,当他不在 Iron Software 利用这些技能时,他就在游戏编程。分享产品测试、产品开发和研究的责任,Jordi 在持续的产品改进中增加了巨大的价值。多样的经验使他面临挑战并保持投入,他表示这是在 Iron Software 工作的最喜欢的方面之一。Jordi 在佛罗里达州迈阿密长大,并在佛罗里达大学学习计算机科学和统计学。 相关文章 已发布十二月 18, 2025 IronBarcode 与 Open Source Barcode Reader .NET 的比较 Learn how to read barcodes in C# using IronBarcode 阅读更多 已发布十二月 18, 2025 C# 中的数据矩阵生成器:IronBarcode 完整指南 数据矩阵生成器C#教程。了解如何使用IronBarcode创建ECC200数据矩阵条形码。简单的2D条码生成代码示例。 阅读更多 已发布十月 19, 2025 How to Print Barcodes in Crystal Reports with VB.NET Generate and print barcodes in Crystal Reports using VB.NET. Step-by-step tutorial with IronBarcode SDK for reliable barcode integration. 阅读更多 How to Integrate a Barcode .NET Component in C#How to Create a MAUI Barcode Scanne...
已发布十二月 18, 2025 IronBarcode 与 Open Source Barcode Reader .NET 的比较 Learn how to read barcodes in C# using IronBarcode 阅读更多
已发布十二月 18, 2025 C# 中的数据矩阵生成器:IronBarcode 完整指南 数据矩阵生成器C#教程。了解如何使用IronBarcode创建ECC200数据矩阵条形码。简单的2D条码生成代码示例。 阅读更多
已发布十月 19, 2025 How to Print Barcodes in Crystal Reports with VB.NET Generate and print barcodes in Crystal Reports using VB.NET. Step-by-step tutorial with IronBarcode SDK for reliable barcode integration. 阅读更多