Como ler um código QR em ASP.NET
Códigos QR se tornaram onipresentes em nosso mundo digital, frequentemente usados em publicidade, varejo, gerenciamento de eventos e mais. Para desenvolvedores que trabalham no framework ASP.NET, integrar capacidades de escaneamento de códigos QR em aplicativos web pode aprimorar a experiência e a funcionalidade do usuário. Este artigo explora o processo de implementação de um scanner de código QR em um aplicativo ASP.NET, abrangendo as ferramentas necessárias, bibliotecas e implementação passo a passo. Usaremos IronQR, uma poderosa biblioteca para geração de códigos QR da Iron Software para ler códigos QR.
Como Escanear Código QR no ASP.NET
- Crie um projeto ASP.NET usando o Visual Studio.
- Instale a biblioteca IronQR do Gerenciador de Pacotes.
- Carregue a Imagem QR e Leia o QR.
- Leia o Código QR Avançado.
Entendendo Códigos QR e Seus Casos de Uso
Códigos QR (Resposta Rápida) são códigos de barras bidimensionais que podem armazenar informações variando de URLs a detalhes de contato, normalmente escaneados usando smartphones ou dispositivos de escaneamento dedicados. Em aplicativos web, os códigos QR podem servir a vários propósitos, tais como:
- Acesso rápido ao site: Direcionar usuários para um URL específico sem a necessidade de digitar.
- Bilhetagem de eventos: Verificar códigos QR em ingressos para acesso a eventos.
- Sistemas de pagamento: Facilitar pagamentos fáceis escaneando um código QR.
- Informações do produto: Fornecer informações adicionais sobre produtos.
Apresentando IronQR
IronQR é uma poderosa biblioteca .NET projetada para a geração e escaneamento de códigos QR, oferecendo funcionalidade robusta com facilidade de uso em mente. Esta biblioteca versátil não apenas lida com códigos QR, mas também pode gerir outros tipos de códigos de barras, tornando-se uma escolha preferida para desenvolvedores que trabalham dentro do ecossistema .NET. Aqui, exploraremos como integrar a biblioteca IronQR em um aplicativo ASP.NET para facilitar o escaneamento de códigos QR.
Vantagens e Recursos Principais do IronQR
-
Leitura de Códigos QR: IronQR pode ler códigos QR de vários formatos de imagem, incluindo jpg, png, svg, bmp, gif, tif, tiff e mais. Ele também suporta imagens multipágina e modelos personalizados de detecção de QR. Os formatos de dados de saída incluem texto, URLs, coordenadas e mais.
-
Escrita de Códigos QR: Você pode gerar códigos QR e salvá-los como imagens (jpg, png, gif, tiff, bmp), fluxos, ou até mesmo estampá-los em PDFs existentes. Codifique dados como texto, URLs, bytes e números e gere códigos QR. Personalize o estilo do código QR redimensionando, ajustando margens, recolorindo e adicionando logotipos.
-
Tratamento e Correção de Erros: IronQR fornece mensagens de erro detalhadas e correção de erros QR personalizada. Garante tolerância a falhas e suporta verificação de nulidade e checksums.
-
Modelo Avançado de Aprendizado de Máquina: IronQR usa um modelo avançado de Aprendizado de Máquina para reconhecimento de código QR. Este modelo garante leitura precisa e confiável de códigos QR em várias plataformas, incluindo ambientes móveis, desktop e nuvem.
-
Compatibilidade Multiplataforma: IronQR é projetado para C#, F# e VB.NET, rodando em várias versões .NET como .NET Core (8, 7, 6, 5 e 3.1+), .NET Standard (2.0+), e .NET Framework (4.6.2+).
-
Ele suporta diferentes tipos de projetos, incluindo web (Blazor & WebForms), móvel (Xamarin & MAUI), desktop (WPF & MAUI) e aplicativos de console.
- Suporte Amplo a Códigos QR: IronQR se destaca no manuseio de uma ampla gama de códigos QR e outros tipos de códigos de barras. Quer você esteja lidando com códigos QR padrão, Micro QR, uma imagem de código de barras QR, ou até mesmo formatos específicos como Aztec ou Data Matrix, o IronQR cobre isso. O IronQR também suporta a funcionalidade de ler códigos de barras QR.
IronQR dos produtos de API .NET, que incluem várias ferramentas para documentos de escritório, edição de PDF, OCR e mais.
Passo 1: Crie um Novo Projeto ASP.NET Usando o Visual Studio
Comece criando um novo Projeto e selecionando o modelo MVC, conforme mostrado abaixo:

