如何在 C# 中从多页 GIF 和 TIFF 图像中读取条形码

如何用 C# 从多页 GIF 和 TIFF 中读取条形码</#35;

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

IronBarcode 可自动处理多页 TIFF 和 GIF 动画文件,无需手动分帧,只需调用一个 BarcodeReader.Read 方法即可提取图像文件中每一帧或每一页的所有条形码。

快速入门:从多页 TIFF 或 GIF 文件中完整读取条形码

IronBarcode 可加载多页 TIFF 或动画 GIF 文件,并通过一个方法调用提取所有条形码。 无需分帧或手动预处理--将文件路径传递给 BarcodeReader.Read 即可获得快速结果。

Nuget Icon立即开始使用 NuGet 创建 PDF 文件:

  1. 使用 NuGet 包管理器安装 IronBarcode

    PM > Install-Package BarCode

  2. 复制并运行这段代码。

    IronBarCode.BarcodeResults results = IronBarCode.BarcodeReader.Read("multiPageImage.tiff");
  3. 部署到您的生产环境中进行测试

    立即开始在您的项目中使用 IronBarcode,免费试用!
    arrow pointer

如何读取多帧 GIF 和 TIFF 图像?

<! -- 待办事项:在此处添加图片 --> <! --介绍实现的示意图 --> <!--说明:说明代码概念的图表或截图 -->

使用 IronBarcode 读取多帧 GIF 和 TIFF 图像与读取单个图像一样简单,因为 IronBarcode 可以轻松地将多页图像文件导入到BarcodeReader.Read方法中。 您不需要准备图片,因为所有的处理都在库中进行了内部化。 如需全面了解 IronBarcode 的功能,请查看我们的 功能页面

为什么 IronBarcode 可以自动处理多帧图像?

IronBarcode 可自动处理多帧图像,简化您的工作流程。 传统的 BarCode 读取库在处理前通常需要从 GIF 动画中提取单帧或从 TIFF 文件中分离页面。 这增加了不必要的复杂性和潜在的故障点。 IronBarcode 的智能帧检测功能通过内部解析图像结构并自动迭代每个帧或页面,消除了这一负担。 这种方法可确保无论帧数多少都能获得一致的结果,同时通过优化内存管理保持高性能。

下面的代码示例演示了如何读取多页 GIF 和 TIFF 文件:

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-multi-page-frame-tiff-gif-read-tif.cs
using IronBarCode;
using System;

// Read barcode from TIF image
BarcodeResults results = BarcodeReader.Read("sample.tif");

// Output the barcodes value to console
foreach (var result in results)
{
    Console.WriteLine(result.Value);
}
Imports IronBarCode
Imports System

' Read barcode from TIF image
Private results As BarcodeResults = BarcodeReader.Read("sample.tif")

' Output the barcodes value to console
For Each result In results
	Console.WriteLine(result.Value)
Next result
$vbLabelText   $csharpLabel

多页阅读支持哪些图像格式?

IronBarcode 的多页读取功能超出了 GIF 和 TIFF 格式。 该库支持所有标准图像格式,包括 JPEG、PNG、BMP 和用于单页图像的 SVG。 具体到多页面支持,TIFF 和动画 GIF 是主要格式。 TIFF 的用途特别广泛,它可以用各种压缩方法存储多个全分辨率图像,是文档扫描的理想选择。 动画 GIF 虽然只有 256 种颜色,但却能将多个条形码框架以紧凑、网络友好的格式存储。 对于专业需求,您还可以从 PDF 文档中读取条形码,这些文档通常包含多个内嵌条形码的页面。

何时应使用多帧图像进行条形码扫描?

多帧图像是多种业务场景的理想选择。 文件管理系统使用多页 TIFF 文件作为标准,用于存储扫描发票、运输文件或表格,其中每一页都可能包含不同的 BarCode。 制造和物流业务经常使用 GIF 动画来创建可视化工作流程,显示多种条形码状态或顺序扫描指令。 批处理应用程序可以从多帧格式中获益,因为它们可以减少文件管理开销--您无需处理数百个单独的图像文件,只需处理一个多帧文件即可。此外,在实现从流中读取条形码时,多帧格式可以显著减少内存分配并提高性能。

如何将图像转换为 GIF 和 TIFF?

<! -- 待办事项:在此处添加图片 --> <! -- 将图像转换为 gif 和 tiff 的实现示意图 --> <!--说明:说明代码概念的图表或截图 -->

