Cómo construir un escáner de códigos QR en Blazor
Blazor Server es un marco web .NET que ejecuta C# en el servidor y envía actualizaciones de interfaz de usuario al navegador a través de una conexión SignalR. IronQR se integra directamente en Blazor Server, permitiendo el escaneo de códigos QR en el lado del servidor a partir de imágenes cargadas en el navegador sin JavaScript.
En esta guía práctica, construiremos una página de Blazor Server que acepte una carga de imagen y decodifique cualquier código QR incrustado usando IronQR.
Cómo escanear un código QR en Blazor
- Instale la biblioteca C# IronQR para escanear códigos QR en la web
- Agregue un componente
InputFilepara aceptar cargas de imágenes desde el navegador - Transmita el archivo cargado a una ruta temporal en el servidor
- Cargue la imagen y envuélvala en un
QrImageInput - Llame a
Ready muestre el valor decodificado en el componente de Blazor
Requisitos previos
- Visual Studio 2022 con la carga de trabajo de desarrollo web y ASP.NET instalada
- Un proyecto Blazor Server que apunte a .NET 8 o posterior
Instalar IronQR
Instale la biblioteca IronQR usando la Consola del Administrador de Paquetes NuGet en Visual Studio. Navega a Tools > NuGet Package Manager > Package Manager Console y ejecuta:
Install-Package IronQR
Alternativamente, busca IronQR en NuGet e instala la última versión.
Diseño del componente Blazor
La interfaz de usuario del escáner utiliza el componente InputFile incorporado de Blazor para la selección de archivos nativa del navegador, un botón para activar el escaneo y un párrafo para mostrar el resultado decodificado. No se requiere interoperabilidad con JavaScript.
Agrega un nuevo componente Razor Scanner.razor con el siguiente marcado:
@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>
Entrada de muestra
Use el código QR a continuación como imagen de prueba. Guárdelo en su dispositivo, cárguelo a través del selector de archivos en la aplicación y luego haga clic en Escanear código QR. El valor decodificado debería mostrarse como https://ironsoftware.com.
Código QR de muestra — codifica https://ironsoftware.com
Escaneo de código QR con IronQR
Cuando se selecciona un archivo, OnFileSelected transmite la carga del navegador a un archivo temporal en el servidor. Cuando se hace clic en el botón de escaneo, ScanQRCode carga el archivo en un AnyBitmap, lo pasa a QrReader.Read() y escribe el primer valor decodificado en scannedText, que Blazor renderiza automáticamente en el componente.
Agrega el siguiente bloque @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 directamente los bytes subidos a un archivo temporal del lado del servidor. AnyBitmap.FromFile decodifica el formato de imagen, y QrReader.Read devuelve un IEnumerable<QrResult> con una entrada por cada código QR encontrado. FirstOrDefault maneja de forma segura imágenes sin código QR sin lanzar una excepción.
Producción
Después de seleccionar una imagen de código QR y hacer clic en Escanear código QR, el valor decodificado se renderiza en el párrafo de resultado debajo de los controles.
Valor del código QR decodificado renderizado en el componente de Blazor
Descargar el Proyecto
Haga clic aquí para descargar el proyecto completo BlazorQrScanner.
Conclusión
IronQR se integra en una aplicación Blazor Server sin JavaScript. InputFile proporciona selección de archivos nativa del navegador, y QrReader.Read maneja la decodificación enteramente en el servidor. El mismo patrón escala para escanear múltiples códigos QR por imagen iterando sobre la colección completa de resultados en lugar de llamar a FirstOrDefault.
Para más información sobre la lectura de códigos QR y los modos de escaneo disponibles, consulte las guías Leer códigos QR desde imagen y Leer códigos QR con modos de escaneo.
Preguntas Frecuentes
¿Cuál es el uso principal de IronQR en una aplicación Blazor Server?
IronQR se utiliza principalmente en una aplicación Blazor Server para habilitar el escaneo de código QR del lado del servidor desde imágenes cargadas vía el navegador, sin necesidad de JavaScript.
¿Cómo se instala la biblioteca IronQR en un proyecto Blazor?
Para instalar la biblioteca IronQR en un proyecto Blazor, use la Consola del Administrador de Paquetes NuGet en Visual Studio y ejecute el comando de instalación, o busque 'IronQR' en NuGet e instale la última versión.
¿Qué componente se usa en Blazor para manejar las cargas de imágenes para el escaneo de códigos QR?
El componente `InputFile` se usa en Blazor para manejar las cargas de imágenes, permitiendo a los usuarios seleccionar imágenes desde el navegador para el escaneo de códigos QR.
¿Cómo decodifica IronQR los códigos QR en una aplicación Blazor?
En una aplicación Blazor, IronQR decodifica los códigos QR cargando la imagen seleccionada en un `AnyBitmap` y luego usando `QrReader.Read()` para extraer y mostrar los datos del código QR.
¿Puede IronQR manejar imágenes con múltiples códigos QR?
Sí, IronQR puede manejar imágenes con múltiples códigos QR iterando sobre la colección `IEnumerable
¿Necesita JavaScript para implementar el escaneo de códigos QR con IronQR en Blazor?
No, no necesita JavaScript para implementar el escaneo de códigos QR con IronQR en Blazor, ya que todo el proceso se gestiona del lado del servidor.
¿Cuál es el rol de `AnyBitmap` en el proceso de escaneo de IronQR?
`AnyBitmap` se utiliza para decodificar el formato de imagen del archivo cargado, preparándolo para la lectura de códigos QR con IronQR.
¿Cómo muestra Blazor el resultado de un escaneo de código QR?
Blazor muestra el resultado de un escaneo de código QR renderizando el valor decodificado en un elemento de párrafo dentro de la interfaz de usuario del componente.
¿Qué sucede si se carga una imagen sin código QR en el escáner Blazor?
Si se carga una imagen sin código QR, llamar a `FirstOrDefault` en el `IEnumerable
¿Es posible descargar el proyecto completo del escáner QR Blazor?
Sí, puede descargar el proyecto completo del escáner QR Blazor desde el enlace proporcionado en la página web de la guía.

