Cómo leer códigos de barras de imágenes en C#

Cómo leer códigos de barras a partir de imágenes utilizando C#

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

IronBarcode lee códigos de barras de imágenes en C# con una sola línea de código utilizando BarcodeReader.Read(), soportando múltiples formatos de imagen incluyendo PNG, JPEG, GIF, BMP, TIFF, y SVG, con opciones personalizables para mejorar el rendimiento y la precisión.

Una de las características clave de IronBarcode es su capacidad para leer códigos de barras directamente en múltiples formatos de imagen. Los siguientes formatos de imagen son actualmente soportados por IronBarcode:

  • Gráficos Vectoriales Escalables (SVG)
  • 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

This is made possible with the help of our open source library, IronDrawing. Para obtener una lista completa de los formatos de código de barras soportados, incluidos los tipos 1D y 2D, consulte nuestra completa documentación.

como-título:2(Inicio Rápido: Leer Códigos de Barras de una Imagen en Segundos)

Con una simple llamada a IronBarCode.BarcodeReader.Read(), puede extraer datos de códigos de barras directamente de formatos de archivo de imagen como PNG, JPEG, GIF, BMP y TIFF. Comienza al instante—sin configuración compleja, solo resultados inmediatos.

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("path/to/image.png");
  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 códigos de barras directamente de imágenes?

A continuación se explica cómo utilizar IronBarcode para la lectura de códigos de barras. Para obtener un tutorial completo sobre lectura de códigos de barras en C# / .NET, incluidas técnicas avanzadas para el procesamiento de PDF y operaciones por lotes, visite nuestra guía detallada:

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-images-1.cs
using IronBarCode;
using System;

var myBarcode = BarcodeReader.Read(@"image_file_path.jpg"); //image file path

foreach (var item in myBarcode)
{
    Console.WriteLine(item.ToString());
}
Imports IronBarCode
Imports System

Private myBarcode = BarcodeReader.Read("image_file_path.jpg") 'image file path

For Each item In myBarcode
	Console.WriteLine(item.ToString())
Next item
$vbLabelText   $csharpLabel
Sample QR code with finder patterns for testing barcode reading from images
Código QR de prueba de muestra
Sample barcode with black vertical lines on white background for testing image-based barcode reading
Código de barras de prueba de muestra

¿Quieres saber cuáles son los valores del código de barras en las muestras? ¡Pruébalo con el fragmento de código!

Para usar IronBarcode, lo primero que tienes que hacer es instalar la biblioteca IronBarcode a través del administrador de paquetes NuGet de Microsoft Visual Studio en tu proyecto, como se muestra en la imagen a continuación. Esto le permitirá acceder al método BarcodeReader.Read() de IronBarcode para leer directamente imágenes de códigos de barras.

IronBarcode ofrece simplicidad al permitir a los usuarios utilizar únicamente BarcodeReader.Read() para leer un archivo de imagen que ya ha sido incluido dentro del proyecto especificando la cadena nombre de archivo, O la cadena ruta de archivo como parámetro para el método. La mejor práctica es usar el literal de cadena textual, "@" al especificar una ruta de archivo en el método para evitar agregar múltiples caracteres de escape "" en la cadena de ruta del archivo.

Adjunta el método Values() al final de la llamada al método BarcodeReader.Read() para obtener el valor del código de barras como un objeto System.String[].

Para mostrar el resultado en la consola, puedes usar un bucle foreach para iterar sobre los valores almacenados en el array string[] y dentro del bloque del bucle, llamar al método Console.WriteLine() con la variable iteradora como parámetro.

IronBarcode es capaz de leer formatos de códigos de barras unidimensionales (Codabar, Code128, Code39, Code93, EAN13, EAN18, <código>ITF</código>, <código>MSI</código>, <código>UPCA</código>, <código>UPCE</código>), así como formatos de códigos de barras bidimensionales (<código>Aztec</código>, <código>DataMatrix</código>, <código>QRCode</código>) en diversos formatos de imagen.

¿Cómo puedo configurar las opciones del lector de códigos de barras para obtener un mejor rendimiento?