了解如何使用我们的开源库 IronDrawing将图像转换为多页 TIFF 和 GIF。 下面的代码示例展示了如何生成多页 GIF 或 TIFF 图像。 在将来自不同来源的多个条形码图像合并为一个文件以进行高效处理时,这一功能尤其有用。

创建多帧 TIFF 文件的过程是怎样的?

创建多帧 TIFF 文件涉及将多个图像源合并到一个 TIFF 容器中。 首先将单个图像作为位图对象加载到内存中。 IronDrawing 的 AnyBitmap 类提供了处理各种图像格式的统一接口,可自动管理格式转换并确保兼容性。 在创建多帧 TIFF 时,库会优化压缩设置,以平衡文件大小和图像质量,这对于保持条形码的可读性至关重要。

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-multi-page-frame-tiff-gif-create-tiff-gif.cs
using IronBarCode;
using IronSoftware.Drawing;
using System.Collections.Generic;

// Import images
List<AnyBitmap> images = new List<AnyBitmap>()
{
    AnyBitmap.FromFile("image1.png"),
    AnyBitmap.FromFile("image2.png"),
    AnyBitmap.FromFile("image3.png"),
    AnyBitmap.FromFile("image4.jpg"),
    AnyBitmap.FromFile("image5.jpg")
};

// Convert TIFF from images
AnyBitmap tiffImage = AnyBitmap.CreateMultiFrameTiff(images);

// Export TIFF
tiffImage.SaveAs("multiframetiff.tiff");

// Convert GIF from images
AnyBitmap gifImage = AnyBitmap.CreateMultiFrameGif(images);

// Export GIF
gifImage.SaveAs("multiframegif1.gif");
Imports IronBarCode
Imports IronSoftware.Drawing
Imports System.Collections.Generic

' Import images
Private images As New List(Of AnyBitmap)() From {AnyBitmap.FromFile("image1.png"), AnyBitmap.FromFile("image2.png"), AnyBitmap.FromFile("image3.png"), AnyBitmap.FromFile("image4.jpg"), AnyBitmap.FromFile("image5.jpg")}

' Convert TIFF from images
Private tiffImage As AnyBitmap = AnyBitmap.CreateMultiFrameTiff(images)

' Export TIFF
tiffImage.SaveAs("multiframetiff.tiff")

' Convert GIF from images
Dim gifImage As AnyBitmap = AnyBitmap.CreateMultiFrameGif(images)

' Export GIF
gifImage.SaveAs("multiframegif1.gif")
$vbLabelText   $csharpLabel

从上面的代码片段中,我们首先将图像文件导入到 AnyBitmap 对象列表中,从而对图像文件进行分组。 在调用 AnyBitmap.CreateMultiFrameTiffAnyBitmap.CreateMultiFrameGif 方法分别获取多页面 TIFF 和多页面 GIF 对象时,将此列表用作参数。

GIF 和 TIFF 格式在条形码存储方面有何不同?

多页 GIF 和 TIFF 都提供了将图像分组为单个文件的方法,但两者有很大不同:

方面 多页GIF 多页TIFF
压缩 GIF图像使用无损压缩,这意味着压缩过程中不会丢失任何图像数据。与有损压缩格式相比,这会导致文件体积相对较大。 TIFF 文件可以使用多种压缩方法,包括无损压缩(例如 LZW)和有损压缩(例如 JPEG)。这种灵活性使得 TIFF 文件能够在文件大小和图像质量之间取得平衡。
颜色深度 GIF 最多支持 256 种颜色(8 位色深),与其他格式相比,这方面存在局限性。这种有限的调色板会导致细节和色彩准确度的损失,尤其对于照片和带有渐变的图像而言更是如此。 TIFF 支持多种颜色深度,包括 1 位(二进制)、8 位(256 色)、24 位(真彩色)等等。这种灵活性使得 TIFF 能够存储具有不同颜色细节级别的图像。
透明度 GIF 支持二元透明度,这意味着其中一种颜色可以完全透明,而其余颜色则完全不透明。这种缺乏局部透明度的现象有时会导致图像在平滑过渡处出现锯齿状边缘。 TIFF 支持多种透明度形式,包括二值透明度(类似于 GIF)和 Alpha 通道透明度。Alpha 通道透明度可实现平滑过渡和半透明像素,从而提供高质量的透明效果。
动画片 GIF 通过将多个帧合并到一个文件中来支持简单的动画。每个帧都可以设置自己的时间延迟,从而创建基本的动画形式。GIF 动画在网络上得到广泛支持。 TIFF格式并非主要为动画而设计。虽然它可以存储多张图像,但它不像GIF那样内置动画支持。多页TIFF文件中的每一页通常都是一张单独的图像,而不是动画序列中的一帧。

