How to Read QR Codes from Images in C#

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

IronQR permite que os desenvolvedores leiam códigos QR de vários formatos de imagem em C# carregando imagens com IronDrawing, criando um objeto QrImageInput, e usando o método BarcodeReader.Read para decodificar os dados do QR de forma eficiente.

Início rápido: Ler código QR de imagem em C#

Como faço para ler códigos QR em diferentes formatos de imagem?

O IronQR oferece suporte integrado para leitura de códigos QR em diversos formatos de imagem. Essa funcionalidade utiliza modelos avançados de aprendizado de máquina para garantir a decodificação precisa em diferentes tipos de mídia. Os formatos suportados incluem:

  • 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)
  • WBMP
  • WebP
  • Ícone (ico)
  • WMF
  • RawFormat (bruto)

O suporte a esse formato é possível graças à biblioteca de código aberto IronDrawing , que realiza o processamento de imagens de forma eficiente. Você pode processar códigos QR de câmeras digitais, scanners, dispositivos móveis ou downloads da web sem conversão de formato.

Exemplo de código QR com padrão nítido em preto e branco, mostrando quadrados de posicionamento e módulos de dados para teste de leitura de imagem.
  1. Instale IronQR com o Gerenciador de Pacotes NuGet

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

    // Import necessary IronQR and IronDrawing namespaces
    using IronSoftware.Drawing; 
    using IronBarcode;
    
    public class QRCodeReader
    {
        public static void Main()
        {
            // Load an image from a file path
            using (var inputImage = Image.FromFile("path/to/your/image/file.webp"))
            {
                // Create a QrImageInput object from the image
                var qrImageInput = new QrImageInput(inputImage);
    
                // Decode the Código QR from the image
                var result = BarcodeReader.Read(qrImageInput);
    
                // Iterate through each detected Código QR and display its information
                foreach (var barcodeResult in result.Barcodes)
                {
                    Console.WriteLine($"QR Code Data: {barcodeResult.Value}");
                }
            }
        }
    }
  3. Implante para testar em seu ambiente de produção.

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

    arrow pointer

Nota: Substitua "caminho/para/seu/arquivo/de/imagem.webp" pelo caminho real do seu arquivo de imagem do código QR.

Ficou curioso para saber o valor do código QR nas imagens de exemplo? Experimente usando o trecho de código!

Por que o IronQR suporta vários formatos de imagem?

Ler um código QR significa escanear e decodificar as informações armazenadas dentro do código. Normalmente, isso é feito usando uma câmera ou um scanner em conjunto com um software capaz de interpretar os dados do código QR. As informações contidas em um código QR podem ser texto, URLs, detalhes de contato ou outros tipos de dados.

O suporte a múltiplos formatos do IronQR é essencial para aplicações do mundo real, onde os códigos QR aparecem em diversos contextos — desde materiais de marketing e embalagens de produtos até documentos digitais e conteúdo da web. Ao oferecer suporte a diversos formatos, o IronQR garante que os desenvolvedores possam criar aplicativos robustos sem se preocupar com a compatibilidade de formatos de imagem. Saiba mais sobre os recursos de leitura do IronQR para entender como essa flexibilidade aprimora seu fluxo de trabalho de desenvolvimento.

Quando devo usar cada formato de imagem?

Diferentes formatos de imagem servem a propósitos diferentes no processamento de códigos QR:

  • PNG : Ideal para códigos QR que exigem transparência ou quando a qualidade da imagem é fundamental. A compressão sem perdas do PNG garante que os padrões do código QR permaneçam nítidos e legíveis.
  • JPEG : Ideal para fotografias que contenham códigos QR ou quando o tamanho do arquivo for uma preocupação. Use configurações de qualidade mais altas (80% ou mais) para evitar que artefatos de compressão afetem a legibilidade.
  • TIFF : Ideal para fins de arquivamento ou para trabalhar com documentos digitalizados em ambientes corporativos.
  • WebP : Formato moderno que oferece excelente compressão com retenção de qualidade, ideal para aplicações web.

Para obter os melhores resultados em qualquer formato, certifique-se de que suas imagens mantenham resolução suficiente (pelo menos 300 DPI para códigos QR impressos) e contraste adequado. Confira nossos exemplos avançados de leitura de QR Code para técnicas de otimização específicas para cada formato.

O que acontece se a qualidade da imagem for ruim?