¿La lectura de códigos de barras es demasiado lenta? ¿Es el código de barras demasiado pequeño en la imagen, lo que hace que IronBarcode no pueda leerlo? ¿Quieres leer solo ciertas áreas de una imagen? ¿Quieres leer solo ciertos tipos de códigos de barras en una imagen con una mezcla de códigos de barras? ¿Quieres mejorar el rendimiento general de la lectura?

BarcodeReaderOptions permite a los usuarios modificar o ajustar el comportamiento del lector de códigos de barras para abordar todas estas cuestiones. Para obtener ejemplos detallados sobre configuración de las opciones del lector de códigos de barras, consulte nuestra completa guía. En las siguientes secciones se analizan una a una todas las propiedades ajustables disponibles en BarcodeReaderOptions.

¿Cómo especifico qué área de la imagen debo leer?

CropArea es una propiedad del tipo Iron Software.Drawing.CropRectangle disponible en BarcodeReaderOptions que permite a los usuarios especificar el área en la imagen que IronBarcode debería leer. Esto ayuda a mejorar el rendimiento de la lectura, ya que el lector de códigos de barras no escanea toda la imagen en busca de códigos de barras, además de mejorar la precisión de la lectura, ya que se ha especificado el área de lectura. Más información sobre cómo especificar regiones de cultivo para un rendimiento óptimo.

Para establecer la propiedad CropArea, simplemente instancia un nuevo objeto del tipo Rectangle y especifica las coordenadas del rectángulo, ancho y longitud del rectángulo como argumentos. La unidad de medida aceptada es el píxel (px).

