IRONSOFTWAREHOME

Grandes Arquivos TIFF Acima de 2 GB Não Carregam

Curtis Chau
Curtis Chau
Updated: 29 de junho de 2026

O IronOCR carrega entradas de imagem em um único buffer na memória através de seu tipo interno AnyBitmap. Esse buffer é indexado por um inteiro de 32 bits, por isso é limitado a cerca de 2 GB, independentemente de quanta memória do sistema você tem. Um TIFF maior que 2 GB excede esse limite e falha ao carregar.

Loaded pages: 0
Text

OcrInput.LoadImage(filePath) cria internamente um AnyBitmap e materializa a imagem inteira em um buffer. Porque esse buffer é indexado por int, ele é efetivamente limitado a cerca de 2 GB, não importa quanta memória esteja livre, então um TIFF um pouco acima do limite não pode ser mantido e o carregamento falha. Isso é uma limitação em tempo de execução, não específica do sistema operacional, portanto, afeta todas as plataformas .NET igualmente.

Aviso: LoadImage(filePath) atualmente retorna zero páginas carregadas em vez de lançar uma exceção clara. Essa falha silenciosa é um problema conhecido; uma exceção mais clara está planejada. O design de um único buffer é um limite arquitetônico, e o streaming nativo de TIFF por página ainda não está disponível.

Solução

A solução é dividir o TIFF em pedaços de menos de 2 GB e passar cada pedaço para o IronOCR como um array de bytes, em vez de um caminho de arquivo.

1. Adicionar Magick.NET

Use o Magick.NET para dividir o TIFF antes de passá-lo para o IronOCR. Escolha a variante que corresponde ao seu projeto (Q8/Q16, AnyCPU/x64).

dotnet add package Magick.NET-Q16-AnyCPU
SHELL

2. Dividir o TIFF e Carregar Cada Pedaço

Abra o TIFF como um MagickImageCollection, divida-o em pedaços pelo número de páginas, cada um com menos de 2 GB, converta cada pedaço em um array de bytes e carregue-o com OcrInput.LoadImage(byte[]).

var inputPath = "input.tiff";
var pagesPerChunk = 100;
using var allPages = new MagickImageCollection(inputPath);
int chunkNumber = 1;
for (int i = 0; i < allPages.Count; i += pagesPerChunk)
{
    using var chunk = new MagickImageCollection();
    for (int j = i; j < Math.Min(i + pagesPerChunk, allPages.Count); j++)
    {
        chunk.Add(allPages[j].Clone());
    }
    foreach (var image in chunk)
    {
        image.SetCompression(CompressionMethod.LZW);
    }
    var chunkBytes = chunk.ToByteArray();
    using (var ocrInput = new OcrInput())
    {
        ocrInput.LoadImage(chunkBytes);
        var pages = ocrInput.GetPages().ToList();
        Console.WriteLine($"Loaded pages: {pages.Count}");
        var result = new IronTesseract().Read(ocrInput);
        Console.WriteLine("OCR Text Length: " + (result.Text?.Length ?? 0));
    }
    Console.WriteLine($"Chunk {chunkNumber} processed");
    chunkNumber++;
}
C#

Cada pedaço passa por LoadImage(chunkBytes) como bytes brutos, mantendo cada buffer abaixo do limite de 2 GB. SetCompression(CompressionMethod.LZW) reduz cada pedaço antes de ser convertido em um array de bytes.

3. Ajustar o Tamanho dos Pedaços

Ajuste pagesPerChunk para seus dados. Reduza-o se um pedaço se aproximar de 2 GB ou se a memória estiver apertada; aumente-o para páginas menores para reduzir a sobrecarga.

4. Contabilizar o Magick.NET na Implantação

Magick.NET envia binários nativos do ImageMagick. Considere o tamanho adicional do pacote e a pegada de dependência nativa ao implantar.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.

...
Leia mais

Pronto para começar?

Nuget Downloads 6,262,020Versão:2026.9recém-lançado

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.
Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

OR
bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.