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

Instale la biblioteca de códigos de barras en su proyecto de Visual Studio

Biblioteca NuGet C# para

Instalar con NuGet

Install-Package BarCode
o
Java PDF JAR

Descargar DLL

Descargar DLL

Instalar manualmente en su proyecto

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 Iron Barcode con Lector de códigos de barras .NET. 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.

using IronBarCode;
using System;
BarcodeResult Result = BarcodeReader.QuicklyReadOneBarcode("GetStarted.png");
if (Result !=null && Result.Text == "https://ironsoftware.com/csharp/barcode/")
{
  Console.WriteLine("GetStarted was a success.  Read Value: " + Result.Text);
}
using IronBarCode;
using System;
BarcodeResult Result = BarcodeReader.QuicklyReadOneBarcode("GetStarted.png");
if (Result !=null && Result.Text == "https://ironsoftware.com/csharp/barcode/")
{
  Console.WriteLine("GetStarted was a success.  Read Value: " + Result.Text);
}
Imports IronBarCode
Imports System
Private Result As BarcodeResult = BarcodeReader.QuicklyReadOneBarcode("GetStarted.png")
If Result IsNot Nothing AndAlso Result.Text = "https://ironsoftware.com/csharp/barcode/" Then
  Console.WriteLine("GetStarted was a success.  Read Value: " & Result.Text)
End If
VB   C#

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

En el siguiente ejemplo, añadiremos nuestra variable TryHarder al método QuicklyReadOneBarcode. Esto hace que se esfuerce más, tardando literalmente más tiempo, pero escaneando más profundamente en busca de un código QR que pueda estar oscurecido, corrupto o en un ángulo sesgado.

BarcodeResult Result = BarcodeReader.QuicklyReadOneBarcode("TryHarderQR.png", BarcodeEncoding.QRCode 
 BarcodeEncoding.Code128 , true);
BarcodeResult Result = BarcodeReader.QuicklyReadOneBarcode("TryHarderQR.png", BarcodeEncoding.QRCode 
 BarcodeEncoding.Code128 , true);
Dim Result As BarcodeResult = BarcodeReader.QuicklyReadOneBarcode("TryHarderQR.png", BarcodeEncoding.QRCode BarcodeEncoding.Code128, True)
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) que buscamos o especificar varios 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 'Bitwize OR' is used to specify multiple formats simultaneously.

Lo mismo puede conseguirse, pero con un mayor grado de especificidad, si avanzamos hacia el uso de la BarcodeReader.ReadASingleBarcode Método.

BarcodeResult Result = IronBarCode.BarcodeReader.ReadASingleBarcode("TryHarderQR.png", BarcodeEncoding.QRCode 
 BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels);
BarcodeResult Result = IronBarCode.BarcodeReader.ReadASingleBarcode("TryHarderQR.png", BarcodeEncoding.QRCode 
 BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels);
Dim Result As BarcodeResult = IronBarCode.BarcodeReader.ReadASingleBarcode("TryHarderQR.png", BarcodeEncoding.QRCode BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels)
VB   C#

Lectura de varios códigos de barras

Documentos PDF

En nuestro siguiente ejemplo, vamos a ver la lectura de un archivo documento 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.

using IronBarCode;
using System;
using System.Drawing;

// Multiple barcodes may be scanned up from a single document or image.  A PDF document may also used as the input image
PagedBarcodeResult [] PDFResults = BarcodeReader.ReadBarcodesFromPdf("MultipleBarcodes.pdf");
// Work with the results
foreach (var PageResult in PDFResults)
{
    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);
}     
using IronBarCode;
using System;
using System.Drawing;

// Multiple barcodes may be scanned up from a single document or image.  A PDF document may also used as the input image
PagedBarcodeResult [] PDFResults = BarcodeReader.ReadBarcodesFromPdf("MultipleBarcodes.pdf");
// Work with the results
foreach (var PageResult in PDFResults)
{
    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);
}     
IRON VB CONVERTER ERROR developers@ironsoftware.com
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

Escaneados y TIFF

En nuestro siguiente ejemplo, podemos ver que se puede obtener el mismo resultado a partir de un TIFF de varios fotogramas, que se tratará de forma similar a un PDF en este aspecto.

C# - Lectura de códigos de barras de una imagen TIFF de varios fotogramas
// Multi frame TIFF and GIF images can also be scanned, and multiple threads will be used automatically in the background for improved performance
PagedBarcodeResult [] MultiFrameResults = BarcodeReader.ReadBarcodesFromMultiFrameTiff("Multiframe.tiff", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels);            
 foreach (var PageResult in MultiFrameResults)
  {
    //...
  }
