如何在 C# | IronOCR 中读取多帧页面 GIF 和 TIFFs

如何用 C# 阅读多帧/页 TIFF 和 GIF

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

IronOCR 可通过 OcrImageInput 类和单个 Read 方法调用,在 C# 中从多帧 TIFF 和 GIF 文件中读取文本,无需复杂配置即可支持单页和多页文档。

TIFF(标记图像文件格式)是一种高质量图像格式。 它支持无损压缩,因此适用于扫描文件和专业摄影。

GIF(图形交换格式)用于简单的网络图像和动画。 它支持无损压缩和有损压缩,并可在单个文件中包含动画。

快速入门:使用多帧 TIFF 或 GIF 文件进行 OCR

使用 OcrImageInputRead 调用,使用 IronOCR 从多页 TIFF 或动画 GIF 中读取文本。

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

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

    PM > Install-Package IronOcr

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

    using IronOcr;
    var result = new IronTesseract().Read(new OcrImageInput("Potter.tiff"));
  3. 部署到您的生产环境中进行测试

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


如何读取单帧或多帧 TIFF 文件?

<! -- 待办事项:在此处添加图片 --> <!--!屏幕截图演示如何读取单帧或多帧 tiff 文件? 在 IronPDF 中 --> <!-- 说明:显示逐步过程的截图 -->

要执行 OCR,请实例化 IronTesseract 类。 使用 using 语句创建 OcrImageInput 对象。 该构造函数支持单帧和多帧 TIFF 和 TIF 格式。 应用 Read 方法对导入的 TIFF 文件执行 OCR。

:path=/static-assets/ocr/content-code-examples/how-to/input-tiff-gif-read-tiff.cs
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Import TIFF/TIF
using var imageInput = new OcrImageInput("Potter.tiff");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Import TIFF/TIF
Private imageInput = New OcrImageInput("Potter.tiff")
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
$vbLabelText   $csharpLabel
Windows Photo Viewer 和 Visual Studio 显示文档内容 - 非 TIFF 处理演示

为什么 IronOCR 可以自动处理多帧 TIFF?

IronOCR 可自动检测和处理 TIFF 文件中的所有帧。在加载多页 TIFF 文档时,该库会遍历每个帧,对每一页应用 OCR,并将结果合并到一个 OcrResult 对象中。 这种自动处理方式消除了复杂的逐帧处理逻辑。 有关多页 TIFF 示例,请参阅我们的 多页 TIFF OCR 教程

对于性能关键型应用程序,请执行快速 OCR 配置以优化处理速度。 该库的多线程 Tesseract OCR 功能可确保高效的批处理。

阅读多页 TIFF 文档时会发生什么?

在处理多页 TIFF 文档时,IronOCR.NET 翻译器必须能够处理多页 TIFF 文档: 1.将所有框架高效加载到内存中 2.在配置的情况下对每一帧应用预处理 3.按顺序对页面执行 OCR 4.汇总结果保持页面顺序

访问单个页面结果:

using IronOcr;

IronTesseract ocrTesseract = new IronTesseract();

// Import multi-page TIFF
using var imageInput = new OcrImageInput("multipage-document.tiff");

// Perform OCR
OcrResult result = ocrTesseract.Read(imageInput);

// Access results by page
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}:");
    Console.WriteLine(page.Text);
    Console.WriteLine("---");
}
using IronOcr;

IronTesseract ocrTesseract = new IronTesseract();

// Import multi-page TIFF
using var imageInput = new OcrImageInput("multipage-document.tiff");

// Perform OCR
OcrResult result = ocrTesseract.Read(imageInput);

// Access results by page
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}:");
    Console.WriteLine(page.Text);
    Console.WriteLine("---");
}
Imports IronOcr

Dim ocrTesseract As New IronTesseract()

' Import multi-page TIFF
Using imageInput As New OcrImageInput("multipage-document.tiff")

    ' Perform OCR
    Dim result As OcrResult = ocrTesseract.Read(imageInput)

    ' Access results by page
    For Each page In result.Pages
        Console.WriteLine($"Page {page.PageNumber}:")
        Console.WriteLine(page.Text)
        Console.WriteLine("---")
    Next