Em seguida, você deve fornecer um nome e localização para o projeto.

Selecione a versão do .NET.

Clicar no botão criar criará o seguinte código e projeto.

Passo 2: Instale a Biblioteca IronQR a partir do Gerenciador de Pacotes do Visual Studio
Instale a biblioteca IronQR a partir do gerenciador de pacotes do Visual Studio conforme mostrado abaixo:

IronQR também pode ser instalado usando o Gerenciador de Pacotes NuGet.

Passo 3: Faça o Upload da Imagem QR e Leia a Imagem QR
Agora, vamos criar um aplicativo de código QR.
Criar QRCodeModel
// Import necessary namespaces
using System.ComponentModel.DataAnnotations;
namespace IronQRScannerAsp.Models
{
public class QRCodeModel
{
// Property to hold the uploaded QR code image
[Display(Name = "Select QR Image")]
public IFormFile QRCodeImage { get; set; }
}
}
// Import necessary namespaces
using System.ComponentModel.DataAnnotations;
namespace IronQRScannerAsp.Models
{
public class QRCodeModel
{
// Property to hold the uploaded QR code image
[Display(Name = "Select QR Image")]
public IFormFile QRCodeImage { get; set; }
}
}
' Import necessary namespaces
Imports System.ComponentModel.DataAnnotations
Namespace IronQRScannerAsp.Models
Public Class QRCodeModel
' Property to hold the uploaded QR code image
<Display(Name := "Select QR Image")>
Public Property QRCodeImage() As IFormFile
End Class
End Namespace
Criar um Controlador de Código QR
Adicione um novo controlador, clicando com o botão direito na pasta do controlador e fornecendo um nome mostrado abaixo:

Selecione Controlador Vazio.

Forneça o nome do controlador.