// Multi frame TIFF and GIF images can also be scanned, and multiple threads will be used automatically in the background for improved performance
PagedBarcodeResult [] MultiFrameResults = BarcodeReader.ReadBarcodesFromMultiFrameTiff("Multiframe.tiff", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels);            
 foreach (var PageResult in MultiFrameResults)
  {
    //...
  }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Multihilo

Para leer varios documentos, obtenemos mejores resultados de Iron Barcode creando una lista de los documentos y utilizando la función BarcodeReader.ReadBarcodesMultithreaded 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.

// The BarcodeResult.ReadBarcodesMultiThreaded method allows for faster barcode scanning of multiple images or PDFs.  All threads are automatically managed by IronBarCode.
var ListOfDocuments = new [] { "Image1.png", "image2.JPG", "image3.pdf" };
PagedBarcodeResult [] BatchResults = BarcodeReader.ReadBarcodesMultiThreaded(ListOfDocuments);
// Work with the results
foreach (var Result in BatchResults)
{
    string Value = Result.Value;
    //...
}
// The BarcodeResult.ReadBarcodesMultiThreaded method allows for faster barcode scanning of multiple images or PDFs.  All threads are automatically managed by IronBarCode.
var ListOfDocuments = new [] { "Image1.png", "image2.JPG", "image3.pdf" };
PagedBarcodeResult [] BatchResults = BarcodeReader.ReadBarcodesMultiThreaded(ListOfDocuments);
// Work with the results
foreach (var Result in BatchResults)
{
    string Value = Result.Value;
    //...
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Lectura de códigos de barras a partir de imágenes imperfectas

En casos de uso del mundo real, es posible que queramos leer códigos de barras que no son capturas de pantalla perfectas. Pueden ser imágenes imperfectas, escaneos o fotografías y contener ruido digital o estar sesgadas. Con la mayoría de las librerías de código abierto para generadores y lectores de códigos de barras .net, esto sería imposible. Sin embargo, este Lector de códigos de barras en C# lo hace increíblemente sencillo.

En nuestro siguiente ejemplo, veremos el método TryHarder de QuicklyReadOneBarcode. Este parámetro hace que Iron Barcode intente leer códigos de barras a partir de muestras digitales imperfectas.

Fotografías

En el ejemplo de las fotografías, estableceremos una corrección específica de la rotación del código de barras y una corrección de la imagen del código de barras para corregir el ruido digital y la inclinación, la perspectiva y la rotación que cabría esperar razonablemente de la cámara de un teléfono móvil.

Lectura de un código de barras desde la cámara de un teléfono en C#
using IronBarCode;
using System;
using System.Drawing;

// All BarcodeResult.Read methods provide the developer with control to correct image and photograph correction and straightening rotation and perspective from skewed images
// * RotationCorrection   e.g BarcodeReader.BarcodeRotationCorrection.Extreme  un-rotates and removes perspective from barcode images.
// * ImageCorrection      e.g BarcodeReader.BarcodeImageCorrection.DeepCleanPixels  separates Barcodes from background imagery and digital noise.
// * BarcodeEncoding      e.g. BarcodeEncoding.Code128  Setting a specific Barcode format improves speed and reduces the risk of false positive results
// Example with a photo image
var PhotoResult = BarcodeReader.ReadASingleBarcode("Photo.png", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.Medium, BarcodeReader.BarcodeImageCorrection.DeepCleanPixels);
string Value = PhotoResult.Value;
System.Drawing.Bitmap Img = PhotoResult.BarcodeImage;
BarcodeEncoding BarcodeType = PhotoResult.BarcodeType;
byte [] Binary = PhotoResult.BinaryValue;
Console.WriteLine(PhotoResult.Value);  
using IronBarCode;
using System;
using System.Drawing;

// All BarcodeResult.Read methods provide the developer with control to correct image and photograph correction and straightening rotation and perspective from skewed images
// * RotationCorrection   e.g BarcodeReader.BarcodeRotationCorrection.Extreme  un-rotates and removes perspective from barcode images.
// * ImageCorrection      e.g BarcodeReader.BarcodeImageCorrection.DeepCleanPixels  separates Barcodes from background imagery and digital noise.
// * BarcodeEncoding      e.g. BarcodeEncoding.Code128  Setting a specific Barcode format improves speed and reduces the risk of false positive results
// Example with a photo image
var PhotoResult = BarcodeReader.ReadASingleBarcode("Photo.png", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.Medium, BarcodeReader.BarcodeImageCorrection.DeepCleanPixels);
string Value = PhotoResult.Value;
System.Drawing.Bitmap Img = PhotoResult.BarcodeImage;
BarcodeEncoding BarcodeType = PhotoResult.BarcodeType;
byte [] Binary = PhotoResult.BinaryValue;
Console.WriteLine(PhotoResult.Value);  
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Escaneos

El siguiente ejemplo nos muestra cómo podríamos enfocar la lectura de códigos QR y códigos de barras PDF-417 desde un PDF escaneado. Tenga en cuenta que hemos establecido un nivel adecuado de corrección de la rotación del código de barras y de corrección de la imagen del código de barras para limpiar ligeramente el documento, pero no para incurrir en una enorme penalización de rendimiento al sobredimensionar nuestras necesidades.

Lectura de códigos de barras de un documento PDF escaneado en C#
// Multi frame TIFF and GIF images can also be scanned, and multiple threads will be used automatically in the background for improved performance
var ScanResults = BarcodeReader.ReadBarcodesFromPdf("Scan.pdf", BarcodeEncoding.All, BarcodeReader.BarcodeRotationCorrection.Low, BarcodeReader.BarcodeImageCorrection.LightlyCleanPixels);
// Work with the results
foreach (var PageResult in ScanResults)
{
  string Value = PageResult.Value;
  ///...
} 
// Multi frame TIFF and GIF images can also be scanned, and multiple threads will be used automatically in the background for improved performance
var ScanResults = BarcodeReader.ReadBarcodesFromPdf("Scan.pdf", BarcodeEncoding.All, BarcodeReader.BarcodeRotationCorrection.Low, BarcodeReader.BarcodeImageCorrection.LightlyCleanPixels);
// Work with the results
foreach (var PageResult in ScanResults)
{
  string Value = PageResult.Value;
  ///...
} 
' Multi frame TIFF and GIF images can also be scanned, and multiple threads will be used automatically in the background for improved performance
Dim ScanResults = BarcodeReader.ReadBarcodesFromPdf("Scan.pdf", BarcodeEncoding.All, BarcodeReader.BarcodeRotationCorrection.Low, BarcodeReader.BarcodeImageCorrection.LightlyCleanPixels)
' Work with the results
For Each PageResult In ScanResults
  Dim Value As String = PageResult.Value
  '''...
Next PageResult
VB   C#

Miniaturas

En el último ejemplo, veremos que este Generador de códigos de barras C# es capaz incluso de leer una miniatura corrupta de un código de barras.

Corrección automática del tamaño de la miniatura del código de barras.  Archivo legible usando Iron Barcode en C#.

Nuestros métodos de lectura de códigos de barras detectan automáticamente las imágenes de códigos de barras que son demasiado pequeñas para ser razonablemente un código de barras real, y aumentan la escala y limpian todo el ruido digital asociado a la lectura de miniaturas; permitiendo que vuelvan a ser legibles.

// Small or 'Thumbnail' barcode images are automatically detected by IronBarCode and corrected for wherever possible even if they have much digital noise.
BarcodeResult SmallResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128);
// Small or 'Thumbnail' barcode images are automatically detected by IronBarCode and corrected for wherever possible even if they have much digital noise.
BarcodeResult SmallResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128);
' Small or 'Thumbnail' barcode images are automatically detected by IronBarCode and corrected for wherever possible even if they have much digital noise.
Dim SmallResult As BarcodeResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128)
VB   C#

Resumen

En resumen, Iron Barcode es una biblioteca de software .NET versátil y Generador de códigos QR C# para leer una amplia gama de formatos de códigos de barras, y puede hacerlo tanto si estos códigos de barras son capturas de pantalla perfectas como si son de hecho fotografías, escaneos u otras imágenes imperfectas del mundo real.

Lecturas complementarias

Para obtener más información sobre cómo trabajar con Iron Barcode, puede consultar los demás tutoriales de esta sección, así como los ejemplos de nuestra página principal; que a la mayoría de los desarrolladores les basta para empezar.

Nuestra Referencia API con referencia específica al Lector de códigos de barras y la clase Código de barras Enum le mostrará en detalle lo que es capaz de conseguir utilizando este Biblioteca de códigos de barras C#.

Descargas de código fuente

También te animamos a que descargues este tutorial y lo ejecutes por ti mismo. Puede hacerlo descargando el código fuente o haciendo un fork en GitHub. La fuente de esta Lector de códigos de barras .NET están disponibles como proyecto de aplicación de consola de Visual Studio 2017 escrito en C#.

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.