如何从多页/帧 GIF 和 TIFF 中读取条形码

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

海瑞尔 哈西米 本 奥马尔

IronBarcode支持读取多种图像格式的输入,包括多页和多帧的GIF和TIFF图像格式。 这为用户提供了便利,用户可以直接使用图像,而无需手动分离TIFF或GIF文件的帧或页面。让我们探索如何使用IronBarcode来读取这些文件格式。

开始使用 IronBarcode

立即在您的项目中开始使用IronBarcode,并享受免费试用。

第一步:
green arrow pointer


读取多帧 GIF 和 TIFF 图像

使用IronBarcode读取多帧GIF和TIFF图像就像读取单个图像一样简单,因为IronBarcode可以直接将多页图像文件输入到BarcodeReader.Read方法中。用户无需进行任何图像准备,因为所有这些都已在库中内部处理。

下面的代码示例演示了如何读取多页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
VB   C#

将图像转换为GIF和TIFF

了解如何使用我们的开源库将图像转换为多页TIFF和GIF。IronDrawing. 现在,让我们看一下下面的代码示例,了解如何生成多页的GIF或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")
VB   C#

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

虽然多页GIF和TIFF都提供了一种将多个图像合并到一个文件中的方式,但这两种格式之间存在几个差异,如下所述:

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

高级条码阅读

尽管IronBarcode可以直接使用,但某些图像可能需要配置BarcodeReaderOptions类来实现准确快速的条码读取。 您可以在'中找到有关此类的更多信息如何从图像文件(jpg、png、gif、tiff、svg、bmp)中读取条形码'article'

以下代码片段提供了可以在 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
VB   C#

在代码片段中,我们不仅设置了 BarcodeReaderOptions 属性,还应用了一些过滤器,特别是 SharpenFilterContrastFilter。 这些过滤器主要用于提高模糊图像中条形码检测和读取的清晰度。 您可以在“如何使用图像校正滤镜'article'

对于BarcodeReaderOptions对象,我们建议用户包括ExpectMultipleBarcodes以便IronBarcode扫描图像文件中的所有可用条码,Speed用以平衡读取准确性和性能,ExpectBarcodeTypes以进一步提高性能,以及ImageFilters来应用在ImageFilterCollection对象中设置的过滤器,以提高读取准确性。

虽然在大多数用例中设置BarcodeReaderOptions对象是可选的,但对于用户在读取多页GIF和TIFF图像文件中的条形码时能充分利用IronBarcode来说,这一步骤是重要的。

Hairil related to 高级条码阅读

海瑞尔 哈西米 本 奥马尔

软件工程师

像所有优秀的工程师一样,Hairil 是一个热衷学习的人。他正在精进自己的 C#、Python 和 Java 知识,并利用这些知识为 Iron Software 团队成员增添价值。Hairil 毕业于马来西亚的马来西亚工艺大学(Universiti Teknologi MARA),获得了化学与工艺工程学士学位,然后加入了 Iron Software 团队。