How to Fix Barcode Orientation in C# | IronBarcode

如何在 C# 中修复条形码方向</#35;

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronBarcode 可使用其内置的自动旋转功能自动纠正条形码方向,该功能可检测并读取任何角度的条形码,无需手动旋转图像,确保即使从倾斜或旋转的图像中也能准确读取条形码。

条码方向是指条码在产品或文件上的打印或显示角度。 可以调整到不同的角度以适应各种布局和设计要求。 最常见的方向是水平方向,条码从左至右对齐,这是标准且最广泛使用的格式。 任何非零的方向度数对库检测和获取值来说都是一个挑战。 IronBarcode 提供自动方向校正,检测任何非零方向的条码和二维码。

快速入门:一行完成自动旋转图像校正

以下是如何轻松纠正方向:使用 IronBarcode 的自动旋转选项(默认已启用),只需一行代码,即使图像旋转,也能准确读取条形码。

  1. 使用 NuGet 包管理器安装 https://www.nuget.org/packages/BarCode

    PM > Install-Package BarCode
  2. 复制并运行这段代码。

    var result = IronBarCode.BarcodeReader.Read("rotatedImage.png", new IronBarCode.BarcodeReaderOptions { AutoRotate = true });
  3. 部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronBarcode

    arrow pointer

如何修复应用程序中的 BarCode 方向?

要应用自动方向校正,请将AutoRotate属性设置为 true。 默认情况下,该属性设置为 true,因此您无需进行任何操作。 读取任何非零方向的条码图像应开箱即用。

自动旋转功能在处理 各种条形码格式(包括 QR 码、数据矩阵和传统线性条形码)时特别有用。 无论您是从图像中读取条形码,还是从 PDF 文档中扫描,方向校正都能确保可靠的结果。

让我们使用下面的图像作为示例。 Download the following 20° rotation and 45° rotation sample images.

Barcode rotated 20 degrees clockwise showing vertical stripes at an angle for orientation testing
Barcode rotated 45 degrees showing diagonal orientation requiring correction

实现自动旋转需要哪些代码?

:path=/static-assets/barcode/content-code-examples/how-to/image-orientation-correct-autorotate.cs
using IronBarCode;
using System;

BarcodeReaderOptions myOptionsExample = new BarcodeReaderOptions()
{
    // Turn on auto rotation in ML detection
    AutoRotate = true,
};

var results = BarcodeReader.Read("rotate20.png", myOptionsExample);

// Print out the value
Console.WriteLine(results[0].Value);
$vbLabelText   $csharpLabel

自动旋转功能利用先进的机器学习算法自动检测条形码方向。 在处理单张图像中的多个条形码或处理不同方向的成批图像时,这一点尤为重要。

使用不同的旋转角度

IronBarcode 的方向校正功能可无缝处理各种旋转角度。 下面是一个演示以不同旋转角度读取 BarCode 的示例:

using IronBarCode;
using System;
using System.Collections.Generic;

// Process multiple rotated images
var rotatedImages = new List<string> { "rotate20.png", "rotate45.png", "rotate90.png" };
var options = new BarcodeReaderOptions
{
    AutoRotate = true,
    // Combine with other reading optimizations
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = false
};

foreach (var imagePath in rotatedImages)
{
    var results = BarcodeReader.Read(imagePath, options);
    if (results.Length > 0)
    {
        Console.WriteLine($"Image: {imagePath} - Barcode Value: {results[0].Value}");
        Console.WriteLine($"Barcode Type: {results[0].BarcodeType}");
        Console.WriteLine($"Rotation Applied: {results[0].WasRotated}");
    }
}
using IronBarCode;
using System;
using System.Collections.Generic;

// Process multiple rotated images
var rotatedImages = new List<string> { "rotate20.png", "rotate45.png", "rotate90.png" };
var options = new BarcodeReaderOptions
{
    AutoRotate = true,
    // Combine with other reading optimizations
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = false
};

foreach (var imagePath in rotatedImages)
{
    var results = BarcodeReader.Read(imagePath, options);
    if (results.Length > 0)
    {
        Console.WriteLine($"Image: {imagePath} - Barcode Value: {results[0].Value}");
        Console.WriteLine($"Barcode Type: {results[0].BarcodeType}");
        Console.WriteLine($"Rotation Applied: {results[0].WasRotated}");
    }
}
$vbLabelText   $csharpLabel

