Leer códigos de barras en C#

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;

//  Se pueden escanear varios códigos de barras a partir de un único documento o imagen.  También puede utilizarse un documento PDF como imagen de entrada.
PagedBarcodeResult [] PDFResults = BarcodeReader.ReadBarcodesFromPdf("MultipleBarcodes.pdf");

//  Trabajar con los resultados
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;

//  Se pueden escanear varios códigos de barras a partir de un único documento o imagen.  También puede utilizarse un documento PDF como imagen de entrada.
PagedBarcodeResult [] PDFResults = BarcodeReader.ReadBarcodesFromPdf("MultipleBarcodes.pdf");

//  Trabajar con los resultados
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);
}     
Imports IronBarCode
Imports System
Imports System.Drawing

'  Se pueden escanear varios códigos de barras a partir de un único documento o imagen.  También puede utilizarse un documento PDF como imagen de entrada.
Private PDFResults() As PagedBarcodeResult = BarcodeReader.ReadBarcodesFromPdf("MultipleBarcodes.pdf")

'  Trabajar con los resultados
For Each PageResult In PDFResults
	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

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
//  También se pueden escanear imágenes TIFF y GIF de varios fotogramas, y se utilizarán varios subprocesos automáticamente en segundo plano para mejorar el rendimiento.
PagedBarcodeResult [] MultiFrameResults = BarcodeReader.ReadBarcodesFromMultiFrameTiff("Multiframe.tiff", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels);            

 foreach (var PageResult in MultiFrameResults)
  {
    //...
  }
//  También se pueden escanear imágenes TIFF y GIF de varios fotogramas, y se utilizarán varios subprocesos automáticamente en segundo plano para mejorar el rendimiento.
PagedBarcodeResult [] MultiFrameResults = BarcodeReader.ReadBarcodesFromMultiFrameTiff("Multiframe.tiff", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels);            

 foreach (var PageResult in MultiFrameResults)
  {
    //...
  }
'  También se pueden escanear imágenes TIFF y GIF de varios fotogramas, y se utilizarán varios subprocesos automáticamente en segundo plano para mejorar el rendimiento.
Dim MultiFrameResults() As PagedBarcodeResult = BarcodeReader.ReadBarcodesFromMultiFrameTiff("Multiframe.tiff", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels)

 For Each PageResult In MultiFrameResults
	'...
 Next PageResult
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.

//  El método BarcodeResult.ReadBarcodesMultiThreaded permite escanear más rápidamente códigos de barras de múltiples imágenes o PDFs.  Todos los hilos son gestionados automáticamente por IronBarCode.
var ListOfDocuments = new [] { "Image1.png", "image2.JPG", "image3.pdf" };
PagedBarcodeResult [] BatchResults = BarcodeReader.ReadBarcodesMultiThreaded(ListOfDocuments);

//  Trabajar con los resultados
foreach (var Result in BatchResults)
{
    string Value = Result.Value;
    //...
}
//  El método BarcodeResult.ReadBarcodesMultiThreaded permite escanear más rápidamente códigos de barras de múltiples imágenes o PDFs.  Todos los hilos son gestionados automáticamente por IronBarCode.
var ListOfDocuments = new [] { "Image1.png", "image2.JPG", "image3.pdf" };
PagedBarcodeResult [] BatchResults = BarcodeReader.ReadBarcodesMultiThreaded(ListOfDocuments);

//  Trabajar con los resultados
foreach (var Result in BatchResults)
{
    string Value = Result.Value;
    //...
}
'  El método BarcodeResult.ReadBarcodesMultiThreaded permite escanear más rápidamente códigos de barras de múltiples imágenes o PDFs.  Todos los hilos son gestionados automáticamente por IronBarCode.
Dim ListOfDocuments = { "Image1.png", "image2.JPG", "image3.pdf" }
Dim BatchResults() As PagedBarcodeResult = BarcodeReader.ReadBarcodesMultiThreaded(ListOfDocuments)

'  Trabajar con los resultados
For Each Result In BatchResults
	Dim Value As String = Result.Value
	'...
Next Result
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;

//  Todos los métodos BarcodeResult.Read proporcionan al desarrollador el control para corregir la imagen y la fotografía y enderezar la rotación y la perspectiva de las imágenes sesgadas
//  * RotationCorrection e.g BarcodeReader.BarcodeRotationCorrection.Extreme des-rota y elimina la perspectiva de las imágenes de código de barras.
//  * BarcodeReader.BarcodeImageCorrection.DeepCleanPixels separa los códigos de barras de las imágenes de fondo y del ruido digital.
//  * BarcodeEncoding e.g. BarcodeEncoding.Code128 Establecer un formato específico de código de barras mejora la velocidad y reduce el riesgo de falsos positivos.

