Como ler vários códigos de barras simultaneamente em C#

Como Ler Múltiplos Códigos de Barras de Uma Vez em C#

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

O IronBarcode permite a leitura simultânea de múltiplos códigos de barras a partir de imagens e PDFs ao configurar ExpectMultipleBarcodes = true, simplificando o processamento de dados para aplicações de logística, varejo e gerenciamento de inventário. Seja construindo sistemas de armazéns, aplicações de ponto de venda no varejo, ou soluções de processamento de documentos, as capacidades avançadas de leitura da IronBarcode fornecem a confiabilidade e o desempenho que você precisa.

Início Rápido: Leia Todos os Códigos de Barras de uma Imagem com Facilidade

Este exemplo mostra com que rapidez você pode usar o IronBarcode para escanear uma imagem para cada código de barras que ela contém. Basta definir ExpectMultipleBarcodes = true juntamente com os tipos de códigos de barras que você deseja—sem complicações, sem problemas.

  1. Instale IronBarcode com o Gerenciador de Pacotes NuGet

    PM > Install-Package BarCode
  2. Copie e execute este trecho de código.

    var results = IronBarCode.BarcodeReader.Read("image.png", new IronBarCode.BarcodeReaderOptions { ExpectMultipleBarcodes = true, ExpectBarcodeTypes = IronBarCode.BarcodeEncoding.AllOneDimensional });
  3. Implante para testar em seu ambiente de produção.

    Comece a usar IronBarcode em seu projeto hoje com uma avaliação gratuita

    arrow pointer


Como Posso Ler Múltiplos Códigos de Barras de uma Imagem?

Por padrão, IronBarcode escaneia continuamente um documento para ler múltiplos códigos de barras. No entanto, houve casos em que apenas um valor de código de barras é retornado, mesmo quando múltiplos códigos de barras estão presentes. Para resolver isso, personalize as configurações para habilitar a leitura de múltiplos códigos de barras, conforme mostrado abaixo. A propriedade ExpectMultipleBarcodes existe tanto nas classes BarcodeReaderOptions quanto na PdfBarcodeReaderOptions, permitindo que você a utilize para ler códigos de barras em documentos de imagem e PDF.

Três exemplos de códigos de barras rotulados como A, B e C mostrando diferentes padrões de barras para demonstração de leitura de múltiplos códigos de barras
:path=/static-assets/barcode/content-code-examples/how-to/read-multiple-barcodes-read-multiple-barcodes.cs
using IronBarCode;
using System;

// Set the option to read multiple barcodes
BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional,
};

// Read barcode
var results = BarcodeReader.Read("testbc1.png", options);

foreach (var result in results)
{
    Console.WriteLine(result.ToString());
}
$vbLabelText   $csharpLabel

Configurar ExpectMultipleBarcodes como verdadeiro permite que IronBarcode escaneie todo o documento para múltiplos códigos de barras e os armazene na variável BarcodeResults. Usando um loop foreach, você pode facilmente acessar e imprimir todos os valores de códigos de barras no console.

Cenários Avançados de Leitura de Múltiplos Códigos de Barras

Ao trabalhar com múltiplos códigos de barras, você pode encontrar cenários que exigem configuração adicional. Aqui está um exemplo abrangente demonstrando como ler múltiplos códigos de barras com diferentes formatos de um documento complexo:

using IronBarCode;
using System;
using System.Linq;

// Configure advanced options for mixed barcode types
BarcodeReaderOptions advancedOptions = new BarcodeReaderOptions()
{
    ExpectMultipleBarcodes = true,
    // Read both 1D and 2D barcodes
    ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional | BarcodeEncoding.QRCode | BarcodeEncoding.DataMatrix,
    // Apply image correction filters for better accuracy
    ImageFilters = new ImageFilterCollection() {
        new SharpenFilter(),
        new ContrastFilter()
    },
    // Set speed vs accuracy balance
    Speed = ReadingSpeed.Balanced
};