多页条形码图像应选择哪种格式?

根据您的具体使用情况在 GIF 和 TIFF 之间进行选择。 在处理需要精确保留细节的高分辨率条形码图像时,如在文档归档或专业扫描应用中,请选择 TIFF。 TIFF 支持各种压缩方法和颜色深度,因此非常适合在不同类型的条形码中保持条形码质量,包括具有精细细节的条形码,如 2D Data Matrix 代码

如果文件大小是个问题,而您的条形码又是简单的线性格式(如 Code 39 或 Code 128),请选择 GIF。GIF 广泛的网络兼容性使其适用于用户可能预览条形码序列的在线应用程序。 不过,对于复杂的 QR 代码或带有颜色渐变的 BarCode,应避免使用 GIF,因为 256 色的限制会影响可读性。

文件大小有哪些注意事项?

不同格式的文件大小差异很大,会影响存储、传输和处理速度。 无损压缩的 TIFF 文件在 300 DPI 下,每个条形码图像的大小通常在 10-50KB 之间,适合存档质量。 使用 TIFF 中的 JPEG 压缩技术,尺寸可缩小 70-80%,同时保持可接受的条形码可读性。 由于 GIF 文件的调色板有限,因此 GIF 文件通常较小,标准条形码平均每帧 5-15KB 左右。 在实施具有特定性能要求的条形码读取时,应考虑到较小的文件处理速度更快,但在边缘情况下可能会牺牲准确性。

如何配置高级条码读取选项?

<! -- 待办事项:在此处添加图片 --> <! -- 读取多帧 gif 和 tiff 图像的实现示意图 --> --> <!--说明:说明代码概念的图表或截图 -->

虽然 IronBarcode 可以直接使用,但某些图像可能需要配置BarcodeReaderOptions类才能实现准确**快速的**条形码读取。 在"如何从图像文件(jpg、png、gif、tiff、svg、bmp)"文章中查找有关本类的更多信息。 有关详细的 API 文档,请参阅 BarcodeReaderOptions 参考资料

何时应使用图像过滤器以提高准确性?

在处理次优图像质量时,图像过滤器变得至关重要--这是多帧文件的常见情况,不同帧之间的质量可能不同。 当条形码因扫描仪限制而显得模糊、因光线条件差而对比度低或因压缩伪影而含有噪点时,应用过滤器。 IronBarcode 中的图像校正功能包括针对不同光线条件的自适应阈值处理、针对运动模糊的锐化滤镜以及针对褪色印刷品的对比度增强。 对于多帧文件来说,过滤器尤为重要,因为它们无需人工干预即可补偿帧间的质量变化。

下面的代码片段演示了在 BarcodeReaderOptions 类中配置属性:

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-multi-page-frame-tiff-gif-advance.cs
using IronBarCode;
using System;

// Configure filters
ImageFilterCollection filters = new ImageFilterCollection()
{
    new SharpenFilter(3.5f),
    new ContrastFilter(2)
};

// Configure options
BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    ExpectBarcodeTypes = IronBarCode.BarcodeEncoding.QRCode,
    ImageFilters = filters,
    ExpectMultipleBarcodes = true,
    Speed = ReadingSpeed.Balanced
};

// Read barcode from TIF image
BarcodeResults results = BarcodeReader.Read("sample.tif", options);

// Output the barcodes value to console
foreach (var result in results)
{
    Console.WriteLine(result.Value);
}
Imports IronBarCode
Imports System

' Configure filters
Private filters As New ImageFilterCollection() From {
	New SharpenFilter(3.5F),
	New ContrastFilter(2)
}

' Configure options
Private options As New BarcodeReaderOptions() With {
	.ExpectBarcodeTypes = IronBarCode.BarcodeEncoding.QRCode,
	.ImageFilters = filters,
	.ExpectMultipleBarcodes = True,
	.Speed = ReadingSpeed.Balanced
}

' Read barcode from TIF image
Private results As BarcodeResults = BarcodeReader.Read("sample.tif", options)

' Output the barcodes value to console
For Each result In results
	Console.WriteLine(result.Value)
Next result
$vbLabelText   $csharpLabel

多页面文件应使用哪些性能设置?

