Leer códigos de barras en C#

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

por Frank Walker

IronBarcode proporciona una biblioteca versátil, avanzada y eficaz para la lectura de códigos de barras en .NET.

Instalación

Comience a usar IronBarcode en su proyecto hoy con una prueba gratuita.

Primer Paso:
green arrow pointer

IronBarcode proporciona una biblioteca versátil, avanzada y eficaz para la lectura de códigos de barras en .NET.

El primer paso será instalar Iron Barcode, y esto se consigue más fácilmente utilizando nuestro paquete NuGet, aunque también puede optar por instalar manualmente el paquete DLL a su proyecto o a su caché global de ensamblados. IronBarcode funciona bien para producir una aplicación C# Barcode Scanner.

Install-Package BarCode

Lea su primer código de barras

Leer un código de barras o un código QR en .NET es increíblemente fácil utilizando la biblioteca de clases IronBarcode con .NET Barcode Reader. En nuestro primer ejemplo, podemos ver cómo leer este Código de Barras con una línea de código.

Code128 Imagen de Código de Barras para ser Escaneada con C#

Podemos extraer su valor, su imagen, su tipo de codificación, sus datos binarios(en su caso)y podemos enviarlo a la consola.

:path=/static-assets/barcode/content-code-examples/tutorials/reading-barcodes-1.cs
using IronBarCode;
using System;

// Read barcode
BarcodeResults results = BarcodeReader.Read("GetStarted.png");

// Log the result to Console Window
foreach (BarcodeResult result in results)
{
    if (result != null)
    {
        Console.WriteLine("GetStarted was a success. Read Value: " + result.Text);
    }
}
Imports IronBarCode
Imports System

' Read barcode
Private results As BarcodeResults = BarcodeReader.Read("GetStarted.png")

' Log the result to Console Window
For Each result As BarcodeResult In results
	If result IsNot Nothing Then
		Console.WriteLine("GetStarted was a success. Read Value: " & result.Text)
	End If
Next result
VB   C#

Esfuérzate más y sé más concreto

En este siguiente ejemplo, agregaremos una opción de escaneo de código de barras para leer una imagen desafiante. El valor ExtremeDetail del enumerado Speed permite un escaneo más profundo para un código de barras que podría estar oscurecido, dañado o en un ángulo inclinado.

:path=/static-assets/barcode/content-code-examples/tutorials/reading-barcodes-2.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose a speed from: Faster, Balanced, Detailed, ExtremeDetail
    // There is a tradeoff in performance as more Detail is set
    Speed = ReadingSpeed.ExtremeDetail,

    // By default, all barcode formats are scanned for.
    // Specifying one or more, performance will increase.
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
};

// Read barcode
BarcodeResults results = BarcodeReader.Read("TryHarderQR.png", options);
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.Speed = ReadingSpeed.ExtremeDetail,
	.ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128
}

' Read barcode
Private results As BarcodeResults = BarcodeReader.Read("TryHarderQR.png", options)
VB   C#

Que leerá este código QR sesgado:

Escanear un código QR girado 45 grados con C#

En nuestro ejemplo, puede ver que podemos especificar la codificación del código de barras(s)estamos buscando o incluso múltiples formatos. De este modo, se mejora considerablemente el rendimiento y la precisión de la lectura de códigos de barras. En pipe character, or 'Bitwise OR,' is used to specify multiple formats simultaneously.

Lo mismo se puede lograr, pero con un mayor grado de especificidad, si avanzamos y usamos las propiedades ImageFilters y AutoRotate.

:path=/static-assets/barcode/content-code-examples/tutorials/reading-barcodes-3.cs
using IronBarCode;

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Choose which filters are to be applied (in order)
    ImageFilters = new ImageFilterCollection() {
        new AdaptiveThresholdFilter(),
    },

    // Uses machine learning to auto rotate the barcode
    AutoRotate = true,
};

// Read barcode
BarcodeResults results = BarcodeReader.Read("TryHarderQR.png", options);
Imports IronBarCode

Private options As New BarcodeReaderOptions() With {
	.ImageFilters = New ImageFilterCollection() From {New AdaptiveThresholdFilter()},
	.AutoRotate = True
}

' Read barcode
Private results As BarcodeResults = BarcodeReader.Read("TryHarderQR.png", options)
VB   C#

Lectura de varios códigos de barras

Documentos PDF

En nuestro siguiente ejemplo, vamos a ver la lectura de un archivodocumento PDF escaneado y encontrar todos los códigos de barras de formato unidimensional en muy pocas líneas de código.

Como puede ver, es muy similar a leer un solo código de barras de un solo documento, excepto que ahora tenemos nueva información sobre en qué número de página se encontró el código de barras.

:path=/static-assets/barcode/content-code-examples/tutorials/reading-barcodes-4.cs
using IronBarCode;
using System;

// Multiple barcodes may be scanned up from a single document or image. A PDF document may also used as the input image
BarcodeResults results = BarcodeReader.ReadPdf("MultipleBarcodes.pdf");