// Read from various sources
var imageResults = BarcodeReader.Read("mixed-barcodes.jpg", advancedOptions);
var pdfResults = BarcodeReader.ReadPdf("document-with-barcodes.pdf", advancedOptions);

// Process results with error handling
foreach (var result in imageResults)
{
    Console.WriteLine($"Barcode Type: {result.BarcodeType}");
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Confidence: {result.Confidence}%");
    Console.WriteLine($"Page: {result.PageNumber}");
    Console.WriteLine("---");
}
using IronBarCode;
using System;
using System.Linq;

// Configure advanced options for mixed barcode types
BarcodeReaderOptions advancedOptions = new BarcodeReaderOptions()
{
    ExpectMultipleBarcodes = true,
    // Read both 1D and 2D barcodes
    ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional | BarcodeEncoding.QRCode | BarcodeEncoding.DataMatrix,
    // Apply image correction filters for better accuracy
    ImageFilters = new ImageFilterCollection() {
        new SharpenFilter(),
        new ContrastFilter()
    },
    // Set speed vs accuracy balance
    Speed = ReadingSpeed.Balanced
};

// Read from various sources
var imageResults = BarcodeReader.Read("mixed-barcodes.jpg", advancedOptions);
var pdfResults = BarcodeReader.ReadPdf("document-with-barcodes.pdf", advancedOptions);

// Process results with error handling
foreach (var result in imageResults)
{
    Console.WriteLine($"Barcode Type: {result.BarcodeType}");
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Confidence: {result.Confidence}%");
    Console.WriteLine($"Page: {result.PageNumber}");
    Console.WriteLine("---");
}
$vbLabelText   $csharpLabel

Este exemplo avançado destaca várias características importantes:

Como Posso Ler um Único Código de Barras para Melhorar o Desempenho?

IronBarcode lê tanto códigos de barras únicos quanto múltiplos em imagens ou PDFs. Por padrão, o motor escaneia o documento inteiro mesmo se apenas um código de barras existir. Para melhorar o desempenho ao ler um único código de barras, defina ExpectMultipleBarcodes como falso. Isso impede que o mecanismo escaneie o documento inteiro após detectar o primeiro código de barras, resultando em uma recuperação mais rápida do código de barras. O código abaixo demonstra esta abordagem.

Três amostras idênticas de códigos de barras rotuladas como A, B e C para demonstração de leitura de código de barras
:path=/static-assets/barcode/content-code-examples/how-to/read-multiple-barcodes-read-single-barcode.cs
using IronBarCode;
using System;

// Set the option to read single barcode
BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    ExpectMultipleBarcodes = false,
    ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional,
};

// Read barcode
var results = BarcodeReader.Read("testbc1.png", options);

foreach (var result in results)
{
    Console.WriteLine(result.ToString());
}
$vbLabelText   $csharpLabel

Neste exemplo, usamos a mesma imagem com múltiplos códigos de barras como antes, mas definimos ExpectMultipleBarcodes como falso. Como resultado, apenas o valor do primeiro código de barras é retornado, e o processo de escaneamento para assim que o primeiro código de barras é recuperado.

Otimização da Leitura de Código de Barras Único com Regiões de Corte

Para um desempenho ainda melhor ao ler códigos de barras únicos, combine a configuração ExpectMultipleBarcodes = false com especificações de regiões de corte. Esta técnica é particularmente útil quando você sabe a localização aproximada do seu código de barras:

using IronBarCode;
using IronSoftware.Drawing;

// Define a crop region where the barcode is likely located
var cropRegion = new Rectangle(100, 100, 300, 200);

// Configure options for optimal single barcode reading
BarcodeReaderOptions optimizedOptions = new BarcodeReaderOptions()
{
    ExpectMultipleBarcodes = false,
    ExpectBarcodeTypes = BarcodeEncoding.Code128,
    CropArea = cropRegion,
    Speed = ReadingSpeed.Faster
};

// Read with optimized settings
var result = BarcodeReader.Read("product-label.png", optimizedOptions).FirstOrDefault();