// Example of setting CropArea
var cropArea = new IronSoftware.Drawing.Rectangle(x: 100, y: 100, width: 300, height: 300);
var options = new BarcodeReaderOptions()
{
    CropArea = cropArea
};
// Example of setting CropArea
var cropArea = new IronSoftware.Drawing.Rectangle(x: 100, y: 100, width: 300, height: 300);
var options = new BarcodeReaderOptions()
{
    CropArea = cropArea
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

¿Qué tipos de BarCode debo especificar para una lectura más rápida?

Por defecto, todos los códigos de barras soportados en IronBarcode serán escaneados en una imagen. Sin embargo, si el usuario sabe qué tipos de códigos de barras están disponibles o desea que se lean en una imagen, configurar esta propiedad para leer sólo determinados tipos de códigos de barras aumentará en gran medida el rendimiento y la precisión de la lectura, ya que el lector de códigos de barras no necesita iterar a través de colecciones de códigos de barras para interpretar y leer un código de barras.

Para utilizar esta propiedad, simplemente establece el ExpectBarcodeTypes en uno de los campos del enum BarcodeEncoding. A continuación, presentamos ejemplos de cada tipo de código de barras soportado por IronBarcode.

// Example: Expect only QR codes and Code128
var options = new BarcodeReaderOptions()
{
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};
// Example: Expect only QR codes and Code128
var options = new BarcodeReaderOptions()
{
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Aquí hay una lista de los tipos de códigos de barras con ejemplos y explicaciones proporcionados anteriormente.

¿Cuándo debo desactivar la lectura múltiple de códigos de barras?

IronBarcode escaneará todos los códigos de barras disponibles en una imagen por defecto, lo que incluye escanear todo el archivo de imagen y agregar los valores de los códigos de barras leídos en la matriz de cadenas. Sin embargo, si los usuarios no desean leer múltiples códigos de barras en un archivo de imagen, los usuarios pueden establecer esta propiedad en false, lo que hará que el lector de códigos de barras deje de escanear una vez que se haya encontrado un valor de código de barras. Esto nuevamente, mejorará el rendimiento y la velocidad de lectura de IronBarcode. Para obtener más información sobre lectura de múltiples códigos de barras, consulte nuestra guía específica.

¿Cómo mejoran los filtros de imagen el reconocimiento de códigos de barras?

Una de las propiedades que se pueden agregar en BarcodeReaderOptions es una colección de filtros de imagen. Los filtros de imagen son importantes para el pre-procesamiento de la imagen en bruto alimentada a IronBarcode. Para aplicar filtros de imagen dentro de BarcodeReaderOptions, los usuarios deben iniciar y especificar la colección ImageFilter a usar. Si desea una orientación completa sobre las técnicas de corrección de imágenes, incluidas las aplicaciones de filtros, visite nuestro tutorial.

¿Cómo puedo optimizar los subprocesos para mejorar el rendimiento?

IronBarcode permite a los usuarios habilitar y ajustar la cantidad de ejecución de hilos paralelos, lo que a su vez mejorará la velocidad y eficiencia del proceso. Los hilos paralelos significan la ejecución de múltiples hilos simultáneamente en diferentes núcleos del procesador. La cantidad predeterminada para la propiedad MaxParallelThread en IronBarcode es 4. Los usuarios pueden ajustarlos en función de las capacidades y recursos que tenga su máquina.

¿Debo activar el procesamiento multihilo?

Esta propiedad permite a IronBarcode leer múltiples imágenes en paralelo. El valor predeterminado para Multithreaded es true, por lo tanto, los múltiples hilos se administrarán automáticamente para mejorar el rendimiento en tareas de lectura de códigos de barras por lotes.

¿Por qué debo eliminar los falsos positivos?

Esta propiedad elimina cualquier lectura de código de barras incorrecta positiva. Lecturas falsas son solo lecturas erróneas marcadas como válidas. Esto puede suceder debido a errores en el proceso de secuenciación o errores en el etiquetado o preparación del código de barras. Por lo tanto, establecer RemoveFalsePositive como verdadero eliminará las lecturas de códigos de barras incorrectas positivas, mejorando así la precisión de la lectura de códigos de barras. Sin embargo, si los usuarios optan por rendimiento a costa de la precisión, establecer esta propiedad en false ayudaría. El valor por defecto para esta propiedad es true.

¿Qué modos de exploración están disponibles para diferentes casos de uso?

Define cómo IronBarcode escanea y detecta códigos de barras en una imagen.

  • Auto: Lee códigos de barras con pre-procesamiento automático de imagen y las opciones de lector más óptimas configuradas. Recomendado para mejores resultados y rendimiento.
  • SoloModeloDeDetección: Escanea la imagen en busca de códigos de barras y devuelve sus posiciones como una matriz de Iron Software.Drawing.PointF. Este modo no lee los códigos de barras detectados; solo devuelve las posiciones de cada código de barras.
  • EscaneoConAprendizajeAutomático: Escanea la imagen en busca de códigos de barras con detección de aprendizaje automático y los lee.
  • SoloEscaneoBásico: Lee códigos de barras sin detección de aprendizaje automático, pre-procesamiento automático de imagen, o configuración de opciones de lector. This option can be used with IronBarCode.Slim alone.

¿Cómo afecta la configuración de la velocidad de lectura a la precisión?

Como su nombre lo indica, la propiedad Speed permite a los usuarios optimizar aún más el rendimiento del lector IronBarcode. Similar a la propiedad RemoveFalsePositive, ajustar esta propiedad mejora el rendimiento a costa de la precisión. Para conocer en profundidad las opciones de velocidad de lectura, incluidos los puntos de referencia de rendimiento, consulta nuestra guía detallada. Acepta el enum ReadingSpeed, que tiene 4 niveles como se muestra a continuación:

  • Más Rápido: Permite la lectura de códigos de barras más rápida, pero reduce la precisión. El proceso omite el pre-procesamiento de la imagen, a menudo resultando en resultados de códigos de barras vacíos. Usa esta configuración solo si la imagen de entrada es nítida y clara.
  • Equilibrado: Esta configuración es recomendada para la propiedad Speed. Establece un equilibrio entre precisión y rendimiento de lectura al intentar aplicar un procesamiento ligero a la imagen para esclarecer el área del código de barras y hacerlo más destacado para que el lector de códigos de barras lo detecte. La mayoría de las veces, esta configuración es suficiente para que IronBarcode lea una imagen de código de barras y produzca una salida precisa.
  • Detallado: Para casos donde usar la configuración ReadingSpeed.Balanced no es exitoso en producir valores de códigos de barras de la lectura, los usuarios pueden optar por usar ReadingSpeed.Detailed. IronBarcode realizará un procesamiento medio en la imagen para esclarecer el área del código de barras aún más y garantizar que el lector de código de barras detecte el código de barras. Esta configuración es muy útil para detectar una imagen de código de barras pequeña o menos nítida.
  • Detalle Extremo: Esta configuración es la menos recomendada debido a su proceso intensivo en el CPU. Se realizará un procesamiento intensivo en la imagen del código de barras para que el lector pueda leer los códigos de barras. Se aconseja a los usuarios que realicen pre-procesamiento de imagen/aplicación de filtros en la imagen antes de optar por esta configuración.

¿Cuándo debo utilizar el modo ampliado de Code39?

Esta configuración permite que los códigos de barras de tipo Code39 sean leídos e interpretados con el modo extendido, aplicando el conjunto completo de caracteres ASCII. Establecer UseCode39ExtendedMode en true permitirá una lectura más precisa de los códigos de barras Code39.

¿Cómo implementar la lectura avanzada de códigos de barras con opciones personalizadas?

Ahora que ya conocemos todas las opciones que pueden ajustar los usuarios, ya sea para aumentar el rendimiento o la precisión, vamos a ver cómo aplicarlas en el código. El siguiente fragmento de código muestra el uso completo de BarcodeReaderOptions:

using IronBarCode;
using IronSoftware.Drawing;
using System;
using System.Linq;

// Create custom reader options
var options = new BarcodeReaderOptions()
{
    // Specify expected barcode types for better performance
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.Code39,

    // Define specific area to scan (x, y, width, height in pixels)
    CropArea = new Rectangle(100, 100, 500, 400),

    // Set reading speed to balance accuracy and performance
    Speed = ReadingSpeed.Balanced,

    // Enable multithreading for better performance
    Multithreaded = true,
    MaxParallelThreads = 4,

    // Remove false positives for accuracy
    RemoveFalsePositive = true,

    // Enable Code39 extended mode if needed
    UseCode39ExtendedMode = true,

    // Set scan mode
    ScanMode = BarcodeReaderScanMode.Auto,

    // Add image filters for better recognition
    ImageFilters = new ImageFilterCollection() { 
        new SharpenFilter(),
        new InvertFilter(),
        new ContrastFilter()
    }
};

// Read barcodes with custom options
var results = BarcodeReader.Read(@"C:\path\to\your\barcode-image.png", options);

// Process results
if (results.Any())
{
    foreach (var barcode in results)
    {
        Console.WriteLine($"Barcode Type: {barcode.BarcodeType}");
        Console.WriteLine($"Value: {barcode.Value}");
        Console.WriteLine($"Confidence: {barcode.Confidence}%");
        Console.WriteLine($"Position: X={barcode.X}, Y={barcode.Y}");
        Console.WriteLine("---");
    }
}
else
{
    Console.WriteLine("No barcodes found in the image.");
}
using IronBarCode;
using IronSoftware.Drawing;
using System;
using System.Linq;

// Create custom reader options
var options = new BarcodeReaderOptions()
{
    // Specify expected barcode types for better performance
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.Code39,

    // Define specific area to scan (x, y, width, height in pixels)
    CropArea = new Rectangle(100, 100, 500, 400),

    // Set reading speed to balance accuracy and performance
    Speed = ReadingSpeed.Balanced,

    // Enable multithreading for better performance
    Multithreaded = true,
    MaxParallelThreads = 4,

    // Remove false positives for accuracy
    RemoveFalsePositive = true,

    // Enable Code39 extended mode if needed
    UseCode39ExtendedMode = true,

    // Set scan mode
    ScanMode = BarcodeReaderScanMode.Auto,

    // Add image filters for better recognition
    ImageFilters = new ImageFilterCollection() { 
        new SharpenFilter(),
        new InvertFilter(),
        new ContrastFilter()
    }
};

// Read barcodes with custom options
var results = BarcodeReader.Read(@"C:\path\to\your\barcode-image.png", options);

// Process results
if (results.Any())
{
    foreach (var barcode in results)
    {
        Console.WriteLine($"Barcode Type: {barcode.BarcodeType}");
        Console.WriteLine($"Value: {barcode.Value}");
        Console.WriteLine($"Confidence: {barcode.Confidence}%");
        Console.WriteLine($"Position: X={barcode.X}, Y={barcode.Y}");
        Console.WriteLine("---");
    }
}
else
{
    Console.WriteLine("No barcodes found in the image.");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Del fragmento de código, vemos que para usar BarcodeReaderOptions, primero debemos inicializarlo, luego determinar y ajustar las propiedades de BarcodeReaderOptions de acuerdo a las propiedades mencionadas anteriormente. El BarcodeReaderOptions inicializado puede luego usarse como un argumento en el método BarcodeReader.Read() junto con el archivo de imagen. Esto aplicará todas las configuraciones en BarcodeReaderOptions al leer un código de barras desde la imagen.

Si se encuentra con problemas por los que no se reconoce su código de barras, nuestra guía de solución de problemas ofrece soluciones para problemas comunes y consejos para mejorar la precisión del escaneado de códigos de barras.

Preguntas Frecuentes

¿Qué formatos de imagen son compatibles con la lectura de códigos de barras en C#?

IronBarcode admite la lectura de códigos de barras de múltiples formatos de imagen, incluidos SVG (Scalable Vector Graphics), JPEG, PNG, GIF, TIFF (Tagged Image File Format) y BMP (Bitmap Image File). Esta amplia compatibilidad de formatos es posible gracias a IronDrawing, que permite extraer códigos de barras de distintos tipos de imágenes sin problemas.

¿Cómo puedo leer un código de barras de un archivo de imagen con una sola línea de código?

Con IronBarcode, puede leer códigos de barras a partir de imágenes utilizando una sola línea de código: `var results = IronBarCode.BarcodeReader.Read("ruta/a/imagen.png");`. Esta sencilla llamada al método detecta y extrae automáticamente los datos del código de barras de archivos PNG, JPEG, GIF, BMP y TIFF sin ninguna configuración compleja.

¿Puedo especificar qué tipos de códigos de barras buscar al leer imágenes?

Sí, IronBarcode permite especificar los tipos de códigos de barras mediante la propiedad ExpectBarcodeTypes en BarcodeReaderOptions. Este enfoque específico mejora el rendimiento de la lectura al centrarse únicamente en los formatos de código de barras que espera encontrar en sus imágenes.

¿Es posible leer códigos de barras de una región específica dentro de una imagen?

Por supuesto IronBarcode proporciona la propiedad CropArea que le permite especificar regiones concretas dentro de una imagen donde se encuentran los códigos de barras. Esta característica es especialmente útil para imágenes de gran tamaño o cuando se conoce la ubicación aproximada de los códigos de barras, mejorando significativamente la velocidad de procesamiento.

¿Cómo configuro los ajustes avanzados de lectura para mejorar la precisión?

IronBarcode ofrece la clase BarcodeReaderOptions para configurar opciones avanzadas de lectura. Esto incluye opciones para personalizar la sensibilidad de detección de códigos de barras, el preprocesamiento de imágenes y otros parámetros que pueden mejorar la precisión cuando se trata de imágenes difíciles o tipos específicos de códigos de barras.

¿Qué hace que la lectura de códigos de barras a partir de imágenes sea sencilla para los desarrolladores de C#?

IronBarcode simplifica la lectura de códigos de barras proporcionando el método BarcodeReader.Read() que funciona con múltiples formatos de imagen. Los desarrolladores sólo tienen que especificar el nombre del archivo o la ruta del archivo como parámetro, lo que facilita enormemente la integración de la funcionalidad de lectura de códigos de barras en cualquier aplicación C#.

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,002,059 | Versión: 2025.12 recién lanzado