O IronQR incorpora recursos de tolerância a falhas para lidar com imagens imperfeitas. Ao lidar com imagens de baixa qualidade, a biblioteca emprega diversas estratégias:

  1. Correção de erros : Os códigos QR incluem recursos de correção de erros (níveis L, M, Q e H), permitindo a recuperação de dados mesmo quando até 30% do código estiver danificado.
  2. Aprimoramento de Aprendizado de Máquina : Os modelos de aprendizado de máquina da IronQR detectam e compensam problemas comuns como desfoque, distorção e iluminação inadequada.
  3. Pré-processamento : O aprimoramento automático de imagem melhora o contraste e a nitidez antes das tentativas de decodificação.

Para cenários mais complexos, considere usar opções personalizadas de modo de leitura de QR Code para ajustar o processo de leitura:

// Example: Reading Código QRs with enhanced error correction
using IronBarcode;

public class EnhancedQRReader
{
    public static void ReadPoorQualityImage()
    {
        // Configure reader with multiple attempts and error correction
        var options = new BarcodeReaderOptions
        {
            Speed = ReadingSpeed.Detailed, // More thorough scanning
            ExpectMultipleBarcodes = true,  // Check for multiple codes
            ExpectBarcodeTypes = BarcodeType.QRCode // Focus on Código QRs only
        };

        using (var inputImage = Image.FromFile("blurry_qr_code.jpg"))
        {
            var qrImageInput = new QrImageInput(inputImage);
            var results = BarcodeReader.Read(qrImageInput, options);

            foreach (var result in results.Barcodes)
            {
                Console.WriteLine($"Decoded: {result.Value}");
                Console.WriteLine($"Confidence: {result.Confidence}%");
            }
        }
    }
}
// Example: Reading Código QRs with enhanced error correction
using IronBarcode;

public class EnhancedQRReader
{
    public static void ReadPoorQualityImage()
    {
        // Configure reader with multiple attempts and error correction
        var options = new BarcodeReaderOptions
        {
            Speed = ReadingSpeed.Detailed, // More thorough scanning
            ExpectMultipleBarcodes = true,  // Check for multiple codes
            ExpectBarcodeTypes = BarcodeType.QRCode // Focus on Código QRs only
        };

        using (var inputImage = Image.FromFile("blurry_qr_code.jpg"))
        {
            var qrImageInput = new QrImageInput(inputImage);
            var results = BarcodeReader.Read(qrImageInput, options);

            foreach (var result in results.Barcodes)
            {
                Console.WriteLine($"Decoded: {result.Value}");
                Console.WriteLine($"Confidence: {result.Confidence}%");
            }
        }
    }
}
$vbLabelText   $csharpLabel

Obtendo valores de um código QR

