Como Criar um Scanner de Código QR no Blazor
Blazor Server é um framework web .NET que executa C# no servidor e envia atualizações de UI para o navegador por meio de uma conexão SignalR. IronQR se integra diretamente ao Blazor Server, permitindo a varredura de códigos QR do lado do servidor a partir de imagens carregadas no navegador sem qualquer JavaScript.
Neste guia passo a passo, construiremos uma página Blazor Server que aceita o upload de uma imagem e decodifica qualquer código QR embutido usando IronQR.
Como Digitalizar um Código QR no Blazor
- Instale a biblioteca IronQR C# para digitalizar códigos QR na web
- Adicione um componente `InputFile` para aceitar uploads de imagens do navegador
- Transmita o arquivo carregado para um caminho temporário no servidor
- Carregue a imagem e envolva-a em um `QrImageInput`
- Chame `Read` e exiba o valor decodificado no componente Blazor
Pré-requisitos
- Visual Studio 2022 com o workload de ASP.NET e desenvolvimento web instalado
- Um projeto Blazor Server direcionado ao .NET 8 ou posterior
Instalar IronQR
Instale a biblioteca IronQR usando o Console do Gerenciador de Pacotes NuGet no Visual Studio. Navegue para Tools > NuGet Package Manager > Package Manager Console e execute:
Install-Package IronQR
Alternativamente, procure por IronQR em NuGet e instale a versão mais recente.
Layout do Componente Blazor
A interface do scanner usa o componente InputFile embutido do Blazor para seleção de arquivos nativa do navegador, um botão para acionar a digitalização e um parágrafo para exibir o resultado decodificado. Não é necessária interoperabilidade com JavaScript.
Adicione um novo componente Razor Scanner.razor com a seguinte marcação:
@page "/scanner"
@using IronQr
@using IronSoftware.Drawing
<h3>QR Code Scanner</h3>
<InputFile OnChange="OnFileSelected" accept="image/*" />
<br /><br />
<button @onclick="ScanQRCode" disabled="@(qrImageSrc == null)">Scan QR Code</button>
<p>Result: @scannedText</p>
Exemplo de Entrada
Use o código QR abaixo como imagem de teste. Salve-o em seu dispositivo, carregue-o via o seletor de arquivos no aplicativo, depois clique em Digitalizar Código QR. O valor decodificado deve ser exibido como https://ironsoftware.com.
Código QR de exemplo — codifica `https://ironsoftware.com`
Digitalização de Código QR com IronQR
Quando um arquivo é selecionado, OnFileSelected transmite o upload do navegador para um arquivo temporário no servidor. Quando o botão de digitalização é clicado, ScanQRCode carrega o arquivo em um AnyBitmap, passa-o para QrReader.Read(), e escreve o primeiro valor decodificado em scannedText, que o Blazor renderiza automaticamente no componente.
Adicione o seguinte bloco @code a Scanner.razor:
:path=/static-assets/qr/content-code-examples/how-to/blazor-qr-code-scanner.cs
using IronQr;
using IronSoftware.Drawing;
private string? qrImageSrc;
private string scannedText = string.Empty;
private async Task OnFileSelected(InputFileChangeEventArgs e)
{
var file = e.File;
var tempPath = Path.Combine(Path.GetTempPath(), file.Name);
await using var stream = file.OpenReadStream(maxAllowedSize: 10_000_000);
await using var fs = File.Create(tempPath);
await stream.CopyToAsync(fs);
qrImageSrc = tempPath;
}
private async Task ScanQRCode()
{
// Load the scanned QR code
var inputBmp = AnyBitmap.FromFile(qrImageSrc!);
var imageInput = new QrImageInput(inputBmp);
var reader = new QrReader();
// Read the scanned QR code
var results = reader.Read(imageInput);
// Check if a result was found
var firstResult = results.FirstOrDefault();
if (firstResult != null)
{
// Save the QR code value as a string
scannedText = firstResult.Value;
}
else
{
scannedText = "No QR code found in the selected image.";
}
}
Imports IronQr
Imports IronSoftware.Drawing
Imports System.IO
Imports Microsoft.AspNetCore.Components.Forms
Imports System.Threading.Tasks
Private qrImageSrc As String = Nothing
Private scannedText As String = String.Empty
Private Async Function OnFileSelected(e As InputFileChangeEventArgs) As Task
Dim file = e.File
Dim tempPath = Path.Combine(Path.GetTempPath(), file.Name)
Await Using stream = file.OpenReadStream(maxAllowedSize:=10000000)
Await Using fs = File.Create(tempPath)
Await stream.CopyToAsync(fs)
End Using
End Using
qrImageSrc = tempPath
End Function
Private Async Function ScanQRCode() As Task
' Load the scanned QR code
Dim inputBmp = AnyBitmap.FromFile(qrImageSrc)
Dim imageInput = New QrImageInput(inputBmp)
Dim reader = New QrReader()
' Read the scanned QR code
Dim results = reader.Read(imageInput)
' Check if a result was found
Dim firstResult = results.FirstOrDefault()
If firstResult IsNot Nothing Then
' Save the QR code value as a string
scannedText = firstResult.Value
Else
scannedText = "No QR code found in the selected image."
End If
End Function
InputFile.OpenReadStream transmite os bytes carregados diretamente para um arquivo temporário no lado do servidor. AnyBitmap.FromFile decodifica o formato da imagem, e QrReader.Read retorna um IEnumerable<QrResult> com uma entrada para cada código QR encontrado. FirstOrDefault lida com segurança imagens sem código QR sem lançar uma exceção.
Saída
Depois de selecionar uma imagem de código QR e clicar em Digitalizar Código QR, o valor decodificado é renderizado no parágrafo de resultado abaixo dos controles.
Valor decodificado do código QR renderizado no componente Blazor
Baixar o Projeto
Conclusão
IronQR se integra a um aplicativo Blazor Server sem JavaScript. InputFile fornece seleção de arquivos nativa do navegador, e QrReader.Read lida com a decodificação inteiramente no servidor. O mesmo padrão escala para escanear vários códigos QR por imagem, iterando sobre a coleção completa de resultados em vez de chamar FirstOrDefault.
Para mais informações sobre leitura de códigos QR e os modos de digitalização disponíveis, veja os guias Ler Códigos QR de Imagem e Ler Códigos QR com Modos de Digitalização.

