Cómo leer códigos QR desde imágenes en C

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

IronQR permite a los desarrolladores leer códigos QR de varios formatos de imagen en C# cargando imágenes con IronDrawing, creando un objeto QrImageInput y utilizando el método BarcodeReader.Read para descodificar los datos QR de forma eficiente.

como-encabezado:2(Quickstart: Read QR Code from Image in C#)

¿Cómo leer códigos QR de diferentes formatos de imagen?

IronQR ofrece soporte integrado para la lectura de códigos QR a partir de varios formatos de imagen. Esta funcionalidad utiliza modelos avanzados de aprendizaje automático para garantizar una descodificación precisa en diferentes tipos de medios. Los formatos compatibles incluyen:

  • Grupo de Expertos en Fotografía (JPEG)
  • Gráficos de Red Portátiles (PNG)
  • Formato de Intercambio de Gráficos (GIF)
  • Formato de Archivo de Imagen Etiquetada (TIFF)
  • Archivo de Imagen BMP
  • WBMP
  • WebP
  • Icono (ico)
  • WMF
  • RawFormat (raw)

Este formato es compatible con la biblioteca de código abierto IronDrawing, que procesa imágenes de forma eficiente. Puede procesar códigos QR de cámaras digitales, escáneres, dispositivos móviles o descargas web sin conversión de formatos.

Ejemplo de código QR con un patrón claro en blanco y negro que muestra los cuadrados de posicionamiento y los módulos de datos para probar el escaneo de imágenes

Nuget IconEmpieza a crear PDF con NuGet ahora:

  1. Instalar IronQR con el gestor de paquetes NuGet

    PM > Install-Package IronQR

  2. Copie y ejecute este fragmento 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 QR code from the image
                var result = BarcodeReader.Read(qrImageInput);
    
                // Iterate through each detected QR code and display its information
                foreach (var barcodeResult in result.Barcodes)
                {
                    Console.WriteLine($"QR Code Data: {barcodeResult.Value}");
                }
            }
        }
    }
  3. Despliegue para probar en su entorno real

    Empieza a utilizar IronQR en tu proyecto hoy mismo con una prueba gratuita
    arrow pointer

Nota: Reemplace "path/to/your/image/file.webp" con la ruta real de su archivo de imagen de código QR.

¿Te interesa el valor del código QR en las imágenes de muestra? ¡Pruébalo con el fragmento de código!

¿Por qué IronQR admite varios formatos de imagen?

Leer un código QR significa escanear y descodificar la información almacenada en un código QR. Para ello se suele utilizar una cámara o un escáner junto con un software capaz de interpretar los datos del código QR. La información en un código QR podría ser texto, URLs, detalles de contacto u otras formas de datos.

La compatibilidad multiformato de IronQR es esencial para aplicaciones del mundo real en las que los códigos QR aparecen en diversos contextos, desde materiales de marketing y envases de productos hasta documentos digitales y contenidos web. Al ser compatible con diversos formatos, IronQR garantiza que los desarrolladores puedan crear aplicaciones sólidas sin preocuparse por la compatibilidad de los formatos de imagen. Obtenga más información sobre las capacidades de lectura de IronQR para comprender cómo esta flexibilidad mejora su flujo de trabajo de desarrollo.

¿Cuándo debo utilizar cada formato de imagen?

Los distintos formatos de imagen sirven para diferentes propósitos en el procesamiento de códigos QR:

  • PNG: mejor para códigos QR que requieren transparencia o cuando la calidad de la imagen es primordial. La compresión sin pérdidas de PNG garantiza que los patrones de los códigos QR sigan siendo nítidos y legibles.
  • JPEG: ideal para fotografías que contengan códigos QR o cuando el tamaño del archivo sea un problema. Utilice ajustes de calidad más altos (80%+) para evitar que los artefactos de compresión afecten a la legibilidad.
  • TIFF: Perfecto para fines de archivo o cuando se trabaja con documentos escaneados en entornos empresariales.
  • WebP: Formato moderno que ofrece una excelente compresión con retención de calidad, ideal para aplicaciones web.

