Cómo Leer Múltiples Códigos de Barras a la Vez en C#

Cómo leer varios códigos de barras a la vez en C#

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

IronBarcode permite la lectura simultánea de varios códigos de barras a partir de imágenes y archivos PDF mediante la configuración de ExpectMultipleBarcodes = verdadero, lo que agiliza el procesamiento de datos para aplicaciones de logística, comercio minorista y gestión de inventarios. Tanto si está construyendo sistemas de almacén, aplicaciones de punto de venta minorista o soluciones de procesamiento de documentos, las avanzadas capacidades de lectura de IronBarcode le proporcionan la fiabilidad y el rendimiento que necesita.

Inicio Rápido: Leer Todos los Códigos de Barras de una Imagen Fácilmente

Este ejemplo muestra lo rápido que se puede utilizar IronBarcode para escanear una imagen y obtener todos los códigos de barras que contiene. Sólo tiene que establecer ExpectMultipleBarcodes = verdadero junto a los tipos de código de barras que desee, sin repeticiones ni complicaciones.

Nuget IconEmpieza a crear PDF con NuGet ahora:

  1. Instalar IronBarcode con el gestor de paquetes NuGet

    PM > Install-Package BarCode

  2. Copie y ejecute este fragmento de código.

    var results = IronBarCode.BarcodeReader.Read("image.png", new IronBarCode.BarcodeReaderOptions { ExpectMultipleBarcodes = verdadero, ExpectBarcodeTypes = IronBarCode.BarcodeEncoding.AllOneDimensional });
  3. Despliegue para probar en su entorno real

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


¿Cómo leer varios BarCodes de una imagen?

Por defecto, IronBarcode escanea continuamente un documento para leer múltiples códigos de barras. Sin embargo, ha habido casos en los que sólo se devuelve un valor de código de barras, incluso cuando hay varios códigos de barras presentes. Para ello, personalice la configuración para permitir la lectura de varios códigos de barras, como se muestra a continuación. La propiedad ExpectMultipleBarcodes existe tanto en las clases BarcodeReaderOptions como en PdfBarcodeReaderOptions, lo que permite utilizarla para leer códigos de barras tanto en imágenes como en documentos PDF.

Tres códigos de barras de muestra etiquetados como A, B y C que muestran diferentes patrones de barras para la demostración de lectura de códigos de barras múltiples
:path=/static-assets/barcode/content-code-examples/how-to/read-multiple-barcodes-read-multiple-barcodes.cs
using IronBarCode;
using System;

// Set the option to read multiple barcodes
BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional,
};

// Read barcode
var results = BarcodeReader.Read("testbc1.png", options);

foreach (var result in results)
{
    Console.WriteLine(result.ToString());
}
$vbLabelText   $csharpLabel

Establecer ExpectMultipleBarcodes en true permite a IronBarcode escanear todo el documento en busca de múltiples códigos de barras y almacenarlos en la variable BarcodeResults. Utilizando un bucle foreach, puede acceder fácilmente a todos los valores del código de barras e imprimirlos en la consola.

Escenarios avanzados de lectura múltiple de códigos de barras

Al trabajar con varios códigos de barras, es posible que se encuentre con situaciones que requieran una configuración adicional. He aquí un ejemplo exhaustivo que demuestra cómo leer varios códigos de barras con distintos formatos a partir de un documento complejo:

using IronBarCode;
using System;
using System.Linq;

// Configure advanced options for mixed barcode types
BarcodeReaderOptions advancedOptions = new BarcodeReaderOptions()
{
    ExpectMultipleBarcodes = verdadero,
    // Read both 1D and 2D barcodes
    ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional | BarcodeEncoding.QRCode | BarcodeEncoding.DataMatrix,
    // Apply image correction filters for better accuracy
    ImageFilters = new ImageFilterCollection() {
        new SharpenFilter(),
        new ContrastFilter()
    },
    // Set speed vs accuracy balance
    Speed = ReadingSpeed.Balanced
};