//  Ejemplo con una imagen fotográfica
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;

//  Todos los métodos BarcodeResult.Read proporcionan al desarrollador el control para corregir la imagen y la fotografía y enderezar la rotación y la perspectiva de las imágenes sesgadas
//  * RotationCorrection e.g BarcodeReader.BarcodeRotationCorrection.Extreme des-rota y elimina la perspectiva de las imágenes de código de barras.
//  * BarcodeReader.BarcodeImageCorrection.DeepCleanPixels separa los códigos de barras de las imágenes de fondo y del ruido digital.
//  * BarcodeEncoding e.g. BarcodeEncoding.Code128 Establecer un formato específico de código de barras mejora la velocidad y reduce el riesgo de falsos positivos.

//  Ejemplo con una imagen fotográfica
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);  
Imports IronBarCode
Imports System
Imports System.Drawing

'  Todos los métodos BarcodeResult.Read proporcionan al desarrollador el control para corregir la imagen y la fotografía y enderezar la rotación y la perspectiva de las imágenes sesgadas
'  * RotationCorrection e.g BarcodeReader.BarcodeRotationCorrection.Extreme des-rota y elimina la perspectiva de las imágenes de código de barras.
'  * BarcodeReader.BarcodeImageCorrection.DeepCleanPixels separa los códigos de barras de las imágenes de fondo y del ruido digital.
'  * BarcodeEncoding e.g. BarcodeEncoding.Code128 Establecer un formato específico de código de barras mejora la velocidad y reduce el riesgo de falsos positivos.

'  Ejemplo con una imagen fotográfica
Private PhotoResult = BarcodeReader.ReadASingleBarcode("Photo.png", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.Medium, BarcodeReader.BarcodeImageCorrection.DeepCleanPixels)

Private Value As String = PhotoResult.Value
Private Img As System.Drawing.Bitmap = PhotoResult.BarcodeImage
Private BarcodeType As BarcodeEncoding = PhotoResult.BarcodeType
Private Binary() As Byte = PhotoResult.BinaryValue
Console.WriteLine(PhotoResult.Value)
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#
//  También se pueden escanear imágenes TIFF y GIF de varios fotogramas, y se utilizarán varios subprocesos automáticamente en segundo plano para mejorar el rendimiento.
var ScanResults = BarcodeReader.ReadBarcodesFromPdf("Scan.pdf", BarcodeEncoding.All, BarcodeReader.BarcodeRotationCorrection.Low, BarcodeReader.BarcodeImageCorrection.LightlyCleanPixels);

//  Trabajar con los resultados
foreach (var PageResult in ScanResults)
{
  string Value = PageResult.Value;
  ///...
} 
//  También se pueden escanear imágenes TIFF y GIF de varios fotogramas, y se utilizarán varios subprocesos automáticamente en segundo plano para mejorar el rendimiento.
var ScanResults = BarcodeReader.ReadBarcodesFromPdf("Scan.pdf", BarcodeEncoding.All, BarcodeReader.BarcodeRotationCorrection.Low, BarcodeReader.BarcodeImageCorrection.LightlyCleanPixels);

//  Trabajar con los resultados
foreach (var PageResult in ScanResults)
{
  string Value = PageResult.Value;
  ///...
} 
'  También se pueden escanear imágenes TIFF y GIF de varios fotogramas, y se utilizarán varios subprocesos automáticamente en segundo plano para mejorar el rendimiento.
Dim ScanResults = BarcodeReader.ReadBarcodesFromPdf("Scan.pdf", BarcodeEncoding.All, BarcodeReader.BarcodeRotationCorrection.Low, BarcodeReader.BarcodeImageCorrection.LightlyCleanPixels)

'  Trabajar con los resultados
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.

//  IronBarCode detecta automáticamente las imágenes de códigos de barras pequeñas o "en miniatura" y las corrige siempre que sea posible, aunque tengan mucho ruido digital.
BarcodeResult SmallResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128);
//  IronBarCode detecta automáticamente las imágenes de códigos de barras pequeñas o "en miniatura" y las corrige siempre que sea posible, aunque tengan mucho ruido digital.
BarcodeResult SmallResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128);
'  IronBarCode detecta automáticamente las imágenes de códigos de barras pequeñas o "en miniatura" y las corrige siempre que sea posible, aunque tengan mucho ruido digital.
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.