如何在 C# 中讀取多幀 GIF 和 TIFF 檔案 | IronOCR

如何在 C# 中讀取多幀/多頁 TIFF 與 GIF 檔案

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

IronOCR 允許開發者透過 C# 中的 OcrImageInput 類別及單一 Read 方法呼叫,從多幀 TIFF 和 GIF 檔案中讀取文字,無需複雜設定即可支援單頁與多頁文件。

TIFF(標記式影像檔案格式)是一種用於儲存高品質影像的格式。 它支援無損壓縮,因此適用於掃描文件和專業攝影作品。

GIF(圖形交換格式)常用於簡單的網頁圖片和動畫。 它同時支援無損與有損壓縮,並可將動畫包含於單一檔案中。

快速入門:使用多幀 TIFF 或 GIF 檔案進行 OCR 處理

using IronOCR 透過 OcrImageInputRead 呼叫,從多頁 TIFF 或動畫 GIF 中讀取文字。

  1. using NuGet 套件管理員安裝 https://www.nuget.org/packages/IronOcr

    PM > Install-Package IronOcr
  2. 請複製並執行此程式碼片段。

    using IronOcr;
    var result = new IronTesseract().Read(new OcrImageInput("Potter.tiff"));
  3. 部署至您的生產環境進行測試

    立即透過免費試用,在您的專案中開始使用 IronOCR

    arrow pointer


如何讀取單幀或多幀 TIFF 檔案?

要執行 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 照片檢視器和 Visual Studio 顯示文件內容 — 非 TIFF 處理示範

為什麼 IronOCR 會自動處理多幀 TIFF 檔案?

IronOCR 會自動偵測並處理 TIFF 檔案中的所有圖框。載入多頁 TIFF 文件時,IronOCR程式庫會遍歷每個圖框,對每頁執行 OCR 處理,並將結果整合為單一的 OcrResult 物件。 此自動處理機制消除了複雜的逐幀處理邏輯。 關於多頁 TIFF 的範例,請參閱我們的多頁 TIFF OCR 教學指南

對於對效能要求極高的應用程式,請實施快速 OCR 配置以優化處理速度。 該函式庫具備多執行緒的 Tesseract OCR 功能,可確保高效的批次處理。

閱讀多頁 TIFF 文件時會發生什麼情況?

在處理多頁 TIFF 文件時,IronOCR:

  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 詳細設定指南

如何讀取 GIF 檔案進行 OCR 識別?

在建構 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 格式的多步驟文件
  • 將報告匯出為 GIF 格式的舊系統

每個畫面的文字均被擷取並按時間順序整理。 對於方向有問題的圖片,IronOCR 可以自動修正圖片方向

何時應使用 GIF 格式進行 OCR?

GIF 檔案的色彩範圍有限(256 色),但常見於:

  1. 網路內容:線上教學與文件
  2. 舊版匯出:使用 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.Co/ntrast(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.Co/ntrast(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 效能?

在 Photo Viewer 中顯示的 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. 範本:針對類似文件預先定義區域

透過文字高亮功能進行除錯與視覺化:

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,可自動處理框架擷取與處理。 無論處理單頁文件或複雜的多頁文件,Enterprise文件工作流程皆採用相同的簡易語法。

常見問題

如何在 C# 中從多幀 TIFF 檔案中擷取文字?

IronOCR 透過 OcrImageInput 類別,提供讀取多幀 TIFF 檔案的簡易解決方案。只需建立 IronTesseract 實例,並傳入 OcrImageInput 呼叫 Read 方法,同時傳遞您的 TIFF 檔案路徑即可。該函式庫會自動偵測並處理 TIFF 檔案中的所有幀,並將結果整合至單一 OcrResult 物件中。

該 OCR 函式庫是否同時支援單頁與多頁 TIFF 文件?

是的,IronOCR 透過相同的 OcrImageInput 建構函式,可無縫處理單幀與多幀 TIFF 格式。該程式庫會自動遍歷多頁文件中的每個幀,對每頁執行 OCR 處理,並省去了複雜的逐幀處理邏輯。

我可以對動畫 GIF 檔案執行 OCR 嗎?

IronOCR 支援從 GIF 檔案(包括動畫 GIF)中讀取文字,並使用與 TIFF 檔案相同的 OcrImageInput 類別。該函式庫僅需呼叫一次 Read 方法即可處理 GIF 影像,使從靜態及動畫 GIF 格式中擷取文字變得輕而易舉。

TIFF 和 GIF 格式的 OCR 支援哪些壓縮格式?

IronOCR 支援無損壓縮的 TIFF 檔案,使其成為掃描文件和 Professional 攝影的理想選擇。對於 GIF 檔案,IronOCR程式庫同時支援無損與有損壓縮格式,包括將動畫儲存於單一檔案中的格式。

如何針對大型多頁 TIFF 文件優化 OCR 效能?

IronOCR 提供快速的 OCR 設定選項,以及適用於效能關鍵型應用程式的多執行緒 Tesseract OCR 功能。這些功能確保在處理大型多頁 TIFF 文件時能進行高效的批次處理,大幅縮短處理時間。

我可以在 TIFF 或 GIF 圖像中定義特定的讀取區域嗎?

是的,IronOCR 允許您透過在 TIFF 或 GIF 圖像中指定裁切區域來定義讀取範圍。此功能有助於將 OCR 處理集中於圖像的特定部分,當您僅需特定區域的文字時,可提升準確度與效能。

IronOCR 能否整合至現有應用程式中?

IronOCR 設計上可輕鬆透過 C# 整合至現有應用程式中,讓開發人員能以最少的努力,為其軟體增添 OCR 功能。

使用 IronOCR 進行文件管理有哪些好處?

使用 IronOCR 進行文件管理,可將掃描文件轉換為可搜尋且可編輯的文字,從而簡化工作流程,減少人工資料輸入的需求,並提升文件的可存取性。

IronOCR 如何提升資料準確性?

IronOCR 透過其先進的辨識演算法與影像校正功能來提升資料準確性,確保文字擷取過程既可靠又精確。

IronOCR 是否有提供免費試用版?

是的,Iron Software 提供 IronOCR 的免費試用版,讓使用者能在決定購買前測試其功能與效能。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

準備開始了嗎?
Nuget 下載 5,896,332 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronOcr
執行範例 觀看您的圖片轉為可搜尋文字。