// Read from various sources
var imageResults = BarcodeReader.Read("mixed-barcodes.jpg", advancedOptions);
var pdfResults = BarcodeReader.ReadPdf("document-with-barcodes.pdf", advancedOptions);

// Process results with error handling
foreach (var result in imageResults)
{
    Console.WriteLine($"Barcode Type: {result.BarcodeType}");
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Confidence: {result.Confidence}%");
    Console.WriteLine($"Page: {result.PageNumber}");
    Console.WriteLine("---");
}
using IronBarCode;
using System;
using System.Linq;

// Configure advanced options for mixed barcode types
BarcodeReaderOptions advancedOptions = new BarcodeReaderOptions()
{
    ExpectMultipleBarcodes = verdadero,
    // Read both 1D and 2D barcodes
    ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional | BarcodeEncoding.QRCode | BarcodeEncoding.DataMatrix,
    // Apply image correction filters for better accuracy
    ImageFilters = new ImageFilterCollection() {
        new SharpenFilter(),
        new ContrastFilter()
    },
    // Set speed vs accuracy balance
    Speed = ReadingSpeed.Balanced
};

// Read from various sources
var imageResults = BarcodeReader.Read("mixed-barcodes.jpg", advancedOptions);
var pdfResults = BarcodeReader.ReadPdf("document-with-barcodes.pdf", advancedOptions);

// Process results with error handling
foreach (var result in imageResults)
{
    Console.WriteLine($"Barcode Type: {result.BarcodeType}");
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Confidence: {result.Confidence}%");
    Console.WriteLine($"Page: {result.PageNumber}");
    Console.WriteLine("---");
}
$vbLabelText   $csharpLabel

Este ejemplo avanzado muestra varias características importantes:

¿Cómo puedo leer un solo BarCode para mejorar el rendimiento?

IronBarcode lee códigos de barras simples y múltiples en imágenes o PDF. Por defecto, el motor escanea todo el documento aunque solo exista un código de barras. Para aumentar el rendimiento al leer un solo código de barras, establezca ExpectMultipleBarcodes en false. Esto evita que el motor escanee todo el documento después de detectar el primer código de barras, lo que resulta en una recuperación más rápida del código de barras. El siguiente código muestra este enfoque.

Tres códigos de barras de muestra idénticos etiquetados como A, B y C para la demostración de lectura de códigos de barras
:path=/static-assets/barcode/content-code-examples/how-to/read-multiple-barcodes-read-single-barcode.cs
using IronBarCode;
using System;

// Set the option to read single barcode
BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    ExpectMultipleBarcodes = false,
    ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional,
};

// Read barcode
var results = BarcodeReader.Read("testbc1.png", options);

foreach (var result in results)
{
    Console.WriteLine(result.ToString());
}
$vbLabelText   $csharpLabel

En este ejemplo, utilizamos la misma imagen con múltiples códigos de barras que antes, pero establecimos ExpectMultipleBarcodes en false. Como resultado, solo se devuelve el valor del primer código de barras, y el proceso de escaneo se detiene una vez que se recupera el primer código de barras.

Optimización de la lectura de códigos de barras individuales con regiones de recorte

Para obtener un rendimiento aún mejor al leer códigos de barras individuales, combine el ajuste ExpectMultipleBarcodes = falso con especificaciones de región de recorte. Esta técnica es especialmente útil cuando se conoce la ubicación aproximada del código de barras:

using IronBarCode;
using IronSoftware.Drawing;

// Define a crop region where the barcode is likely located
var cropRegion = new Rectangle(100, 100, 300, 200);

// Configure options for optimal single barcode reading
BarcodeReaderOptions optimizedOptions = new BarcodeReaderOptions()
{
    ExpectMultipleBarcodes = falso,
    ExpectBarcodeTypes = BarcodeEncoding.Code128,
    CropArea = cropRegion,
    Speed = ReadingSpeed.Faster
};

// Read with optimized settings
var result = BarcodeReader.Read("product-label.png", optimizedOptions).FirstOrDefault();

