Como ler códigos de barras em imagens usando C#

Como Ler Códigos de Barras de Imagens Usando C#

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

IronBarcode lê códigos de barras a partir de imagens em C# com uma única linha de código usando BarcodeReader.Read(), suportando múltiplos formatos de imagem incluindo PNG, JPEG, GIF, BMP, TIFF e SVG, com opções personalizáveis para melhorar o desempenho e a precisão.

Uma das características principais do IronBarcode é sua capacidade de ler códigos de barras diretamente em múltiplos formatos de imagem. Os seguintes formatos de imagem são atualmente suportados pelo IronBarcode:

  • Gráficos Vetoriais Escaláveis (SVG)
  • Grupo Conjunto de Especialistas em Fotografia (JPEG)
  • Gráficos de Rede Portáteis (PNG)
  • Formato de Intercâmbio de Gráficos (GIF)
  • Formato de arquivo de imagem com tags (TIFF)
  • Arquivo de imagem bitmap (BMP)

This is made possible with the help of our open source library, IronDrawing. Para uma lista completa de formatos de código de barras suportados, incluindo tipos 1D e 2D, consulte nossa documentação abrangente.

Início Rápido: Leia Códigos de Barras de uma Imagem em Segundos

Com apenas uma chamada simples para IronBarCode.BarcodeReader.Read(), você pode extrair dados de código de barras diretamente de formatos de arquivo de imagem como PNG, JPEG, GIF, BMP e TIFF. Comece imediatamente—sem configuração complexa, apenas resultados instantâneos.

  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("path/to/image.png");
  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 Ler Códigos de Barras Diretamente de Imagens?

Aqui está como usar o IronBarcode para leitura de códigos de barras. Para um tutorial abrangente sobre leitura de códigos de barras em C# / .NET, incluindo técnicas avançadas para processamento de PDF e operações em lote, visite nosso guia detalhado:

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-images-1.cs
using IronBarCode;
using System;

var myBarcode = BarcodeReader.Read(@"image_file_path.jpg"); //image file path

foreach (var item in myBarcode)
{
    Console.WriteLine(item.ToString());
}
$vbLabelText   $csharpLabel
Sample QR code with finder patterns for testing barcode reading from images
Código QR de teste de exemplo
Sample barcode with black vertical lines on white background for testing image-based barcode reading
Código de barras de teste de exemplo

Quer saber quais são os valores dos códigos de barras nos exemplos? Experimente com o trecho de código!

Para usar o IronBarcode, a primeira coisa que você deve fazer é instalar a biblioteca IronBarcode via gerenciador de pacotes NuGet do Microsoft Visual Studio no seu projeto, como mostrado na imagem abaixo. Isso permitirá que você acesse o método BarcodeReader.Read() do IronBarcode para ler diretamente imagens de códigos de barras.

O IronBarcode oferece simplicidade permitindo que os usuários usem apenas BarcodeReader.Read() para ler um arquivo de imagem que já foi incluído no projeto especificando a string do nome do arquivo, OU a string do caminho do arquivo como o parâmetro para o método. A melhor prática é usar o literal de string literal, "@" ao especificar um caminho de arquivo no método para evitar adicionar múltiplos caracteres de escape "\" na string do caminho do arquivo.

Anexe o método Values() ao final da chamada do método BarcodeReader.Read() para obter o valor do código de barras como um objeto System.String[].

Para enviar o resultado para o console, você pode usar um loop foreach para iterar sobre os valores armazenados no array string[] e dentro do bloco do loop, chamar o método Console.WriteLine() com a variável do iterador como o parâmetro.

O IronBarcode é capaz de ler formatos de código de barras 1-Dimensional (Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, UPCE) assim como formatos de código de barras 2-Dimensional (Aztec, DataMatrix, QRCode) em vários formatos de imagem.

Como Posso Configurar Opções de Leitor de Código de Barras para Melhor Desempenho?