Agora adicione o seguinte código ao controlador.
// Import necessary namespaces
using IronQr;
using IronQRScannerAsp.Models;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;
namespace IronQRScannerAsp.Controllers
{
// Controller to handle QR code scanning functionalities
public class QrCodeController : Controller
{
private readonly IWebHostEnvironment _environment;
// Constructor for dependency injection of the hosting environment
public QrCodeController(IWebHostEnvironment environment)
{
_environment = environment;
}
// Displays the initial View
public IActionResult Index()
{
ViewBag.QrCodeText = "Text";
return View();
}
// Handles the POST request to scan a QR code
[HttpPost]
public IActionResult ScanQRCode(QRCodeModel qrImage)
{
string path = Path.Combine(_environment.WebRootPath, "ScanQRCode");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
// Define the file path for saving the uploaded QR image
string filePath = Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png");
using (var stream = System.IO.File.Create(filePath))
{
qrImage.QRCodeImage.CopyTo(stream); // Save uploaded image to server
}
// Open the asset to read a QR Code from
var bitmap = AnyBitmap.FromFile(filePath);
// Load the asset into QrImageInput
QrImageInput imageInput = new QrImageInput(bitmap);
// Create a QR Reader object
QrReader reader = new QrReader();
// Read the Input and get all embedded QR Codes
IEnumerable<QrResult> results = reader.Read(imageInput);
// Display scanned text and image on the view
ViewBag.QrCodeText = results.First().Value;
string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/ScanQRCode/qrcode.png";
ViewBag.QrCodeUri = imageUrl;
return View();
}
}
}
// Import necessary namespaces
using IronQr;
using IronQRScannerAsp.Models;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;
namespace IronQRScannerAsp.Controllers
{
// Controller to handle QR code scanning functionalities
public class QrCodeController : Controller
{
private readonly IWebHostEnvironment _environment;
// Constructor for dependency injection of the hosting environment
public QrCodeController(IWebHostEnvironment environment)
{
_environment = environment;
}
// Displays the initial View
public IActionResult Index()
{
ViewBag.QrCodeText = "Text";
return View();
}
// Handles the POST request to scan a QR code
[HttpPost]
public IActionResult ScanQRCode(QRCodeModel qrImage)
{
string path = Path.Combine(_environment.WebRootPath, "ScanQRCode");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
// Define the file path for saving the uploaded QR image
string filePath = Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png");
using (var stream = System.IO.File.Create(filePath))
{
qrImage.QRCodeImage.CopyTo(stream); // Save uploaded image to server
}
// Open the asset to read a QR Code from
var bitmap = AnyBitmap.FromFile(filePath);
// Load the asset into QrImageInput
QrImageInput imageInput = new QrImageInput(bitmap);
// Create a QR Reader object
QrReader reader = new QrReader();
// Read the Input and get all embedded QR Codes
IEnumerable<QrResult> results = reader.Read(imageInput);
// Display scanned text and image on the view
ViewBag.QrCodeText = results.First().Value;
string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/ScanQRCode/qrcode.png";
ViewBag.QrCodeUri = imageUrl;
return View();
}
}
}
' Import necessary namespaces
Imports IronQr
Imports IronQRScannerAsp.Models
Imports IronSoftware.Drawing
Imports Microsoft.AspNetCore.Mvc
Namespace IronQRScannerAsp.Controllers
' Controller to handle QR code scanning functionalities
Public Class QrCodeController
Inherits Controller
Private ReadOnly _environment As IWebHostEnvironment
' Constructor for dependency injection of the hosting environment
Public Sub New(ByVal environment As IWebHostEnvironment)
_environment = environment
End Sub
' Displays the initial View
Public Function Index() As IActionResult
ViewBag.QrCodeText = "Text"
Return View()
End Function
' Handles the POST request to scan a QR code
<HttpPost>
Public Function ScanQRCode(ByVal qrImage As QRCodeModel) As IActionResult
Dim path As String = System.IO.Path.Combine(_environment.WebRootPath, "ScanQRCode")
If Not Directory.Exists(path) Then
Directory.CreateDirectory(path)
End If
' Define the file path for saving the uploaded QR image
Dim filePath As String = System.IO.Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png")
Using stream = System.IO.File.Create(filePath)
qrImage.QRCodeImage.CopyTo(stream) ' Save uploaded image to server
End Using
' Open the asset to read a QR Code from
Dim bitmap = AnyBitmap.FromFile(filePath)
' Load the asset into QrImageInput
Dim imageInput As New QrImageInput(bitmap)
' Create a QR Reader object
Dim reader As New QrReader()
' Read the Input and get all embedded QR Codes
Dim results As IEnumerable(Of QrResult) = reader.Read(imageInput)
' Display scanned text and image on the view
ViewBag.QrCodeText = results.First().Value
Dim imageUrl As String = $"{Me.Request.Scheme}://{Me.Request.Host}{Me.Request.PathBase}" & "/ScanQRCode/qrcode.png"
ViewBag.QrCodeUri = imageUrl
Return View()
End Function
End Class
End Namespace
Explicação do código
O trecho de código fornecido é para um controlador ASP.NET Core MVC chamado QrCodeController, projetado para lidar com funcionalidades de escaneamento de código QR usando a biblioteca IronQR. Aqui está uma breve descrição do que o código faz:
1. Salvando a Imagem do Código QR Carregada
Construção do Caminho
- Ele constrói um caminho de arquivo dentro do diretório raiz da web especificamente para salvar imagens de código QR (diretório "ScanQRCode").
- Ele verifica se este diretório existe e, se não, o cria para evitar erros de arquivo não encontrado ao salvar o arquivo.
Salvamento do Arquivo
- Ele constrói o caminho completo do arquivo (
filePath) onde a imagem do código QR carregada será salva ("ScanQRCode/qrcode.png"). Isso sobrescreve qualquer arquivo existente com o mesmo nome, efetivamente lidando com novas varreduras sem acumular arquivos. - Ele abre um fluxo de arquivo e copia o conteúdo da imagem carregada (
qrImage.QRCodeImage, provavelmente um arquivo de formulário) para a localização especificada no servidor.
2. Decodificando o Código QR
Lendo o Arquivo de Imagem
- Utiliza
AnyBitmap.FromFile(filePath)para carregar o arquivo de imagem salvo em um formato adequado para o escaneamento de código QR.AnyBitmapprovavelmente serve como uma classe auxiliar para converter arquivos de imagem em um objeto bitmap que o leitor de QR pode processar.
Inicializando o Leitor de QR
- Envolve o bitmap carregado em um
QrImageInput, especialmente projetado para ser uma entrada para o processo de leitura de código QR. - Instancia um
QrReader, um componente da biblioteca IronQR configurado para detectar e decodificar códigos QR.
Escaneando o Código QR
- Chama
reader.Read(imageInput)para escanear a imagem em busca de códigos QR. Este método retorna umIEnumerable<QrResult>, onde cadaQrResultcontém dados de um código QR detectado na imagem. - Extrai o valor do primeiro resultado usando
results.First().Valuee armazena essa informação decodificada emViewBag.QrCodeText. Isso assume que a imagem contém pelo menos um código QR e não trata de possíveis erros onde não são detectados códigos QR.
3. Preparando e Retornando a Resposta
Construção da URL da Imagem
- Constrói uma URL (
imageUrl) apontando para a imagem do código QR salva no servidor. Esta URL é construída usando o esquema do pedido HTTP atual, host e base de caminho, assegurando que esteja acessível para visualização dos usuários. - A URL construída é salva em
ViewBag.QrCodeUri.
Retorno da Visualização
- Retorna a mesma visualização (
View()), que provavelmente exibe tanto a imagem do código QR quanto o texto decodificado para o usuário. OViewBagé usado para passar o texto decodificado do código QR e a URL da imagem para a visualização para renderização.
Adicionar Visualização à Classe Controller
Adicione uma nova visualização, clique com o botão direito no método de ação CreateQRCode na classe QrCodeController.