End Using
$vbLabelText   $csharpLabel

对于长时间操作,请使用取消标记来实现取消功能。

如何单独处理单个 TIFF 帧?

针对内存限制或将不同的图像校正过滤器应用到特定页面,对帧进行单独处理:

using IronOcr;
using System.Drawing;

// Configure OCR for individual frame processing
IronTesseract ocrTesseract = new IronTesseract();

// Load and split TIFF frames
using var multiFrameInput = new OcrImageInput("document.tiff");

// Process specific pages (0-indexed)
var pageIndices = new[] { 0, 2, 4 }; // Process pages 1, 3, and 5 only

foreach (int pageIndex in pageIndices)
{
    using var pageInput = new OcrImageInput("document.tiff", PageIndices: new[] { pageIndex });

    // Apply page-specific preprocessing if needed
    pageInput.DeNoise();
    pageInput.Deskew();

    var pageResult = ocrTesseract.Read(pageInput);
    Console.WriteLine($"Page {pageIndex + 1} text: {pageResult.Text}");
}
using IronOcr;
using System.Drawing;

// Configure OCR for individual frame processing
IronTesseract ocrTesseract = new IronTesseract();

// Load and split TIFF frames
using var multiFrameInput = new OcrImageInput("document.tiff");

// Process specific pages (0-indexed)
var pageIndices = new[] { 0, 2, 4 }; // Process pages 1, 3, and 5 only

foreach (int pageIndex in pageIndices)
{
    using var pageInput = new OcrImageInput("document.tiff", PageIndices: new[] { pageIndex });

    // Apply page-specific preprocessing if needed
    pageInput.DeNoise();
    pageInput.Deskew();

    var pageResult = ocrTesseract.Read(pageInput);
    Console.WriteLine($"Page {pageIndex + 1} text: {pageResult.Text}");
}
Imports IronOcr
Imports System.Drawing

' Configure OCR for individual frame processing
Dim ocrTesseract As New IronTesseract()

' Load and split TIFF frames
Using multiFrameInput As New OcrImageInput("document.tiff")

    ' Process specific pages (0-indexed)
    Dim pageIndices As Integer() = {0, 2, 4} ' Process pages 1, 3, and 5 only

    For Each pageIndex As Integer In pageIndices
        Using pageInput As New OcrImageInput("document.tiff", PageIndices:=New Integer() {pageIndex})

            ' Apply page-specific preprocessing if needed
            pageInput.DeNoise()
            pageInput.Deskew()

            Dim pageResult = ocrTesseract.Read(pageInput)
            Console.WriteLine($"Page {pageIndex + 1} text: {pageResult.Text}")
        End Using
    Next
End Using
$vbLabelText   $csharpLabel

有关高级配置,请参阅 Tesseract 详细配置指南

如何为 OCR 读取 GIF 文件?

在构建 OcrImageInput 时指定 GIF 文件路径。 构造函数导入图像。 对于 GIF 动画,IronOCR 会提取所有帧,并将其作为单个图像处理。

:path=/static-assets/ocr/content-code-examples/how-to/input-tiff-gif-read-gif.cs
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Import GIF
using var imageInput = new OcrImageInput("Potter.gif");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Import GIF
Private imageInput = New OcrImageInput("Potter.gif")
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
$vbLabelText   $csharpLabel

对于初学者,我们的简单的 C# OCR Tesseract 教程涵盖了基本的 OCR 操作。

为什么 OCR 可以在动画 GIF 上工作?

动画 GIF 包含多个图像帧。 IronOCR 对每一帧进行提取并分别处理。 这对以下情况非常适用

  • 屏幕录制保存为 GIF 文件
  • 带有文字说明的动画教程
  • GIF 格式的多步骤文档
  • Legacy系统以GIF格式导出报告