多页面文件的性能优化需要根据您的要求在速度和准确性之间取得平衡。 对于对速度要求较高的大批量处理,可使用 ReadingSpeed.FasterReadingSpeed.Fastest ,这样可降低扫描的彻底性,但可显著提高吞吐量--非常适合在受控环境中打印清晰的条形码。 对于准确性至关重要的关键任务应用程序,ReadingSpeed.Detailed 可确保以处理时间为代价获得最大检测率。ReadingSpeed.Balanced设置为大多数业务应用提供了最佳的中间点。 在处理多页面文件时,可考虑实施 异步读取模式来并行处理帧,从而大幅提高整体吞吐量。

如何优化阅读速度与准确性?

优化速度与准确性之间的权衡涉及多个战略配置。 首先,使用 ExpectBarcodeTypes 指定预期的条形码类型,以消除不必要的格式检查--仅此一项就可将速度提高 40-60%。 其次,当条形码在各帧中出现的位置一致时,使用裁剪区域,缩小搜索范围。 第三,调整 MaxParallelThreads 属性,使其与您的 CPU 能力相匹配,以优化帧的并行处理。 为优化准确性,当框架可能包含多个条形码时,请启用 ExpectMultipleBarcodes 并根据您的图像特征应用适当的图像过滤器。 ML 置信度阈值功能还有助于过滤复杂图像中的误报。

读取失败的常见故障排除步骤有哪些?

当遇到多帧文件读取失败时,请遵循以下系统方法。 首先,通过提取和测试单个帧来验证单个帧的质量--如果单个帧不合格,则问题不在于多帧。 检查常见的识别问题,例如静区不足、条形码倾斜或符号损坏。 对于具有挑战性的条形码,启用 TryHarder 模式,尽管这会增加处理时间。对于长期存在的问题,实施 图像方向校正,因为旋转条形码是导致失败的常见原因。 考虑调整分辨率--Barcode 通常在 200-300 DPI 下阅读效果最佳,超过 400 DPI 后阅读效果会下降。 如果特定的 BarCode 类型仍然存在问题,请查阅 支持的格式文档,以确保兼容性。

虽然设置 BarcodeReaderOptions 对象对于大多数使用情况来说是 可选的,但它有助于从多页 GIF 和 TIFF 图像文件中读取条码时充分利用 IronBarcode。 对于生产环境,请从默认设置开始,然后根据具体的性能指标和准确性要求逐步优化。

常见问题解答

如何用 C# 从多页 TIFF 文件中读取条形码?

使用 IronBarcode,您只需调用一个方法即可从多页 TIFF 文件中读取条码:BarcodeReader.Read("multiPageImage.tiff")。IronBarcode 可自动处理 TIFF 文件中的每一页,无需手动分帧或预处理。

能否从 GIF 动画文件中提取 BarCode?

是的,IronBarcode 可自动从动画 GIF 文件的所有帧中提取条码。只需将 GIF 文件路径传递给 BarcodeReader.Read 方法,IronBarcode 将在内部解析每一帧,检测并读取存在的所有条码。

从多页图像中读取 BarCode 之前需要手动分割帧吗?

不,IronBarcode 无需手动分帧。该库的智能帧检测功能可自动解析图像结构,并在内部迭代每个帧或页面,从而简化工作流程,减少潜在的故障点。

哪些图像格式支持多页条形码读取?

IronBarcode 主要支持 TIFF 和 GIF 动画格式的多页条码读取。虽然该库也可处理单页格式,如 JPEG、PNG、BMP 和 SVG,但 TIFF 和 GIF 专门针对多页处理进行了优化,并具有自动帧检测功能。

从多页图像中读取 BarCode 需要几个步骤?

IronBarcode 只需 5 个简单步骤:下载 C# 库,准备 GIF 和 TIFF 图像,将其传递给读取方法,可选择应用图像过滤器以提高准确性,并在需要时将图像转换为多帧格式。

为什么 TIFF 格式特别适合多页条形码扫描?

TIFF 格式是使用 IronBarcode 进行文档扫描的理想格式,因为它能以各种压缩方法存储多个全分辨率图像。这种多功能性使得 TIFF 在处理包含多页条码的扫描文档时尤为有效。

Hairil Hasyimi Bin Omar
软件工程师
如所有伟大的工程师一般,Hairil 是个热心的学习者。他正在提高对 C#、Python 和 Java 的知识,并利用这些知识为 Iron Software 团队成员增值。Hairil 从马来西亚的玛拉工业大学加入 Iron Software 团队,获得化学与工艺工程学士学位。
准备开始了吗?
Nuget 下载 2,070,733 | 版本: 2026.2 刚刚发布