Encontrando a leitura de código de barras muito lenta? O código de barras é muito pequeno na imagem, tornando o IronBarcode incapaz de lê-lo? Quer ler apenas certas áreas de uma imagem? Quer ler apenas certos tipos de códigos de barras em uma imagem com uma mistura de códigos de barras? Quer melhorar o desempenho geral de leitura?

BarcodeReaderOptions permite que os usuários ajustem o comportamento do leitor de códigos de barras para resolver todos esses problemas. Para exemplos detalhados sobre configuração de opções do leitor de códigos de barras, consulte nosso guia abrangente. As seções seguintes discutem todas as propriedades ajustáveis disponíveis em BarcodeReaderOptions uma por uma.

Como Especificar Qual Área da Imagem Ler?

CropArea é uma propriedade do tipo IronSoftware.Drawing.CropRectangle disponível em BarcodeReaderOptions que permite que os usuários especifiquem a área em uma imagem que o IronBarcode deve ler. Isso ajuda a melhorar o desempenho de leitura, já que o leitor de código de barras não precisa escanear a imagem inteira em busca de códigos de barras, além de melhorar a precisão de leitura, pois a área de leitura foi especificada. Saiba mais sobre como especificar regiões de corte para um desempenho ideal.

Para configurar a propriedade CropArea, simplesmente instancie um novo objeto do tipo Rectangle e especifique as coordenadas do retângulo, largura e comprimento do retângulo como argumentos. A unidade de medida aceita é pixels (px).

// Example of setting CropArea
var cropArea = new IronSoftware.Drawing.Rectangle(x: 100, y: 100, width: 300, height: 300);
var options = new BarcodeReaderOptions()
{
    CropArea = cropArea
};
// Example of setting CropArea
var cropArea = new IronSoftware.Drawing.Rectangle(x: 100, y: 100, width: 300, height: 300);
var options = new BarcodeReaderOptions()
{
    CropArea = cropArea
};
$vbLabelText   $csharpLabel

Quais Tipos de Código de Barras Eu Devo Especificar para uma Leitura Mais Rápida?

Por padrão, todos os códigos de barras suportados no IronBarcode serão escaneados em uma imagem. No entanto, se o usuário souber quais tipos de códigos de barras estão disponíveis ou deseja ser lidos em uma imagem, configurar esta propriedade para ler apenas certos tipos de códigos de barras aumentará significativamente o desempenho e a precisão da leitura, já que o leitor de código de barras não precisará iterar por coleções de códigos de barras para interpretar e ler um código de barras.

Para usar esta propriedade, basta definir ExpectBarcodeTypes para um dos campos do enum BarcodeEncoding. Abaixo estão exemplos de cada tipo de código de barras suportado pelo IronBarcode.

// Example: Expect only QR codes and Code128
var options = new BarcodeReaderOptions()
{
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};
// Example: Expect only QR codes and Code128
var options = new BarcodeReaderOptions()
{
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};
$vbLabelText   $csharpLabel

Aqui está uma lista dos tipos de código de barras com exemplos e explicações fornecidas anteriormente.

Quando Devo Desativar a Leitura de Múltiplos Códigos de Barras?

O IronBarcode irá escanear todos os códigos de barras disponíveis em uma imagem por padrão, o que inclui escanear o arquivo de imagem inteiro e adicionar os valores dos códigos de barras lidos no array de strings. No entanto, se os usuários não desejarem ler múltiplos códigos de barras em um arquivo de imagem, eles podem definir esta propriedade para false, o que fará com que o leitor de código de barras pare de escanear assim que um valor de código de barras for encontrado. Isso novamente melhorará o desempenho e a velocidade de leitura do IronBarcode. Para mais informações sobre leitura de múltiplos códigos de barras, consulte nosso guia dedicado.

Como os Filtros de Imagem Melhoram o Reconhecimento de Códigos de Barras?