Para obtener resultados óptimos con cualquier formato, asegúrese de que sus imágenes mantienen una resolución suficiente (al menos 300 DPI para códigos QR impresos) y contraste. Consulta nuestros ejemplos avanzados de lectura de QR para conocer las técnicas de optimización específicas de cada formato.

¿Qué ocurre si la calidad de la imagen es mala?

IronQR incorpora funciones de tolerancia a fallos para manejar imágenes imperfectas. Cuando se trata de imágenes de mala calidad, la biblioteca emplea varias estrategias:

  1. Corrección de errores: Los códigos QR incluyen capacidades de corrección de errores (niveles L, M, Q, H), lo que permite la recuperación de datos incluso cuando hasta el 30% del código está dañado
  2. Mejora del aprendizaje automático: los modelos de aprendizaje automático de IronQR detectan y compensan problemas comunes como el desenfoque, la distorsión y la mala iluminación
  3. Preprocesamiento: La mejora automática de la imagen mejora el contraste y la nitidez antes de los intentos de descodificación

Para situaciones difíciles, considere el uso de opciones de modo de lectura de QR personalizados para ajustar el proceso de lectura:

// Example: Reading QR codes 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 QR codes 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 QR codes 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 QR codes 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}%");
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

¿Qué tipos de códigos QR puedo leer?

Se admiten múltiples tipos de códigos QR tanto para creación como para lectura. IronQR ofrece compatibilidad completa con varios formatos de códigos QR para satisfacer las diversas necesidades de las aplicaciones. Más información sobre formatos QR compatibles en nuestra documentación. Tipos de códigos QR compatibles:

  • QRCode: El código QR estándar más utilizado en la actualidad. Puede almacenar hasta 7.089 caracteres numéricos o 4.296 caracteres alfanuméricos, lo que lo hace adecuado para URL de sitios web, información de contacto y otras aplicaciones.
Ejemplo de código QR con un patrón claro en blanco y negro que muestra los cuadrados de posicionamiento y los módulos de datos para probar el escaneo de imágenes
  • MicroQRCode: Una versión más pequeña del código QR estándar diseñada para espacios limitados. Puede almacenar hasta 35 caracteres numéricos o 21 caracteres alfanuméricos, lo que resulta ideal para envases pequeños o etiquetas impresas diminutas.
Código QR estándar con patrones de búsqueda y módulos de datos que muestran la estructura típica de un código QR
  • RMQRCode: El código RMQR(Rectangular Micro QRCode) es una versión compacta rectangular en lugar de cuadrada. Esta versión permite flexibilidad en la relación de aspecto, útil para aplicaciones en las que se dispone de espacio rectangular.
Ejemplo de código QR rectangular que muestra un formato no cuadrado con marcadores de posición y patrones de datos estándar

¿Cómo elegir el tipo de código QR adecuado?

La selección del tipo de código QR adecuado depende de su caso de uso específico y de sus limitaciones:

  • Código QR estándar: Elíjalo para aplicaciones de uso general en las que el espacio no sea limitado y necesite la máxima capacidad de datos. Perfecto para URL, credenciales WiFi, contactos vCard o información detallada de productos. Consulte nuestros ejemplos de generación de código QR para obtener detalles sobre la implementación.

  • Código micro QR: ideal para trabajar con superficies pequeñas, como componentes electrónicos, etiquetas de joyería o dispositivos médicos. A pesar de su capacidad limitada, es perfecto para números de serie, URL sencillas o códigos de seguimiento básicos.

  • Código RMQR: seleccione códigos rectangulares cuando el espacio disponible tenga limitaciones dimensionales específicas, como etiquetas estrechas en productos cilíndricos o espacios alargados en los bordes de los envases.

¿Cuáles son las limitaciones del almacenamiento de datos?