if (result != null)
{
    Console.WriteLine($"Barcode found: {result.Value}");
    Console.WriteLine($"Read time: {result.ReadTime}ms");
}
using IronBarCode;
using IronSoftware.Drawing;

// Define a crop region where the barcode is likely located
var cropRegion = new Rectangle(100, 100, 300, 200);

// Configure options for optimal single barcode reading
BarcodeReaderOptions optimizedOptions = new BarcodeReaderOptions()
{
    ExpectMultipleBarcodes = false,
    ExpectBarcodeTypes = BarcodeEncoding.Code128,
    CropArea = cropRegion,
    Speed = ReadingSpeed.Faster
};

// Read with optimized settings
var result = BarcodeReader.Read("product-label.png", optimizedOptions).FirstOrDefault();

if (result != null)
{
    Console.WriteLine($"Barcode found: {result.Value}");
    Console.WriteLine($"Read time: {result.ReadTime}ms");
}
$vbLabelText   $csharpLabel

Quão mais rápida é a leitura de um único código de barras?

Definir ExpectMultipleBarcodes como falso melhora muito a eficiência da leitura de códigos de barras únicos. O ganho de desempenho é particularmente notável quando se trabalha com imagens de alta resolução ou ao implementar leitura de código de barras assíncrona em aplicações de alto rendimento.

Usando o trecho de código fornecido, aqui está uma estimativa aproximada da diferença de desempenho entre definir ExpectMultipleBarcodes como verdadeiro e falso na mesma máquina:

ExpectMultipleBarcodes = true ExpectMultipleBarcodes = false
00.91 segundo 00.10 segundo

Isso representa aproximadamente uma melhoria de desempenho de 9 vezes ao ler códigos de barras únicos. O ganho de desempenho real varia com base em:

  • Resolução e complexidade da imagem
  • Número de códigos de barras presentes na imagem
  • Formatos de código de barras selecionados
  • Filtros de imagem aplicados
  • Especificações de hardware

Melhores Práticas para Leitura de Múltiplos Códigos de Barras

Ao implementar a leitura de múltiplos códigos de barras em aplicações de produção, considere estas melhores práticas:

  1. Especifique os Tipos de Código de Barras Esperados: Em vez de usar BarcodeEncoding.All, especifique apenas os formatos que você espera. Isso melhora significativamente o desempenho.

  2. Use Formatos de Imagem Apropriados: Para melhores resultados, use imagens de alto contraste. Saiba mais sobre criando imagens ótimas de código de barras.

  3. Trate Códigos de Barras Imperfeitos: Códigos de barras do mundo real podem estar danificados ou mal impressos. Use técnicas de correção de imagem para melhorar as taxas de sucesso de leitura.

  4. Processamento de Fluxo: Para grandes lotes, considere ler de fluxos para otimizar o uso de memória.

  5. Tratamento de Erros: Sempre implemente um tratamento adequado de erros para cenários onde os códigos de barras não podem ser lidos:
try
{
    var results = BarcodeReader.Read("barcodes.png", new BarcodeReaderOptions 
    { 
        ExpectMultipleBarcodes = true 
    });

    if (!results.Any())
    {
        Console.WriteLine("No barcodes found in the image");
    }
    else
    {
        Console.WriteLine($"Found {results.Count()} barcodes");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Error reading barcodes: {ex.Message}");
    // Log error for debugging
}
try
{
    var results = BarcodeReader.Read("barcodes.png", new BarcodeReaderOptions 
    { 
        ExpectMultipleBarcodes = true 
    });

    if (!results.Any())
    {
        Console.WriteLine("No barcodes found in the image");
    }
    else
    {
        Console.WriteLine($"Found {results.Count()} barcodes");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Error reading barcodes: {ex.Message}");
    // Log error for debugging
}
$vbLabelText   $csharpLabel

Seguindo essas práticas e utilizando os recursos abrangentes do IronBarcode, você pode construir aplicações robustas que lidam eficientemente com cenários de leitura de múltiplos códigos de barras em várias indústrias e casos de uso.

Perguntas frequentes

Como posso ler vários códigos de barras a partir de uma única imagem em C#?

Com o IronBarcode, você pode ler vários códigos de barras de uma única imagem definindo ExpectMultipleBarcodes = true nas opções do BarcodeReaderOptions. Isso permite que o IronBarcode escaneie o documento inteiro e retorne todos os códigos de barras encontrados em uma coleção BarcodeResults, que você pode percorrer iterando sobre ela.

Qual é a maneira mais rápida de escanear todos os códigos de barras em uma imagem?

A abordagem mais rápida é usar o método `Read` do IronBarcode com `ExpectMultipleBarcodes = true`: `var results = IronBarCode.BarcodeReader.Read("image.png", new IronBarCode.BarcodeReaderOptions { ExpectMultipleBarcodes = true }).` Este código mínimo extrai todos os valores de código de barras sem configurações complexas.

Posso ler vários códigos de barras em documentos PDF, assim como em imagens?

Sim, o IronBarcode suporta a leitura de múltiplos códigos de barras tanto em imagens quanto em documentos PDF. A propriedade ExpectMultipleBarcodes está disponível nas classes BarcodeReaderOptions e PdfBarcodeReaderOptions, permitindo configurar a leitura de múltiplos códigos de barras para qualquer tipo de documento.

O que acontece se eu não definir ExpectMultipleBarcodes como verdadeiro?

Por padrão, o IronBarcode escaneia continuamente documentos em busca de múltiplos códigos de barras. No entanto, em alguns casos, apenas um valor de código de barras pode ser retornado, mesmo quando existem vários códigos de barras. Definir ExpectMultipleBarcodes = true explicitamente garante que o IronBarcode escaneie e retorne todos os códigos de barras no documento.

Como faço para acessar os valores individuais dos códigos de barras após ler vários códigos de barras?

Após a leitura de múltiplos códigos de barras com o IronBarcode, os resultados são armazenados em uma variável BarcodeResults. Você pode acessar facilmente os valores individuais dos códigos de barras usando um loop foreach para iterar pela coleção e processar o valor, o texto e as propriedades de formato de cada código de barras.

A leitura de múltiplos códigos de barras é adequada para aplicações de varejo e logística?

Sim, a capacidade de leitura de múltiplos códigos de barras do IronBarcode é ideal para sistemas de ponto de venda no varejo, gerenciamento de armazéns, rastreamento logístico e aplicações de gestão de estoque. Ela agiliza o processamento de dados, escaneando com eficiência todos os códigos de barras em etiquetas de envio, catálogos de produtos ou planilhas de inventário simultaneamente.

Posso especificar quais tipos de código de barras devo procurar ao ler vários códigos de barras?

Sim, o IronBarcode permite especificar os tipos de código de barras esperados usando a propriedade ExpectBarcodeTypes. Você pode configurá-lo para ler formatos específicos, como AllOneDimensional, QRCode ou qualquer combinação de tipos de código de barras compatíveis, para otimizar o desempenho da leitura.

A configuração ExpectMultipleBarcodes afeta o desempenho da leitura?

Definir ExpectMultipleBarcodes = false pode aumentar o desempenho quando você sabe que existe apenas um código de barras no documento. O IronBarcode interromperá a leitura após encontrar o primeiro código de barras, tornando-a mais rápida em cenários com um único código de barras, ao mesmo tempo que oferece a flexibilidade para leitura de múltiplos códigos de barras quando necessário.

Hairil Hashimi Bin Omar
Engenheiro de Software
Como todo grande engenheiro, Hairil é um ávido aprendiz. Ele está aprimorando seus conhecimentos em C#, Python e Java, usando esse conhecimento para agregar valor aos membros da equipe da Iron Software. Hairil ingressou na equipe da Iron Software vindo da Universiti Teknologi MARA, na Malásia, onde se formou em ...
Leia mais
Pronto para começar?
Nuget Downloads 2,108,094 | Versão: 2026.3 acaba de ser lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package BarCode
executar um exemplo Veja seu fio se transformar em um código de barras.