Uma das propriedades que pode ser adicionada em BarcodeReaderOptions é uma coleção de filtros de imagem. Os filtros de imagem são importantes para o pré-processamento da imagem bruta alimentada ao IronBarcode. Para aplicar filtros de imagem dentro de BarcodeReaderOptions, os usuários devem primeiro iniciar e especificar a coleção ImageFilter a ser usada. Para orientações abrangentes sobre técnicas de correção de imagem, incluindo aplicações de filtro, visite nosso tutorial.

Como Posso Otimizar o Encadeamento para Melhor Desempenho?

IronBarcode permite que os usuários ativem e ajustem a quantidade de execução de threads paralelas, o que por sua vez melhorará a velocidade e a eficiência do processo. Threads paralelas significam a execução de múltiplos threads simultaneamente em diferentes núcleos de processador. O valor padrão para a propriedade MaxParallelThread no IronBarcode é 4. Os usuários podem ajustá-los com base nas capacidades e na quantidade de recursos que suas máquinas possuem.

Devo Habilitar o Processamento Multithread?

Esta propriedade permite que o IronBarcode leia múltiplas imagens em paralelo. O padrão para Multithreaded é true, portanto, os múltiplos threads serão gerenciados automaticamente para melhorar o desempenho em tarefas de leitura de códigos de barras em lote.

Por Que Devo Remover Leituras de Falso Positivo?

Esta propriedade remove quaisquer leituras de código de barras falso-positivas. Leituras de código de barras falso-positivas significam simplesmente uma leitura falsa de valores de código de barras, mas identificada como válida. Isso pode acontecer devido a erros no processo de sequenciamento ou erros no processo de rotulagem ou preparação do código de barras. Portanto, definir RemoveFalsePositive como verdadeiro removerá as leituras de códigos de barras falso-positivas, melhorando assim a precisão da leitura de códigos de barras. No entanto, se os usuários optarem por desempenho ao custo de precisão, definir esta propriedade para false ajudaria. O valor padrão para esta propriedade é true.

Quais Modos de Escaneamento Estão Disponíveis para Diferentes Casos de Uso?

Define como o IronBarcode escaneia e detecta códigos de barras em uma imagem.

  • Auto: Lê os códigos de barras com pré-processamento de imagem automático e as opções de leitor mais otimizadas configuradas. Recomendado para os melhores resultados e desempenho.
  • OnlyDetectionModel: Escaneia a imagem em busca de códigos de barras e retorna suas posições como uma matriz de IronSoftware.Drawing.PointF. Este modo não lê os códigos de barras detectados; apenas retorna as posições de cada código de barras.
  • MachineLearningScan: Escaneia a imagem em busca de códigos de barras com detecção por aprendizado de máquina e os lê.
  • OnlyBasicScan: Lê os códigos de barras sem detecção por aprendizado de máquina, pré-processamento automático de imagem ou configuração de opções de leitor. This option can be used with IronBarCode.Slim alone.

Como as Configurações de Velocidade de Leitura Afetam a Precisão?

Como o nome sugere, a propriedade Speed permite que os usuários otimizem ainda mais o desempenho do leitor IronBarcode. Semelhante à propriedade RemoveFalsePositive, ajustar esta propriedade melhora o desempenho ao custo de precisão. Para uma visão detalhada das opções de velocidade de leitura, incluindo benchmarks de desempenho, consulte nosso guia detalhado. Ele aceita o enum ReadingSpeed, que tem 4 níveis conforme mostrado abaixo:

  • Faster: Habilita a leitura de código de barras mais rápida, mas reduz a precisão. O processo ignora o pré-processamento de imagem, frequentemente resultando em resultados de código de barras vazios. Use esta configuração apenas se a entrada da imagem for nítida e clara.
  • Balanced: Essa configuração é recomendada para a propriedade Speed. Ela define um equilíbrio entre precisão e desempenho de leitura ao tentar aplicar processamento leve na imagem para esclarecer a área do código de barras e fazê-la se destacar para o leitor de código de barras detectar. Na maioria das vezes, esta configuração é suficiente para IronBarcode ler uma imagem de código de barras e produzir um resultado preciso.
  • Detailed: Para casos onde o uso da configuração ReadingSpeed.Balanced não seja bem-sucedido em produzir valores de códigos de barras a partir da leitura, os usuários podem optar por usar ReadingSpeed.Detailed. IronBarcode realizará um processamento médio na imagem para esclarecer ainda mais a área do código de barras para o leitor de código de barras detectar o código de barras. Esta configuração é muito útil para detectar uma imagem de código de barras pequena ou menos nítida.
  • ExtremeDetail: Esta configuração é a menos recomendada devido ao seu processo intensivo de CPU. Um processamento pesado será realizado na imagem do código de barras para que o leitor leia os códigos de barras. Os usuários são aconselhados a fazer o pré-processamento da imagem/aplicação de filtros na imagem antes de optar por esta configuração.