Selecione a opção 'Adicionar Visualização' e, em seguida, selecione 'Visualização Razor'. Clique em 'Adicionar'.

Em seguida, selecione o template "Criar" e a classe Modelo gerada anteriormente.

Agora substitua o código na classe de visualização pelo mostrado abaixo.
@model IronQRScannerAsp.Models.QRCodeModel
@{
ViewData["Title"] = "ScanQRCode";
}
<h1>ScanQRCode</h1>
<h4>QRCodeModel</h4>
<hr />
<div class="row">
<div class="col-md-14">
<form asp-action="ScanQRCode" enctype="multipart/form-data">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label for="QRCodeImage">Select QR Image:</label>
<input asp-for="QRCodeImage" class="form-control" type="file" />
</div>
<div class="form-group">
<input type="submit" value="Upload" class="btn btn-primary" />
</div>
</form>
</div>
</div>
<div>
<h3>Scanned Text:</h3>
<h4>@ViewBag.QrCodeText</h4>
@if (ViewBag.QrCodeUri != null)
{
<img src="@ViewBag.QrCodeUri" class="img-thumbnail" />
}
</div>
<div>
<a asp-action="Index">Clear</a>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
Agora no Program.cs altere o seguinte código para tornar a visualização acima a rota padrão:
app.MapControllerRoute(
name: "default",
pattern: "{controller=QrCode}/{action=Index}");
app.MapControllerRoute(
name: "default",
pattern: "{controller=QrCode}/{action=Index}");
app.MapControllerRoute(name:= "default", pattern:= "{controller=QrCode}/{action=Index}")
Isso altera a rota padrão de HomeController para o nosso Controlador QrCode.
Imagem de entrada com URL: https://ironsoftware.com/csharp/qr/.