// Work with the results
foreach (var pageResult in results)
{
    string Value = pageResult.Value;
    int PageNum = pageResult.PageNumber;
    System.Drawing.Bitmap Img = pageResult.BarcodeImage;
    BarcodeEncoding BarcodeType = pageResult.BarcodeType;
    byte[] Binary = pageResult.BinaryValue;
    Console.WriteLine(pageResult.Value + " on page " + PageNum);
}
Imports IronBarCode
Imports System

' Multiple barcodes may be scanned up from a single document or image. A PDF document may also used as the input image
Private results As BarcodeResults = BarcodeReader.ReadPdf("MultipleBarcodes.pdf")

' Work with the results
For Each pageResult In results
	Dim Value As String = pageResult.Value
	Dim PageNum As Integer = pageResult.PageNumber
	Dim Img As System.Drawing.Bitmap = pageResult.BarcodeImage
	Dim BarcodeType As BarcodeEncoding = pageResult.BarcodeType
	Dim Binary() As Byte = pageResult.BinaryValue
	Console.WriteLine(pageResult.Value & " on page " & PageNum)
Next pageResult
VB   C#

Encontramos los siguientes códigos de barras en diferentes páginas.

C# - Lectura de códigos de barras a partir de los resultados de un PDF

Escanea TIFFs

En nuestro próximo ejemplo, podemos ver que se puede obtener el mismo resultado a partir de un TIFF de múltiples cuadros, que será tratado de manera similar a un PDF en este contexto.

C# - Lectura de códigos de barras de una imagen TIFF de varios fotogramas
:path=/static-assets/barcode/content-code-examples/tutorials/reading-barcodes-5.cs
using IronBarCode;

// Multi frame TIFF and GIF images can also be scanned
BarcodeResults multiFrameResults = BarcodeReader.Read("Multiframe.tiff");

foreach (var pageResult in multiFrameResults)
{
    //...
}
Imports IronBarCode

' Multi frame TIFF and GIF images can also be scanned
Private multiFrameResults As BarcodeResults = BarcodeReader.Read("Multiframe.tiff")

For Each pageResult In multiFrameResults
	'...
Next pageResult
VB   C#

Multihilo

Para leer varios documentos, podemos obtener mejores resultados de IronBarcode creando una lista de los documentos y utilizando el BarcodeReader.Read método. Esto utiliza varios subprocesos y potencialmente todos los núcleos de la CPU para el proceso de lectura del código de barras y puede ser exponencialmente más rápido que leer los códigos de barras de uno en uno.

:path=/static-assets/barcode/content-code-examples/tutorials/reading-barcodes-6.cs
using IronBarCode;

// The Multithreaded property allows for faster barcode scanning across multiple images or PDFs. All threads are automatically managed by IronBarCode.
var ListOfDocuments = new[] { "image1.png", "image2.JPG", "image3.pdf" };

BarcodeReaderOptions options = new BarcodeReaderOptions()
{
    // Enable multithreading
    Multithreaded = true,
};

BarcodeResults batchResults = BarcodeReader.Read(ListOfDocuments, options);
Imports IronBarCode

' The Multithreaded property allows for faster barcode scanning across multiple images or PDFs. All threads are automatically managed by IronBarCode.
Private ListOfDocuments = { "image1.png", "image2.JPG", "image3.pdf" }

Private options As New BarcodeReaderOptions() With {.Multithreaded = True}

Private batchResults As BarcodeResults = BarcodeReader.Read(ListOfDocuments, options)
VB   C#

Resumen

En resumen, IronBarcode es una biblioteca de software .NET versátil y un generador de códigos QR en C# capaz de leer una amplia gama de formatos de códigos de barras. Puede hacerlo independientemente de si los códigos de barras son capturas de pantalla perfectas o imágenes imperfectas del mundo real, como fotografías o escaneos.

Lecturas complementarias

Para obtener más información sobre cómo trabajar con IronBarcode, es posible que desee explorar los otros tutoriales en esta sección, así como los ejemplos en nuestra página de inicio, que la mayoría de los desarrolladores encontrarán suficientes para comenzar.

NuestraReferencia API, específicamente la clase BarcodeReader y el enum BarcodeEncoding, proporcionarán información detallada sobre lo que puedes lograr con esta biblioteca de códigos de barras en C#.

Descargas de código fuente

También le recomendamos encarecidamente que descargue este tutorial y lo ejecute usted mismo. Puedes hacerlo descargando el código fuente o bifurcándonos en GitHub. El código fuente de este tutorial de lector de códigos de barras .NET está disponible como un proyecto de aplicación de consola de Visual Studio 2017 escrito en C#.

*Tutorial Repositorio Github

*Código fuente C# en un archivo Zip

Ingeniero de Software .NET Para muchos esta es la forma más eficiente de generar archivos PDF desde .NET, porque no hay una API adicional que aprender, ni un complejo sistema de diseño por el que navegar.

Frank Walker

Desarrollador de productos .NET

Frank ha sido una fuerza fundadora en el desarrollo de IronBarcode. Trabajando con IronOCR durante el último año, Frank ha influido en la creación de casos de uso dentro de OCR para que IronBarcode se convirtiera en la herramienta que es ahora.