Quando Devo Usar o Modo Estendido do Code39?

Esta configuração permite que códigos de barras do tipo Code39 sejam lidos e interpretados no modo estendido, onde o conjunto completo de caracteres ASCII será aplicado. Definir UseCode39ExtendedMode como true permitirá uma leitura mais precisa de códigos de barras Code39.

Como Implemento Leitura Avançada de Códigos de Barra com Opções Personalizadas?

Agora que aprendemos todas as opções que podem ser ajustadas pelos usuários, seja para aumentar o desempenho ou a precisão, aqui está como aplicá-las no código. O trecho de código abaixo demonstra o uso abrangente de BarcodeReaderOptions:

using IronBarCode;
using IronSoftware.Drawing;
using System;
using System.Linq;

// Create custom reader options
var options = new BarcodeReaderOptions()
{
    // Specify expected barcode types for better performance
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.Code39,

    // Define specific area to scan (x, y, width, height in pixels)
    CropArea = new Rectangle(100, 100, 500, 400),

    // Set reading speed to balance accuracy and performance
    Speed = ReadingSpeed.Balanced,

    // Enable multithreading for better performance
    Multithreaded = true,
    MaxParallelThreads = 4,

    // Remove false positives for accuracy
    RemoveFalsePositive = true,

    // Enable Code39 extended mode if needed
    UseCode39ExtendedMode = true,

    // Set scan mode
    ScanMode = BarcodeReaderScanMode.Auto,

    // Add image filters for better recognition
    ImageFilters = new ImageFilterCollection() { 
        new SharpenFilter(),
        new InvertFilter(),
        new ContrastFilter()
    }
};

// Read barcodes with custom options
var results = BarcodeReader.Read(@"C:\path\to\your\barcode-image.png", options);

// Process results
if (results.Any())
{
    foreach (var barcode in results)
    {
        Console.WriteLine($"Barcode Type: {barcode.BarcodeType}");
        Console.WriteLine($"Value: {barcode.Value}");
        Console.WriteLine($"Confidence: {barcode.Confidence}%");
        Console.WriteLine($"Position: X={barcode.X}, Y={barcode.Y}");
        Console.WriteLine("---");
    }
}
else
{
    Console.WriteLine("No barcodes found in the image.");
}
using IronBarCode;
using IronSoftware.Drawing;
using System;
using System.Linq;

// Create custom reader options
var options = new BarcodeReaderOptions()
{
    // Specify expected barcode types for better performance
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.Code39,

    // Define specific area to scan (x, y, width, height in pixels)
    CropArea = new Rectangle(100, 100, 500, 400),

    // Set reading speed to balance accuracy and performance
    Speed = ReadingSpeed.Balanced,

    // Enable multithreading for better performance
    Multithreaded = true,
    MaxParallelThreads = 4,

    // Remove false positives for accuracy
    RemoveFalsePositive = true,

    // Enable Code39 extended mode if needed
    UseCode39ExtendedMode = true,

    // Set scan mode
    ScanMode = BarcodeReaderScanMode.Auto,

    // Add image filters for better recognition
    ImageFilters = new ImageFilterCollection() { 
        new SharpenFilter(),
        new InvertFilter(),
        new ContrastFilter()
    }
};