我们将截取每一帧的文本,并按时间顺序排列。 对于有方向问题的图片,IronOCR 可以自动修复图片方向

何时应使用 GIF 格式进行 OCR?

GIF 的调色板颜色有限(256 种颜色),但在以下情况中很常见:

1.网络内容:在线教程和文档 2.Legacy 导出:使用 GIF 格式的旧版应用程序 3.屏幕截图:默认为 GIF 的屏幕截图工具 4.文件小:当存储空间有限时

为获得最佳效果,请使用 IronOCR 的 DPI 设置优化 GIF。 应用 OCR 图像优化过滤器以提高识别率。

GIF OCR 有哪些常见问题?

GIF 文件是一项挑战:

1.颜色限制:256 色限制会影响文本清晰度 2.压缩人工痕迹:抖动干扰识别 3.低分辨率:通常以 72-96 DPI 保存

应用预处理过滤器:

using IronOcr;

IronTesseract ocrTesseract = new IronTesseract();

// Import GIF with preprocessing
using var imageInput = new OcrImageInput("low-quality.gif");

// Apply filters to improve quality
imageInput.ToGrayScale();      // Convert to grayscale
imageInput.Contrast(1.5);       // Increase contrast
imageInput.DeNoise();           // Remove noise
imageInput.EnhanceResolution(); // Upscale for better OCR

// Perform OCR with enhanced image
OcrResult result = ocrTesseract.Read(imageInput);
using IronOcr;

IronTesseract ocrTesseract = new IronTesseract();

// Import GIF with preprocessing
using var imageInput = new OcrImageInput("low-quality.gif");

// Apply filters to improve quality
imageInput.ToGrayScale();      // Convert to grayscale
imageInput.Contrast(1.5);       // Increase contrast
imageInput.DeNoise();           // Remove noise
imageInput.EnhanceResolution(); // Upscale for better OCR

// Perform OCR with enhanced image
OcrResult result = ocrTesseract.Read(imageInput);
Imports IronOcr

Dim ocrTesseract As New IronTesseract()

' Import GIF with preprocessing
Using imageInput As New OcrImageInput("low-quality.gif")
    ' Apply filters to improve quality
    imageInput.ToGrayScale()      ' Convert to grayscale
    imageInput.Contrast(1.5)      ' Increase contrast
    imageInput.DeNoise()          ' Remove noise
    imageInput.EnhanceResolution() ' Upscale for better OCR

    ' Perform OCR with enhanced image
    Dim result As OcrResult = ocrTesseract.Read(imageInput)
End Using
$vbLabelText   $csharpLabel

对于具有挑战性的图像,请参阅 使用 Tesseract 修复低质量扫描

如何指定扫描区域以提高性能?

在构建 OcrImageInput 时包含 CropRectangle 以定义 OCR 的特定区域。 这样可以提高大型文档的性能。 请参阅我们的OCR 区域指南

:path=/static-assets/ocr/content-code-examples/how-to/input-images-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Specify crop region
Rectangle scanRegion = new Rectangle(800, 200, 900, 400);

// Add image
using var imageInput = new OcrImageInput("Potter.tiff", ContentArea: scanRegion);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Output the result to console
Console.WriteLine(ocrResult.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Specify crop region
Private scanRegion As New Rectangle(800, 200, 900, 400)

' Add image
Private imageInput = New OcrImageInput("Potter.tiff", ContentArea:= scanRegion)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)

' Output the result to console
Console.WriteLine(ocrResult.Text)
$vbLabelText   $csharpLabel

为什么裁剪可以提高 OCR 性能?

照片查看器中的 TIFF 文档,调试控制台显示已完成的 OCR 进程执行

通过裁剪提高性能:

1.减少处理区域:更少的像素意味着更快的执行速度 2.重点检测:针对特定区域进行 OCR 优化 3.内存效率:更小的工作集可减少 RAM 使用量 4.去噪:排除无关内容

处理特定区域的速度是整页的 5-10 倍。 为实现实时监控,请实施 进度跟踪

何时应使用特定区域 OCR?