Comprender la capacidad de los datos ayuda a optimizar la implementación del código QR:

Tipo de código QRSólo numéricoAlfanuméricoBinarioKanji
QR estándar7,0894,2962,9531,817
Micro QR3521159
RMQRVariableVariableVariableVariable

Tenga en cuenta estos factores a la hora de planificar el almacenamiento de datos:

  • Utilice acortadores de URL para los enlaces web con el fin de maximizar el espacio disponible
  • Implementar la compresión de datos para grandes conjuntos de datos
  • Elija los niveles de corrección de errores adecuados (una corrección más alta reduce la capacidad)

Para implementaciones avanzadas, explore nuestra guía de generación de códigos QR estilizados para equilibrar la estética con la capacidad de datos.

¿Cuándo debo utilizar códigos micro o RMQR?

Los códigos Micro y RMQRdestacan en escenarios específicos:

Los microcódigos QR son perfectos para:

  • Placas de circuitos electrónicos que requieren el seguimiento de componentes
  • Pequeños dispositivos médicos que necesitan identificadores de pacientes o medicamentos
  • Autenticación de joyas con espacio de grabado limitado
  • Etiquetas de productos en miniatura en la fabricación

Los códigos RMQRfuncionan mejor para:

  • Etiquetas de envío estrechas en tubos o tuberías
  • Espacios alargados en lápices o herramientas
  • Materiales de marketing tipo banner
  • Integración en elementos de diseño rectangulares existentes

He aquí un ejemplo práctico para leer distintos tipos de códigos QR:

using IronBarcode;
using IronSoftware.Drawing;

public class MultiTypeQRReader
{
    public static void ReadVariousQRTypes()
    {
        // Configure reader to handle all QR code 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 QR code 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("---");
                }
            }
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Para implementaciones de producción, revise nuestra guía de paquetes NuGet para asegurarse de que tiene el paquete adecuado para su plataforma, y consulte la referencia de API para obtener documentación completa sobre todos los métodos y propiedades disponibles.

Preguntas Frecuentes

¿Qué formatos de imagen admite IronQR para la lectura de códigos QR?

IronQR soporta la lectura de códigos QR desde múltiples formatos de imagen, incluyendo JPEG, PNG, GIF, TIFF, BMP, WBMP, WebP, ICO, WMF y RawFormat. Este amplio soporte de formatos está potenciado por IronDrawing, lo que le permite procesar códigos QR de diversas fuentes sin conversión de formatos.

¿Cómo leo un código QR desde un archivo de imagen en C#?

Para leer un código QR usando IronQR, primero cargue su imagen usando Image.FromFile(), cree un objeto QrImageInput a partir de la imagen cargada, luego use BarcodeReader.Read() para decodificar los datos QR. El método devuelve resultados que puede recorrer para acceder a la información de cada código QR detectado.

¿Qué tecnología permite la lectura precisa de códigos QR en distintos tipos de soporte?

IronQR utiliza modelos avanzados de aprendizaje automático para garantizar una descodificación precisa de los códigos QR en diferentes tipos de medios y formatos de imagen. Este enfoque basado en IA ayuda a mantener una alta precisión incluso en condiciones de imagen difíciles.

¿Puedo leer varios códigos QR a partir de una sola imagen?

Sí, IronQR puede detectar y leer múltiples códigos QR a partir de una sola imagen. El método BarcodeReader.Read devuelve una colección de resultados, lo que le permite iterar a través de cada código QR detectado utilizando un bucle foreach para acceder a los datos individuales del código QR.

¿Qué tipos de datos pueden almacenarse en los códigos QR que lee IronQR?

IronQR puede descodificar varios tipos de datos almacenados en códigos QR, como texto sin formato, URL, datos de contacto y otras formas de datos estructurados. La información descodificada es accesible a través de la propiedad Value de cada objeto BarcodeResult.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más
¿Listo para empezar?
Nuget Descargas 54,049 | Versión: 2025.12 recién lanzado