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

O IronBarcode lê códigos de barras 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 melhor desempenho e 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());
}
Imports IronBarCode
Imports System

Private myBarcode = BarcodeReader.Read("image_file_path.jpg") 'image file path

For Each item In myBarcode
	Console.WriteLine(item.ToString())
Next item
$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ódigo de barras.

O IronBarcode oferece simplicidade ao permitir que os usuários usem apenas BarcodeReader.Read() para ler um arquivo de imagem que já foi incluído no projeto, especificando o nome do arquivo OU o caminho do arquivo como 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 exibir o resultado no console, você pode usar um loop foreach para iterar sobre os valores armazenados na matriz string[] e, dentro do bloco do loop, chamar o método Console.WriteLine() com a variável iteradora como parâmetro.

O IronBarcode é capaz de ler formatos de código de barras unidimensionais (Codabar, Code128, Code39, Code93, EAN13, EAN18, ITF, MSI, UPCA, UPCE), bem como formatos de código de barras bidimensionais (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 ou modifiquem o comportamento do leitor de código de barras para resolver todos esses problemas. Para exemplos detalhados sobre como configurar as opções do leitor de código de barras , consulte nosso guia completo. As seções a seguir discutem todas as propriedades ajustáveis ​​disponíveis em BarcodeReaderOptions uma a uma.

Como Especificar Qual Área da Imagem Ler?

CropArea é uma propriedade do tipo IronSoftware.Drawing.CropRectangle disponível em BarcodeReaderOptions que permite aos usuários especificar 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 definir a propriedade CropArea, basta instanciar um novo objeto do tipo Rectangle e especificar as coordenadas do retângulo, a largura e o 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
};
Imports IronSoftware.Drawing

' Example of setting CropArea
Dim cropArea As New Rectangle(x:=100, y:=100, width:=300, height:=300)
Dim options As New BarcodeReaderOptions() With {
    .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 essa propriedade, basta definir ExpectBarcodeTypes para um dos campos da enumeração 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
};
' Example: Expect only QR codes and Code128
Dim options As New BarcodeReaderOptions() With {
    .ExpectBarcodeTypes = BarcodeEncoding.QRCode Or 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 podem ser adicionadas 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 do 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á-lo de acordo com as capacidades e a quantidade de recursos disponíveis em suas máquinas.

Devo Habilitar o Processamento Multithread?

Esta propriedade permite que o IronBarcode leia múltiplas imagens em paralelo. O valor padrão para Multithreaded é verdadeiro , portanto, as múltiplas threads serão gerenciadas automaticamente para melhorar o desempenho em tarefas de leitura de código 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ódigo de barras falso-positivas, melhorando assim a precisão da leitura do código 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.

Como o MinScanLines afeta a precisão da detecção?

MinScanLines define o número mínimo de linhas de leitura que devem concordar em um resultado de código de barras para que ele seja considerado válido. O valor padrão é 2. Aumentar esse valor reduz os falsos positivos, mas pode impedir a detecção de códigos de barras finos ou de baixa qualidade. Diminuir esse valor para 1 aumenta a sensibilidade para códigos de barras difíceis, mas corre o risco de introduzir ruído.

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.
  • Equilibrado : Esta 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.
  • Detalhado : Para os casos em que o uso da configuração ReadingSpeed.Balanced não for bem-sucedido na produção de valores de código 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 verdadeiro permitirá uma leitura mais precisa dos 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,

    // Minimum scan lines that must agree for a valid result (default 2)
    MinScanLines = 1,

    // 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,

    // Minimum scan lines that must agree for a valid result (default 2)
    MinScanLines = 1,

    // 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.");
}
Imports IronBarCode
Imports IronSoftware.Drawing
Imports System
Imports System.Linq

' Create custom reader options
Dim options As New BarcodeReaderOptions() With {
    ' Specify expected barcode types for better performance
    .ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128 Or 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,

    ' Minimum scan lines that must agree for a valid result (default 2)
    .MinScanLines = 1,

    ' Enable Code39 extended mode if needed
    .UseCode39ExtendedMode = True,

    ' Set scan mode
    .ScanMode = BarcodeReaderScanMode.Auto,

    ' Add image filters for better recognition
    .ImageFilters = New ImageFilterCollection() From {
        New SharpenFilter(),
        New InvertFilter(),
        New ContrastFilter()
    }
}

' Read barcodes with custom options
Dim results = BarcodeReader.Read("C:\path\to\your\barcode-image.png", options)

' Process results
If results.Any() Then
    For Each 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("---")
    Next
Else
    Console.WriteLine("No barcodes found in the image.")
End If
$vbLabelText   $csharpLabel

Pelo trecho de código, vemos que para usar BarcodeReaderOptions primeiro precisamos inicializá-lo e, em seguida, determinar e ajustar as propriedades de BarcodeReaderOptions de acordo com as propriedades mencionadas acima. O código inicializado BarcodeReaderOptions pode então ser usado como argumento no método BarcodeReader.Read(), juntamente 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,143,620 | Versão: 2026.4 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.