[//]: # (Este é um comentário que será ocultado. O valor já foi mencionado no exemplo acima. Ao definir isso novamente, assumirei um papel mais explicativo, porém breve.

A maioria das funções do IronQR retorna uma coleção para suportar múltiplas detecções. Como results é uma sequência de objetos, ela não possui uma propriedade Value em si. O código de exemplo seleciona especificamente o primeiro QrResult da coleção e recupera seu valor.

:path=/static-assets/qr/content-code-examples/how-to/read-qr-code-image-value.cs
using System;
using System.Collections.Generic;
using System.Linq;
using IronQr;
using System.Drawing;

// Import image
var inputImage = Image.FromFile("sample.jpg");

// Load the asset into QrImageInput
QrImageInput imageInput = new QrImageInput(inputImage);

// Create a QR Reader object
QrReader reader = new QrReader();

// Read the Input an get all embedded QR Codes
IEnumerable<QrResult> results = reader.Read(imageInput);

// Display the value of the first QR code found
Console.WriteLine($"QR code value is {results.First().Value}");
$vbLabelText   $csharpLabel

Detecção da posição de um código QR em uma imagem

O IronQR vai além da simples decodificação, localizando com precisão a posição de um código QR dentro de uma imagem. Este posicionamento usa um sistema de coordenadas padrão onde PointF (0,0) representa o canto superior esquerdo da imagem. As coordenadas espaciais exatas dos cantos do código QR estão acessíveis através do array Points[].

No exemplo, as coordenadas dos quatro pontos do código QR detectado são recuperadas e impressas no console.

ObserveAs coordenadas retornadas por esta função são armazenadas em uma sequência estrita em "zigue-zague": superior esquerda, superior direita, inferior esquerda e, finalmente, inferior direita

:path=/static-assets/qr/content-code-examples/how-to/read-qr-code-image-position.cs
using System;
using System.Collections.Generic;
using IronQr;
using System.Drawing;
using System.Linq;

// Import an image containing a QR code
var inputImage = Image.FromFile("urlQr.png");

// Load the asset into a QrImageInput object
var imageInput = new QrImageInput(inputImage);

// Create a QR Reader object
var reader = new QrReader();

// Read the input and get all embedded QR codes
IEnumerable<QrResult> results = reader.Read(imageInput);

// [TL, TR, BL, BR]
string[] labels = { "Top-Left", "Top-Right", "Bottom-Left", "Bottom-Right" };

var points = results.First().Points;

for (int i = 0; i < points.Length; i++)
{
    Console.WriteLine($"{labels[i]}: {points[i].X}, {points[i].Y}");
}
$vbLabelText   $csharpLabel

Insira o código QR

Código QR

Saída

Observe que o sistema registrou as coordenadas espaciais exatas de cada canto do código QR no console.

Detecção de bordas QR

Tipos de código QR suportados

São suportados vários tipos de códigos QR, tanto para criação quanto para leitura. O IronQR oferece suporte abrangente para diversos formatos de código QR, atendendo às variadas necessidades de aplicação. Saiba mais sobre os formatos de QR compatíveis em nossa documentação. Abaixo estão os tipos de código QR suportados:

  • QRCode : O código QR padrão mais comumente usado atualmente. Ele pode armazenar até 7.089 caracteres numéricos ou 4.296 caracteres alfanuméricos, sendo adequado para URLs de sites, informações de contato e outras aplicações.
Exemplo de código QR com padrão nítido em preto e branco, mostrando quadrados de posicionamento e módulos de dados para teste de leitura de imagem.
  • MicroQRCode : Uma versão menor do código QR padrão, projetada para espaços limitados. Pode armazenar até 35 caracteres numéricos ou 21 caracteres alfanuméricos, ideal para embalagens pequenas ou etiquetas impressas minúsculas.
Código QR padrão com padrões de localização e módulos de dados demonstrando a estrutura típica de um código QR.
  • RMQRCode : O códigoRMQR(RectangularMicro QRCode) é uma versão retangular compacta em vez de quadrada. Esta versão permite flexibilidade na proporção da tela, sendo útil para aplicações onde há espaço retangular disponível.
Exemplo de código QR retangular mostrando formato não quadrado com marcadores de posicionamento padrão e padrões de dados.

Como escolher o tipo certo de código QR?

A escolha do tipo de código QR apropriado depende do seu caso de uso específico e das suas restrições:

  • Código QR padrão : Escolha esta opção para aplicações de uso geral onde o espaço não é limitado e você precisa de capacidade máxima de dados. Ideal para URLs, credenciais de Wi-Fi, contatos de vCard ou informações detalhadas sobre produtos. Consulte nossos exemplos de geração de código QR para obter detalhes de implementação.

  • Micro QR Code : Ideal para trabalhar com superfícies pequenas, como componentes eletrônicos, etiquetas de joias ou dispositivos médicos. Apesar da capacidade limitada, é perfeito para números de série, URLs simples ou códigos de rastreamento básicos.

  • Código RMQR : Selecione códigos retangulares quando o espaço disponível tiver restrições dimensionais específicas, como etiquetas estreitas em produtos cilíndricos ou espaços alongados nas bordas da embalagem.

Quais são as limitações de armazenamento de dados?

Compreender a capacidade de dados ajuda a otimizar a implementação do seu código QR:

Tipo de código QR Somente numérico Alfanumérico Binário Kanji
QR padrão 7.089 4.296 2.953 1.817
Micro QR 35 21 15 9
RMQR Variável Variável Variável Variável

Considere estes fatores ao planejar o armazenamento de dados:

  • Utilize encurtadores de URL para links da web para maximizar o espaço disponível.
  • Implementar compressão de dados para grandes conjuntos de dados
  • Selecione níveis adequados de correção de erros (uma correção mais alta reduz a capacidade).

Para implementações avançadas, explore nosso guia de geração de códigos QR estilizados para equilibrar estética e capacidade de dados.

Quando devo usar códigos Micro ou RMQR?

Os códigos Micro eRMQRse destacam em cenários específicos:

Os microcódigos QR são perfeitos para:

  • Placas de circuito eletrônico que requerem rastreamento de componentes
  • Pequenos dispositivos médicos que necessitam de identificadores de pacientes ou medicamentos
  • Autenticação de joias com espaço limitado para gravação
  • Etiquetas de produtos em miniatura na fabricação

Os códigosRMQRsão mais adequados para:

  • Etiquetas de envio estreitas em tubos ou canos
  • Espaços alongados no corpo da caneta ou em outras ferramentas
  • Materiais de marketing em formato de banner
  • Integração em elementos de design retangulares existentes

Aqui está um exemplo prático de leitura de diferentes tipos de código QR:

using IronBarcode;
using IronSoftware.Drawing;

public class MultiTypeQRReader
{
    public static void ReadVariousQRTypes()
    {
        // Configure reader to handle all Código QR types
        var options = new BarcodeReaderOptions
        {
            ExpectBarcodeTypes = BarcodeType.QRCode | 
                                BarcodeType.MicroQRCode | 
                                BarcodeType.RectangularMicroQRCode
        };

        string[] imagePaths = {
            "standard_qr.png",
            "micro_qr.png", 
            "rectangular_qr.png"
        };

        foreach (var path in imagePaths)
        {
            using (var image = Image.FromFile(path))
            {
                var qrInput = new QrImageInput(image);
                var results = BarcodeReader.Read(qrInput, options);

                foreach (var qr in results.Barcodes)
                {
                    Console.WriteLine($"Type: {qr.BarcodeType}");
                    Console.WriteLine($"Data: {qr.Value}");
                    Console.WriteLine($"Format: {qr.Format}");
                    Console.WriteLine("---");
                }
            }
        }
    }
}
using IronBarcode;
using IronSoftware.Drawing;

public class MultiTypeQRReader
{
    public static void ReadVariousQRTypes()
    {
        // Configure reader to handle all Código QR types
        var options = new BarcodeReaderOptions
        {
            ExpectBarcodeTypes = BarcodeType.QRCode | 
                                BarcodeType.MicroQRCode | 
                                BarcodeType.RectangularMicroQRCode
        };

        string[] imagePaths = {
            "standard_qr.png",
            "micro_qr.png", 
            "rectangular_qr.png"
        };

        foreach (var path in imagePaths)
        {
            using (var image = Image.FromFile(path))
            {
                var qrInput = new QrImageInput(image);
                var results = BarcodeReader.Read(qrInput, options);

                foreach (var qr in results.Barcodes)
                {
                    Console.WriteLine($"Type: {qr.BarcodeType}");
                    Console.WriteLine($"Data: {qr.Value}");
                    Console.WriteLine($"Format: {qr.Format}");
                    Console.WriteLine("---");
                }
            }
        }
    }
}
$vbLabelText   $csharpLabel

Para implantações em produção, consulte nosso guia de pacotes NuGet para garantir que você tenha o pacote correto para sua plataforma e verifique a referência da API para obter documentação completa sobre todos os métodos e propriedades disponíveis.

Perguntas frequentes

Quais formatos de imagem o IronQR suporta para leitura de códigos QR?

O IronQR suporta a leitura de códigos QR em diversos formatos de imagem, incluindo JPEG, PNG, GIF, TIFF, BMP, WBMP, WebP, ICO, WMF e RawFormat. Esse amplo suporte a formatos é possível graças ao IronDrawing, que permite processar códigos QR de várias fontes sem a necessidade de conversão de formato.

Como faço para ler um código QR de um arquivo de imagem em C#?

Para ler um código QR usando o IronQR, primeiro carregue sua imagem usando Image.FromFile(), crie um objeto QrImageInput a partir da imagem carregada e, em seguida, use BarcodeReader.Read() para decodificar os dados do QR. O método retorna resultados que você pode iterar para acessar as informações de cada código QR detectado.

Que tecnologia permite a leitura precisa de códigos QR em diferentes tipos de mídia?

O IronQR utiliza modelos avançados de aprendizado de máquina para garantir a decodificação precisa de códigos QR em diferentes tipos de mídia e formatos de imagem. Essa abordagem baseada em IA ajuda a manter alta precisão mesmo em condições de imagem desafiadoras.

Posso ler vários códigos QR a partir de uma única imagem?

Sim, o IronQR consegue detectar e ler vários códigos QR a partir de uma única imagem. O método BarcodeReader.Read retorna uma coleção de resultados, permitindo que você itere por cada código QR detectado usando um loop foreach para acessar os dados individuais de cada código.

Que tipos de dados podem ser armazenados em códigos QR que o IronQR lê?

O IronQR consegue decodificar vários tipos de dados armazenados em códigos QR, incluindo texto simples, URLs, informações de contato e outras formas de dados estruturados. As informações decodificadas podem ser acessadas através da propriedade Value de cada objeto BarcodeResult.

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 ...

Leia mais
Pronto para começar?
Nuget Downloads 61,359 | Versão: 2026.3 acaba de ser lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package IronQR
executar um exemplo Veja seu URL se transformar em um código QR.