使用特定地区的 OCR 进行翻译:

  • 表单处理:提取特定字段
  • 页眉/页脚:访问文档元数据
  • 表格:侧重于数据表
  • 批量处理:类似的文档工作流程

表单字段示例:

using IronOcr;
using IronSoftware.Drawing;

// Define regions for form fields
var nameFieldRegion = new Rectangle(100, 50, 300, 40);
var dateFieldRegion = new Rectangle(100, 100, 200, 40);
var amountFieldRegion = new Rectangle(100, 150, 150, 40);

// Create OCR instance
IronTesseract ocr = new IronTesseract();

// Extract from each region
using var tiffInput = new OcrImageInput("form.tiff");

// Process each field
var name = ocr.Read(new OcrImageInput("form.tiff", ContentArea: nameFieldRegion)).Text.Trim();
var date = ocr.Read(new OcrImageInput("form.tiff", ContentArea: dateFieldRegion)).Text.Trim();
var amount = ocr.Read(new OcrImageInput("form.tiff", ContentArea: amountFieldRegion)).Text.Trim();

Console.WriteLine($"Name: {name}");
Console.WriteLine($"Date: {date}");
Console.WriteLine($"Amount: {amount}");
using IronOcr;
using IronSoftware.Drawing;

// Define regions for form fields
var nameFieldRegion = new Rectangle(100, 50, 300, 40);
var dateFieldRegion = new Rectangle(100, 100, 200, 40);
var amountFieldRegion = new Rectangle(100, 150, 150, 40);

// Create OCR instance
IronTesseract ocr = new IronTesseract();

// Extract from each region
using var tiffInput = new OcrImageInput("form.tiff");

// Process each field
var name = ocr.Read(new OcrImageInput("form.tiff", ContentArea: nameFieldRegion)).Text.Trim();
var date = ocr.Read(new OcrImageInput("form.tiff", ContentArea: dateFieldRegion)).Text.Trim();
var amount = ocr.Read(new OcrImageInput("form.tiff", ContentArea: amountFieldRegion)).Text.Trim();

Console.WriteLine($"Name: {name}");
Console.WriteLine($"Date: {date}");
Console.WriteLine($"Amount: {amount}");
Imports IronOcr
Imports IronSoftware.Drawing

' Define regions for form fields
Dim nameFieldRegion As New Rectangle(100, 50, 300, 40)
Dim dateFieldRegion As New Rectangle(100, 100, 200, 40)
Dim amountFieldRegion As New Rectangle(100, 150, 150, 40)

' Create OCR instance
Dim ocr As New IronTesseract()

' Extract from each region
Using tiffInput As New OcrImageInput("form.tiff")
    ' Process each field
    Dim name As String = ocr.Read(New OcrImageInput("form.tiff", ContentArea:=nameFieldRegion)).Text.Trim()
    Dim date As String = ocr.Read(New OcrImageInput("form.tiff", ContentArea:=dateFieldRegion)).Text.Trim()
    Dim amount As String = ocr.Read(New OcrImageInput("form.tiff", ContentArea:=amountFieldRegion)).Text.Trim()

    Console.WriteLine($"Name: {name}")
    Console.WriteLine($"Date: {date}")
    Console.WriteLine($"Amount: {amount}")
End Using
$vbLabelText   $csharpLabel

如何计算正确的裁剪矩形?

使用裁剪矩形计算:

1.视觉检查:使用图像编辑器获取坐标 2.程序检测:使用 IronOCR 的视觉功能 3.模板:为类似文档定义一次区域

使用 highlight texts 功能进行调试和可视化:

using IronOcr;
using IronSoftware.Drawing;

// Test different regions to find optimal coordinates
var testRegions = new[] 
{ 
    new Rectangle(100, 100, 200, 50), 
    new Rectangle(100, 160, 200, 50), 
    new Rectangle(100, 220, 200, 50) 
};

IronTesseract ocr = new IronTesseract();