Saída

Na página, selecione uma imagem de código QR e clique em enviar para decodificar o código QR. Este aplicativo também pode ser modificado para ler a partir de um feed de vídeo e exibir resultados.
Passo 4: Ler Código QR Avançado
Para ler códigos QR avançados, IronQR fornece as seguintes configurações.
// Import necessary namespaces
using IronQr;
using IronSoftware.Drawing;
using IronQr.Enum;
using System.Collections.Generic;
// Load an image file as a bitmap
var inputBmp = AnyBitmap.FromFile("QrImage.png");
// Use Auto => Machine Learning Scan
QrImageInput scan_ML_and_normal = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results1 = new QrReader().Read(scan_ML_and_normal);
// Use Machine Learning Scan - High Speed
QrImageInput scan_ML_only = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results2 = new QrReader().Read(scan_ML_only);
// Use Scan without Machine Learning
QrImageInput scan_normal_only = new QrImageInput(inputBmp, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> results3 = new QrReader().Read(scan_normal_only);
// Import necessary namespaces
using IronQr;
using IronSoftware.Drawing;
using IronQr.Enum;
using System.Collections.Generic;
// Load an image file as a bitmap
var inputBmp = AnyBitmap.FromFile("QrImage.png");
// Use Auto => Machine Learning Scan
QrImageInput scan_ML_and_normal = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results1 = new QrReader().Read(scan_ML_and_normal);
// Use Machine Learning Scan - High Speed
QrImageInput scan_ML_only = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results2 = new QrReader().Read(scan_ML_only);
// Use Scan without Machine Learning
QrImageInput scan_normal_only = new QrImageInput(inputBmp, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> results3 = new QrReader().Read(scan_normal_only);
' Import necessary namespaces
Imports IronQr
Imports IronSoftware.Drawing
Imports IronQr.Enum
Imports System.Collections.Generic
' Load an image file as a bitmap
Private inputBmp = AnyBitmap.FromFile("QrImage.png")
' Use Auto => Machine Learning Scan
Private scan_ML_and_normal As New QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel)
Private results1 As IEnumerable(Of QrResult) = (New QrReader()).Read(scan_ML_and_normal)
' Use Machine Learning Scan - High Speed
Private scan_ML_only As New QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel)
Private results2 As IEnumerable(Of QrResult) = (New QrReader()).Read(scan_ML_only)
' Use Scan without Machine Learning
Private scan_normal_only As New QrImageInput(inputBmp, QrScanMode.OnlyBasicScan)
Private results3 As IEnumerable(Of QrResult) = (New QrReader()).Read(scan_normal_only)
Ao aproveitar o mais recente em tecnologia ML, elevamos o leitor de código QR a novos patamares. O modelo ML sofisticado aprimora a precisão e a eficiência das aplicações na decodificação de códigos QR, mesmo em condições complexas. Quer lendo códigos QR de imagens paradas, fluxos de vídeo ou feeds de câmera ao vivo, a solução alimentada por ML entrega as informações necessárias de forma rápida e confiável. Essa inovação simplifica a recuperação de dados e aumenta a segurança ao identificar códigos QR genuínos e sinalizar possíveis ameaças. Com nossa tecnologia ML, você pode ter confiança de que suas capacidades de escaneamento de código QR estão na vanguarda, proporcionando aos seus usuários uma experiência tranquila e segura
Licença (Versão de teste disponível)
Os desenvolvedores podem obter uma licença de teste IronQR aqui. A Chave precisa ser colocada no appSettings.json.
{
"IronQr.License.LicenseKey": "My Key"
}
Conclusão
Neste artigo, exploramos como escanear códigos QR no ASP.NET Core usando IronQR. Integrar IronQR em uma aplicação ASP.NET para escaneamento de código QR é um processo direto que melhora as capacidades das aplicações web, tornando-as mais interativas e amigáveis ao usuário. Os poderosos recursos do IronQR e sua facilidade de uso o tornam uma excelente escolha para desenvolvedores que buscam implementar funcionalidades relacionadas a código de barras.
Perguntas frequentes
Como posso implementar um leitor de código QR em uma aplicação ASP.NET?
Para implementar um leitor de código QR em uma aplicação ASP.NET, comece criando um novo projeto no Visual Studio, instale a biblioteca IronQR através do Gerenciador de Pacotes e adicione o código para lidar com a leitura do código QR utilizando os recursos robustos do IronQR.
Quais são os passos para configurar um QRCodeModel em ASP.NET?
Para configurar um QRCodeModel em ASP.NET, defina uma classe de modelo para lidar com os dados do código QR, use o IronQR para processar a entrada e certifique-se de que seu aplicativo ASP.NET possa gerenciar a leitura do código QR e a exibição dos resultados.
O IronQR consegue ler códigos QR de diferentes formatos de imagem?
Sim, o IronQR consegue ler códigos QR de vários formatos de imagem, incluindo jpg, png, svg, bmp, gif, tif, tiff e imagens com várias páginas, o que o torna versátil para diversas aplicações.
Como o IronQR utiliza aprendizado de máquina para leitura de códigos QR?
A IronQR utiliza modelos avançados de aprendizado de máquina para aprimorar a precisão da leitura de códigos QR, garantindo uma leitura confiável e precisa em diversos ambientes e plataformas.
Em quais plataformas posso usar o IronQR para leitura de códigos QR?
O IronQR oferece suporte a uma ampla gama de plataformas, incluindo aplicativos web (Blazor e WebForms), aplicativos móveis (Xamarin e MAUI), aplicativos desktop (WPF e MAUI) e aplicativos de console, compatíveis com C#, F# e VB.NET.
Como faço para lidar com o upload de arquivos para leitura de código QR em ASP.NET?
Em ASP.NET, gerencie o envio de arquivos para leitura de códigos QR configurando um controlador para receber os arquivos e, em seguida, usando o IronQR para processar e ler as imagens de código QR enviadas de forma eficiente.
É possível ler códigos QR de vídeos usando o IronQR?
Sim, o IronQR pode ser adaptado para ler códigos QR de vídeos, ampliando sua aplicação para ambientes dinâmicos onde o processamento de dados em tempo real é necessário.
Quais opções de licenciamento estão disponíveis para o IronQR?
A IronQR oferece licenças de avaliação que podem ser obtidas no site da Iron Software. Os desenvolvedores devem inserir a chave de licença no arquivo appSettings.json para ativar a versão de avaliação.
Quais são alguns dos benefícios de usar o IronQR para leitura de códigos QR em ASP.NET?
Utilizar o IronQR para leitura de códigos QR em ASP.NET oferece benefícios como fácil integração, suporte a diversos formatos de imagem, precisão aprimorada por aprendizado de máquina e compatibilidade entre plataformas.
Como posso personalizar a criação de códigos QR em ASP.NET usando o IronQR?
Para personalizar a criação de códigos QR em ASP.NET com o IronQR, utilize os recursos da biblioteca para modificar o tamanho, as cores e os dados incorporados do código QR, adaptando a saída aos requisitos específicos da aplicação.