性能考虑

虽然 AutoRotate 默认启用,但了解其性能影响有助于优化条码读取工作流程。 该功能可与 IronBarcode 的读取速度选项有效配合,使您能够根据应用程序的需求在准确性和性能之间取得平衡。

对于需要高速处理的应用,您可以将 AutoRotate 与其他优化技术结合使用:

var fastReadOptions = new BarcodeReaderOptions
{
    AutoRotate = true,
    Speed = ReadingSpeed.Faster,
    // Specify expected barcode types to improve performance
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    // Define crop region if barcode location is predictable
    CropArea = new System.Drawing.Rectangle(100, 100, 300, 300)
};
var fastReadOptions = new BarcodeReaderOptions
{
    AutoRotate = true,
    Speed = ReadingSpeed.Faster,
    // Specify expected barcode types to improve performance
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    // Define crop region if barcode location is predictable
    CropArea = new System.Drawing.Rectangle(100, 100, 300, 300)
};
$vbLabelText   $csharpLabel

集成图像校正功能

AutoRotate 与 IronBarcode 的图像校正滤镜完美兼容。 在处理质量较差的图片时,如果图片还被旋转过,您可以进行多重校正:

var advancedOptions = new BarcodeReaderOptions
{
    AutoRotate = true,
    // Apply additional image corrections
    ImageFilters = new ImageFilterCollection
    {
        new AdaptiveThresholdFilter(),
        new BrightnessFilter(1.2f),
        new ContrastFilter(1.5f)
    }
};

var results = BarcodeReader.Read("low-quality-rotated-barcode.jpg", advancedOptions);
var advancedOptions = new BarcodeReaderOptions
{
    AutoRotate = true,
    // Apply additional image corrections
    ImageFilters = new ImageFilterCollection
    {
        new AdaptiveThresholdFilter(),
        new BrightnessFilter(1.2f),
        new ContrastFilter(1.5f)
    }
};

var results = BarcodeReader.Read("low-quality-rotated-barcode.jpg", advancedOptions);
$vbLabelText   $csharpLabel

方向校正的最佳实践

1.默认行为:由于 AutoRotate 默认启用,因此通常不需要显式设置,除非您之前已禁用它或想要确保它处于活动状态。

2.与裁剪区域相结合:使用裁剪区域提高性能时,请确保裁剪区域足够大,以容纳旋转后的条形码。

3.多线程处理:AutoRotate 具有线程安全功能,可与异步和多线程操作完美配合,因此适用于大容量条形码处理应用程序。

4.格式特定考虑因素:虽然 AutoRotate 适用于所有受支持的条形码格式,但某些格式(如 PDF417 和 Data Matrix)可能需要额外的格式特定选项。

在许多情况下,纠正旋转可能不够,还需要使用滤镜。 在以下文章中了解如何使用图像过滤器:"如何使用图像校正过滤器"。

常见问题解答

如何修复 C# 应用程序中旋转的 BarCode 图像?

IronBarcode 使用其内置的 AutoRotate 功能自动修复旋转的条形码图像。只需在 BarcodeReaderOptions(条码阅读器选项)中将 AutoRotate 设置为 true(默认情况下已启用),该库即可检测并读取任意角度的条码,而无需手动旋转。

哪些 BarCode 方向可以自动纠正?

IronBarcode 的自动旋转(AutoRotate)功能可检测并纠正任何非零度方向,包括 20°、45°、90°、180° 和 270°旋转。该功能适用于各种条码格式,包括 QR 码、数据矩阵和传统线性条码。

我需要编写特殊代码来处理倾斜条形码吗?

无需特殊代码。IronBarcode 的自动旋转(AutoRotate)属性默认已启用,因此方向校正功能开箱即用。您只需一行代码: var result = IronBarCode.BarcodeReader.Read("rotatedImage.png");

方向校正可以与 PDF 文档一起使用吗?

是的,IronBarcode 的自动旋转功能可在扫描 PDF 文档以及图像中的条形码时无缝工作。无论源格式如何,其方向校正功能都能确保可靠的结果。

自动方位检测采用的是什么技术?

IronBarcode 使用先进的机器学习算法自动检测条码方向。这种智能方法可确保准确读取条形码,即使是倾斜或旋转的图像,也无需人工干预。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
Nuget 下载 2,108,094 | 版本: 2026.3 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package BarCode
运行示例 观看您的字符串变成 BarCode。