foreach (var region in testRegions)
{
    using var input = new OcrImageInput("document.tiff", ContentArea: region);
    var result = ocr.Read(input);

    // Save highlighted region for visual verification
    result.SaveAsHighlightedImage($"region_{region.X}_{region.Y}.png");
}
using IronOcr;
using IronSoftware.Drawing;

// Test different regions to find optimal coordinates
var testRegions = new[] 
{ 
    new Rectangle(100, 100, 200, 50), 
    new Rectangle(100, 160, 200, 50), 
    new Rectangle(100, 220, 200, 50) 
};

IronTesseract ocr = new IronTesseract();

foreach (var region in testRegions)
{
    using var input = new OcrImageInput("document.tiff", ContentArea: region);
    var result = ocr.Read(input);

    // Save highlighted region for visual verification
    result.SaveAsHighlightedImage($"region_{region.X}_{region.Y}.png");
}
Imports IronOcr
Imports IronSoftware.Drawing

' Test different regions to find optimal coordinates
Dim testRegions = {
    New Rectangle(100, 100, 200, 50),
    New Rectangle(100, 160, 200, 50),
    New Rectangle(100, 220, 200, 50)
}

Dim ocr As New IronTesseract()

For Each region In testRegions
    Using input As New OcrImageInput("document.tiff", ContentArea:=region)
        Dim result = ocr.Read(input)

        ' Save highlighted region for visual verification
        result.SaveAsHighlightedImage($"region_{region.X}_{region.Y}.png")
    End Using
Next
$vbLabelText   $csharpLabel

对于复杂的文档,可使用 IronOCR 的结果对象来确定文本位置并创建动态裁剪区域。 对于具有挑战性的图像,OCR 图像 DPI 优化指南 可帮助实现最佳分辨率。

IronOCR 提供精简的 API,可自动处理框架提取和处理。 无论是处理单页文档还是复杂的多帧文件,同样简单的语法都适用于企业文档工作流程。

常见问题解答

如何用 C# 从多帧 TIFF 文件中提取文本?

IronOCR 为使用 OcrImageInput 类读取多帧 TIFF 文件提供了一个简单的解决方案。只需实例化 IronTesseract 并调用 OcrImageInput 的读取方法,同时传递 TIFF 文件路径即可。程序库会自动检测和处理 TIFF 文件中的所有帧,并将结果合并到一个 OcrResult 对象中。

OCR 库是否支持单页和多页 TIFF 文档?

是的,IronOCR 可通过相同的 OcrImageInput 构造函数无缝处理单帧和多帧 TIFF 格式。该库可自动迭代多页文档中的每一帧,对每一页应用 OCR,无需复杂的逐帧处理逻辑。

我可以在 GIF 动画文件上执行 OCR 吗?

IronOCR 支持使用与 TIFF 文件相同的 OcrImageInput 类从 GIF 文件(包括 GIF 动画)中读取文本。该库只需调用一个 Read 方法就能处理 GIF 图像,从而轻松地从静态和动画 GIF 格式中提取文本。

TIFF 和 GIF OCR 支持哪些压缩格式?

IronOCR 可处理支持无损压缩的 TIFF 文件,是扫描文件和专业摄影的理想选择。对于 GIF 文件,该库可处理无损压缩和有损压缩格式,包括在单个文件中存储动画的格式。

如何优化大型多页 TIFF 文档的 OCR 性能?

IronOCR 为性能关键型应用提供快速 OCR 配置选项和多线程 Tesseract OCR 功能。这些功能可确保在处理大型多页 TIFF 文档时进行高效的批处理,从而大幅缩短处理时间。

我能否在 TIFF 或 GIF 图像中定义特定的阅读区域?

是的,IronOCR 允许您通过在 TIFF 或 GIF 图像中指定裁剪区域来定义阅读区域。该功能有助于将 OCR 处理集中在图像的特定部分,从而在您只需要某些区域的文本时提高准确性和性能。

Curtis Chau
技术作家

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

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

准备开始了吗?
Nuget 下载 5,384,824 | 版本: 2026.2 刚刚发布