// Read barcodes with custom options
var results = BarcodeReader.Read(@"C:\path\to\your\barcode-image.png", options);

// Process results
if (results.Any())
{
    foreach (var barcode in results)
    {
        Console.WriteLine($"Barcode Type: {barcode.BarcodeType}");
        Console.WriteLine($"Value: {barcode.Value}");
        Console.WriteLine($"Confidence: {barcode.Confidence}%");
        Console.WriteLine($"Position: X={barcode.X}, Y={barcode.Y}");
        Console.WriteLine("---");
    }
}
else
{
    Console.WriteLine("No barcodes found in the image.");
}
$vbLabelText   $csharpLabel

A partir do trecho de código, vemos que para usar BarcodeReaderOptions devemos primeiro inicializá-lo, depois determinar e ajustar as propriedades do BarcodeReaderOptions de acordo com as propriedades declaradas acima. O BarcodeReaderOptions inicializado pode então ser usado como um argumento no método BarcodeReader.Read() junto com o arquivo de imagem. Isso aplicará todas as configurações em BarcodeReaderOptions ao ler um código de barras da imagem.

Se você encontrar problemas onde o código de barras não é reconhecido, nosso guia de resolução de problemas fornece soluções para problemas comuns e dicas para melhorar a precisão da leitura de códigos de barras.

Perguntas frequentes

Quais formatos de imagem são suportados para leitura de código de barras em C#?

O IronBarcode suporta a leitura de códigos de barras em diversos formatos de imagem, incluindo SVG (Scalable Vector Graphics), JPEG, PNG, GIF, TIFF (Tagged Image File Format) e BMP (Bitmap Image File). Esse suporte abrangente a formatos é possível graças ao IronDrawing, que permite a extração perfeita de códigos de barras de vários tipos de imagem.

Como posso ler um código de barras de um arquivo de imagem com apenas uma linha de código?

Com o IronBarcode, você pode ler códigos de barras de imagens usando uma única linha de código: `var results = IronBarCode.BarcodeReader.Read("path/to/image.png");`. Essa chamada de método simples detecta e extrai automaticamente os dados do código de barras de arquivos PNG, JPEG, GIF, BMP e TIFF sem qualquer configuração complexa.

Posso especificar quais tipos de códigos de barras devo procurar ao ler as imagens?

Sim, o IronBarcode permite especificar tipos de código de barras usando a propriedade ExpectBarcodeTypes em BarcodeReaderOptions. Essa abordagem direcionada melhora o desempenho da leitura, concentrando-se apenas nos formatos de código de barras que você espera encontrar em suas imagens.

É possível ler códigos de barras de uma região específica dentro de uma imagem?

Com certeza! O IronBarcode oferece a propriedade CropArea, que permite especificar regiões específicas dentro de uma imagem onde os códigos de barras estão localizados. Esse recurso é especialmente útil para imagens grandes ou quando você conhece a localização aproximada dos códigos de barras, melhorando significativamente a velocidade de processamento.

Como faço para configurar as definições avançadas de leitura para obter maior precisão?

O IronBarcode oferece a classe BarcodeReaderOptions para configurar ajustes avançados de leitura. Isso inclui opções para personalizar a sensibilidade de detecção de código de barras, o pré-processamento de imagens e outros parâmetros que podem melhorar a precisão ao lidar com imagens complexas ou tipos específicos de código de barras.

O que torna a leitura de códigos de barras a partir de imagens simples para desenvolvedores C#?

O IronBarcode simplifica a leitura de códigos de barras ao fornecer o método BarcodeReader.Read(), que funciona imediatamente com diversos formatos de imagem. Os desenvolvedores só precisam especificar o nome ou o caminho do arquivo como parâmetro, tornando incrivelmente fácil integrar a funcionalidade de leitura de código de barras em qualquer aplicação C#.

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.