if (result != null)
{
    Console.WriteLine($"Barcode found: {result.Value}");
    Console.WriteLine($"Read time: {result.ReadTime}ms");
}
using IronBarCode;
using IronSoftware.Drawing;

// Define a crop region where the barcode is likely located
var cropRegion = new Rectangle(100, 100, 300, 200);

// Configure options for optimal single barcode reading
BarcodeReaderOptions optimizedOptions = new BarcodeReaderOptions()
{
    ExpectMultipleBarcodes = falso,
    ExpectBarcodeTypes = BarcodeEncoding.Code128,
    CropArea = cropRegion,
    Speed = ReadingSpeed.Faster
};

// Read with optimized settings
var result = BarcodeReader.Read("product-label.png", optimizedOptions).FirstOrDefault();

if (result != null)
{
    Console.WriteLine($"Barcode found: {result.Value}");
    Console.WriteLine($"Read time: {result.ReadTime}ms");
}
$vbLabelText   $csharpLabel

¿Cuánto más rápida es la lectura de un solo código de barras?

Establecer ExpectMultipleBarcodes en false mejora en gran medida la eficiencia de la lectura de códigos de barras individuales. El aumento del rendimiento es especialmente notable cuando se trabaja con imágenes de alta resolución o cuando se implementa lectura asíncrona de códigos de barras en aplicaciones de alto rendimiento.

Usando el fragmento de código proporcionado, aquí hay una estimación aproximada de la diferencia de rendimiento entre establecer ExpectMultipleBarcodes en verdadero y falso en la misma máquina:

ExpectMultipleBarcodes = verdaderoExpectMultipleBarcodes = falso
00,91 segundos00.10 segundos

Esto representa aproximadamente una mejora de 9 veces el rendimiento al leer códigos de barras individuales. La ganancia de rendimiento real varía en función de:

  • Resolución y complejidad de la imagen
  • Número de BarCodes presentes en la imagen
  • Formatos de códigos de barras seleccionados
  • Filtros de imagen aplicados
  • Especificaciones de hardware

Mejores prácticas para la lectura múltiple de códigos de barras

Al implementar la lectura de códigos de barras múltiples en aplicaciones de producción, tenga en cuenta estas prácticas recomendadas:

  1. Especifique los tipos de códigos de barras esperados: en lugar de utilizar BarcodeEncoding.All, especifique solo los formatos que espera. Esto mejora significativamente el rendimiento.

  2. Utiliza formatos de imagen adecuados: Para obtener mejores resultados, utilice imágenes de alto contraste. Más información sobre creación de imágenes óptimas de códigos de barras.

  3. Códigos de barras imperfectos: Los códigos de barras del mundo real pueden estar dañados o mal impresos. Utilice técnicas de corrección de imágenes para mejorar los índices de éxito en la lectura.

  4. Procesamiento de flujos: Para grandes lotes, considere leer desde streams para optimizar el uso de memoria.

  5. Manejo de errores: Implemente siempre un tratamiento de errores adecuado para los escenarios en los que no se puedan leer los códigos de barras:
try
{
    var results = BarcodeReader.Read("barcodes.png", new BarcodeReaderOptions 
    { 
        ExpectMultipleBarcodes = verdadero 
    });

    if (!results.Any())
    {
        Console.WriteLine("No barcodes found in the image");
    }
    else
    {
        Console.WriteLine($"Found {results.Count()} barcodes");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Error reading barcodes: {ex.Message}");
    // Log error for debugging
}
try
{
    var results = BarcodeReader.Read("barcodes.png", new BarcodeReaderOptions 
    { 
        ExpectMultipleBarcodes = verdadero 
    });

    if (!results.Any())
    {
        Console.WriteLine("No barcodes found in the image");
    }
    else
    {
        Console.WriteLine($"Found {results.Count()} barcodes");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Error reading barcodes: {ex.Message}");
    // Log error for debugging
}
$vbLabelText   $csharpLabel

Siguiendo estas prácticas y utilizando las completas funciones de IronBarcode, podrá crear aplicaciones sólidas que gestionen de forma eficiente múltiples escenarios de lectura de códigos de barras en diversos sectores y casos de uso.

Preguntas Frecuentes

¿Cómo puedo leer varios códigos de barras a partir de una sola imagen en C#?

Con IronBarcode, puede leer varios códigos de barras de una sola imagen estableciendo ExpectMultipleBarcodes = true en BarcodeReaderOptions. Esto permite a IronBarcode escanear todo el documento y devolver todos los códigos de barras encontrados en una colección BarcodeResults que puede recorrer.

¿Cuál es la forma más rápida de escanear todos los códigos de barras de una imagen?

El método más rápido es utilizar el método Read de IronBarcode con ExpectMultipleBarcodes = true: var results = IronBarCode.BarcodeReader.Read("image.png", new IronBarCode.BarcodeReaderOptions { ExpectMultipleBarcodes = true }). Este código mínimo extrae todos los valores del código de barras sin una configuración compleja.

¿Puedo leer varios códigos de barras de documentos PDF, así como imágenes?

Sí, IronBarcode admite la lectura de múltiples códigos de barras tanto de imágenes como de documentos PDF. La propiedad ExpectMultipleBarcodes está disponible en las clases BarcodeReaderOptions y PdfBarcodeReaderOptions, lo que permite configurar la lectura de múltiples códigos de barras para cualquier tipo de documento.

¿Qué ocurre si no establezco ExpectMultipleBarcodes en true?

Por defecto, IronBarcode escanea continuamente los documentos en busca de múltiples códigos de barras. Sin embargo, en algunos casos, es posible que sólo se devuelva un valor de código de barras aunque existan varios. Al establecer ExpectMultipleBarcodes = true se garantiza explícitamente que IronBarcode explore y devuelva todos los códigos de barras del documento.

¿Cómo puedo acceder a los valores individuales de un código de barras después de leer varios códigos de barras?

Tras leer varios códigos de barras con IronBarcode, los resultados se almacenan en una variable BarcodeResults. Puede acceder fácilmente a los valores individuales de los códigos de barras utilizando un bucle foreach para iterar por la colección y procesar las propiedades de valor, texto y formato de cada código de barras.

¿Es adecuada la lectura de múltiples códigos de barras para aplicaciones de venta al por menor y logística?

Sí, la capacidad de lectura de múltiples códigos de barras de IronBarcode es ideal para sistemas de puntos de venta minoristas, gestión de almacenes, seguimiento logístico y aplicaciones de gestión de inventarios. Agiliza el procesamiento de datos mediante la lectura simultánea y eficaz de todos los códigos de barras de etiquetas de envío, catálogos de productos u hojas de inventario.

¿Puedo especificar qué tipos de códigos de barras buscar al leer varios códigos de barras?

Sí, IronBarcode permite especificar los tipos de códigos de barras esperados mediante la propiedad ExpectBarcodeTypes. Puede configurarlo para que escanee formatos específicos como AllOneDimensional, QRCode o cualquier combinación de tipos de códigos de barras compatibles para optimizar el rendimiento del escaneado.

¿Afecta la configuración de ExpectMultipleBarcodes al rendimiento del escaneado?

Establecer ExpectMultipleBarcodes = false puede aumentar el rendimiento cuando se sabe que sólo existe un código de barras en el documento. IronBarcode dejará de escanear después de encontrar el primer código de barras, por lo que es más rápido para los escenarios de un solo código de barras al tiempo que proporciona la flexibilidad para la lectura de múltiples códigos de barras cuando sea necesario.

Hairil Hasyimi Bin Omar
Ingeniero de Software
Como todos los grandes ingenieros, Hairil es un ávido aprendiz. Está refinando su conocimiento de C#, Python y Java, usando ese conocimiento para agregar valor a los miembros del equipo en Iron Software. Hairil se unió al equipo de Iron Software desde la Universiti Teknologi MARA en Malasia, donde se ...
Leer más
¿Listo para empezar?
Nuget Descargas 2,035,202 | Versión: 2025.12 recién lanzado