Una Comparación entre IronBarcode y ZXing.NET
Un escáner de código de barras puede no ser siempre apropiado para nuestras aplicaciones. Es posible que ya tenga una imagen digital del código de barras y desee saber qué representa en texto en inglés. Además, este escáner solo lee códigos de barras 1-D, que contienen una cantidad limitada de datos y solo pueden usarse en la biblioteca de clases de Windows RT. Los códigos de barras 2-D (también conocidos como códigos QR) son ahora comunes y pueden contener mucha más información.
Se puede crear una aplicación basada en C# para leer códigos de barras utilizando llamadas API simples y algunos pasos de codificación. Una aplicación compatible con .NET se ejecuta en Windows, macOS o Linux sin depender de ninguna herramienta o API de terceros.
Este artículo comparará las dos bibliotecas de aplicaciones .NET Core más poderosas para leer códigos de barras programáticamente. Estas dos bibliotecas son IronBarcode y ZXing.NET. Veremos qué hace que IronBarcode sea más poderoso y robusto que ZXing.NET.
Cómo generar un código de barras en C# usando Zxing
- Instalar la biblioteca C# para generar códigos de barras
- Cree un nuevo objeto de la clase
BarcodeWriterPixelDatapara personalizar el código de barras - Establecer el tipo de código de barras con la propiedad
Format - Cree una instancia de la clase
QrCodeEncodingOptionspara personalizar aún más la altura, el peso y el margen - Generar código de barras en C# con el método
Writedel objeto en el paso 2
¿Qué es ZXing.NET?
ZXing.NET es una biblioteca que decodifica y genera códigos de barras (como Código QR, PDF 417, EAN, UPC, Aztec, Data Matrix, Codabar). ZXing, que significa "cruce de cebra", es una biblioteca de código abierto basada en Java que admite una variedad de formatos de código de barras 1D y 2D.
Sus características esenciales son las siguientes:
- Tiene la capacidad de almacenar URL, detalles de contacto, eventos del calendario y más
- Está adaptado a aplicaciones Java SE
- Permite la integración del escáner de código de barras a través de intent
- Es una aplicación sencilla para Google Glass
¿Qué es IronBarcode?
IronBarcode es una biblioteca C# que permite a los programadores leer y generar códigos de barras. Como una biblioteca líder en códigos de barras, IronBarcode admite una amplia variedad de códigos de barras unidimensionales y bidimensionales, incluidos los códigos QR decorados (coloreados y con marca). Admite .NET Standard y Core Versions 2 y superiores, lo que permite su uso multiplataforma en Azure, Linux, macOS, Windows y Web. IronBarcode es una conocida biblioteca de clases o componente para el sistema .NET que permite a los desarrolladores de C#, VB.NET y F# trabajar con lenguajes de programación estandarizados. Permite a los clientes navegar por las etiquetas del escáner y crear nuevas etiquetas estandarizadas. Funciona excepcionalmente bien con códigos de barras 2D y otros códigos de barras 3D estandarizados.
IronBarcode ahora admite códigos de barras 2D. Proporciona funcionalidad para optimizar el colorido, el estilo y la pixelación de estos códigos y la capacidad de agregar logotipos para su uso en material impreso o publicitario. Esta biblioteca también puede leer códigos de barras inclinados y deformados, algo que otros programas de códigos de barras pueden no poder leer.
Instalación de IronBarcode y ZXing.NET
Instalación de ZXing.NET
Para usar la biblioteca ZXing.NET, instale los siguientes dos paquetes en su aplicación ASP.NET Core utilizando la Consola del Administrador de Paquetes NuGet:
1. ZXing.Net
Install-Package ZXing.Net
2. Dibujo del sistema ZXing.Net.Bindings.CoreCompat.
Install-Package ZXing.Net.Bindings.CoreCompat.System.Drawing -Version 0.16.5-beta
Alternativamente, instale ZXing.NET en su proyecto utilizando el Administrador de Paquetes NuGet. Para hacerlo, vaya a Herramientas > Administrador de Paquetes NuGet > Administrar paquetes NuGet para soluciones..., luego cambie a la pestaña "Examinar" y busque "ZXing.NET".

Aplicación Web ASP.NET
Instalación de IronBarcode
Instale IronBarcode utilizando el Administrador de Paquetes NuGet o descargando el DLL directamente desde el sitio web del producto. El espacio de nombres IronBarcode contiene todas las clases de IronBarcode.
IronBarcode se puede instalar utilizando el Administrador de Paquetes NuGet para Visual Studio: el nombre del paquete es "Barcode".
Install-Package BarCode
Creación de códigos de barras 2D
Usando ZXing.NET
Primero, haga una nueva carpeta llamada 'qrr' dentro de la carpeta raíz del archivo del proyecto.
Luego procederemos a crear archivos QR y almacenar los archivos del sistema de imágenes dentro de la carpeta 'qrr'.
Dentro del Controlador, agregue el método GenerateFile() como se muestra a continuación en el código fuente.
public ActionResult GenerateFile()
{
return View();
}
[HttpPost]
public ActionResult GenerateFile(string qrText)
{
Byte [] byteArray;
var width = 250; // width of the QR Code
var height = 250; // height of the QR Code
var margin = 0;
// BarcodeWriterPixelData acts as a QR code generator
var qrCodeWriter = new ZXing.BarcodeWriterPixelData
{
Format = ZXing.BarcodeFormat.QR_CODE,
Options = new QrCodeEncodingOptions
{
Height = height,
Width = width,
Margin = margin
}
};
var pixelData = qrCodeWriter.Write(qrText);
// creating a PNG bitmap from the raw pixel data; if only black and white colors are used it makes no difference if the raw pixel data is BGRA oriented and the bitmap is initialized with RGB
using (var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
{
using (var ms = new MemoryStream())
{
var bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
try
{
// we assume that the row stride of the bitmap is aligned to 4 byte multiplied by the width of the image
System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length);
}
finally
{
bitmap.UnlockBits(bitmapData);
}
// Save to folder
string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);
// Save to stream as PNG
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
byteArray = ms.ToArray();
}
}
return View(byteArray);
}public ActionResult GenerateFile()
{
return View();
}
[HttpPost]
public ActionResult GenerateFile(string qrText)
{
Byte [] byteArray;
var width = 250; // width of the QR Code
var height = 250; // height of the QR Code
var margin = 0;
// BarcodeWriterPixelData acts as a QR code generator
var qrCodeWriter = new ZXing.BarcodeWriterPixelData
{
Format = ZXing.BarcodeFormat.QR_CODE,
Options = new QrCodeEncodingOptions
{
Height = height,
Width = width,
Margin = margin
}
};
var pixelData = qrCodeWriter.Write(qrText);
// creating a PNG bitmap from the raw pixel data; if only black and white colors are used it makes no difference if the raw pixel data is BGRA oriented and the bitmap is initialized with RGB
using (var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
{
using (var ms = new MemoryStream())
{
var bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
try
{
// we assume that the row stride of the bitmap is aligned to 4 byte multiplied by the width of the image
System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length);
}
finally
{
bitmap.UnlockBits(bitmapData);
}
// Save to folder
string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);
// Save to stream as PNG
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
byteArray = ms.ToArray();
}
}
return View(byteArray);
}El único cambio que queda es guardar el archivo del código QR dentro de la carpeta 'qrr'. Esto se realiza utilizando las dos líneas de código a continuación.
string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);A continuación, debe crear la vista GenerateFile e incluir el siguiente código en ella. La vista GenerateFile es idéntica a la vista Index.
@model Byte []
@using (Html.BeginForm(null, null, FormMethod.Post))
{
<table>
<tbody>
<tr>
<td>
<label>Enter text for creating QR Code</label>
</td>
<td>
<input type="text" name="qrText" />
</td>
</tr>
<tr>
<td colspan="2">
<button>Submit</button>
</td>
</tr>
</tbody>
</table>
}
@{
if (Model != null)
{
<h3>QR Code Successfully Generated</h3>
<img src="@String.Format("data:image/png;base64,{0}", Convert.ToBase64String(Model))" />
}
}@model Byte []
@using (Html.BeginForm(null, null, FormMethod.Post))
{
<table>
<tbody>
<tr>
<td>
<label>Enter text for creating QR Code</label>
</td>
<td>
<input type="text" name="qrText" />
</td>
</tr>
<tr>
<td colspan="2">
<button>Submit</button>
</td>
</tr>
</tbody>
</table>
}
@{
if (Model != null)
{
<h3>QR Code Successfully Generated</h3>
<img src="@String.Format("data:image/png;base64,{0}", Convert.ToBase64String(Model))" />
}
}Ingrese cualquier valor en el cuadro de texto y haga clic en el botón 'Enviar'. El código QR se generará y guardará como un archivo .PNG en la carpeta 'qrr'.

Generador de Códigos QR

Archivos de código QR mostrados
Formatos de códigos de barras compatibles
IronBarcode admite una amplia gama de formatos de códigos de barras de uso común, que incluyen:
- Códigos QR con logotipos y colores (incluidos códigos decorados y con marca)
- Códigos de barras de formato múltiple, incluidos Aztec, Data Matrix, CODE 93, CODE 128, RSS Expanded Databar, UPS MaxiCode y USPS, IMB (OneCode) códigos de barras
- Códigos de barras lineales apilados RSS-14 y PDF-417
- UPCA, UPCE, EAN-8, EAN-13, Codabar, ITF, MSI y Plessey son formatos de códigos de barras numéricos tradicionales.
Crear y guardar código de barras
using IronBarCode;
// Create a barcode and save it in various formats
var MyBarCode = BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeEncoding.Code128);
MyBarCode.SaveAsImage("MyBarCode.png");
MyBarCode.SaveAsGif("MyBarCode.gif");
MyBarCode.SaveAsHtmlFile("MyBarCode.html");
MyBarCode.SaveAsJpeg("MyBarCode.jpg");
MyBarCode.SaveAsPdf("MyBarCode.Pdf");
MyBarCode.SaveAsPng("MyBarCode.png");
MyBarCode.SaveAsTiff("MyBarCode.tiff");
MyBarCode.SaveAsWindowsBitmap("MyBarCode.bmp");
// Convert barcode to different image formats and obtain binary data
System.Drawing.Image MyBarCodeImage = MyBarCode.Image;
System.Drawing.Bitmap MyBarCodeBitmap = MyBarCode.ToBitmap();
string DataURL = MyBarCode.ToDataUrl();
string ImgTagForHTML = MyBarCode.ToHtmlTag();
byte[] PngBytes = MyBarCode.ToPngBinaryData();
// Save barcode in PDF stream
using (System.IO.Stream PdfStream = MyBarCode.ToPdfStream())
{
// The Stream barcode image output also works for GIF, JPEG, PDF, PNG, BMP and TIFF
}
// Stamp barcode onto an existing PDF at a specific position
MyBarCode.StampToExistingPdfPage("ExistingPDF.pdf", 1, 200, 50);using IronBarCode;
// Create a barcode and save it in various formats
var MyBarCode = BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeEncoding.Code128);
MyBarCode.SaveAsImage("MyBarCode.png");
MyBarCode.SaveAsGif("MyBarCode.gif");
MyBarCode.SaveAsHtmlFile("MyBarCode.html");
MyBarCode.SaveAsJpeg("MyBarCode.jpg");
MyBarCode.SaveAsPdf("MyBarCode.Pdf");
MyBarCode.SaveAsPng("MyBarCode.png");
MyBarCode.SaveAsTiff("MyBarCode.tiff");
MyBarCode.SaveAsWindowsBitmap("MyBarCode.bmp");
// Convert barcode to different image formats and obtain binary data
System.Drawing.Image MyBarCodeImage = MyBarCode.Image;
System.Drawing.Bitmap MyBarCodeBitmap = MyBarCode.ToBitmap();
string DataURL = MyBarCode.ToDataUrl();
string ImgTagForHTML = MyBarCode.ToHtmlTag();
byte[] PngBytes = MyBarCode.ToPngBinaryData();
// Save barcode in PDF stream
using (System.IO.Stream PdfStream = MyBarCode.ToPdfStream())
{
// The Stream barcode image output also works for GIF, JPEG, PDF, PNG, BMP and TIFF
}
// Stamp barcode onto an existing PDF at a specific position
MyBarCode.StampToExistingPdfPage("ExistingPDF.pdf", 1, 200, 50);Por otro lado, ZXing es una biblioteca de procesamiento de imágenes de código de barras 1D/2D de código abierto basada en Java. UPC-A, UPC-E, EAN-8, Code 93, Code 128, Código QR, Data Matrix, Aztec, PDF 417 y otros formatos de código de barras son compatibles.

Formatos de código de barras compatibles
Cree archivos de código QR con IronBarcode
Para crear códigos QR con IronBarcode, podemos usar la clase QRCodeWriter en lugar de la clase BarcodeWriter. Esta clase introduce algunas características novedosas e intrigantes para crear códigos QR. Nos permite establecer el nivel de corrección de error del código QR, permitiéndole equilibrar entre el tamaño y la legibilidad de su código QR.
using IronBarCode;
// Generate a simple QR Code image and save as PNG
QRCodeWriter.CreateQrCode("hello world", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium).SaveAsPng("MyQR.png");using IronBarCode;
// Generate a simple QR Code image and save as PNG
QRCodeWriter.CreateQrCode("hello world", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium).SaveAsPng("MyQR.png");La corrección de errores nos permite especificar cuán fácil será leer un código QR en situaciones del mundo real. Niveles más altos de corrección de errores resultan en códigos QR más grandes con más píxeles y complejidad. En la imagen de abajo, vemos el archivo de código QR mostrado.

Imagen de código QR
Comenzamos especificando el valor del código de barras y el formato del código de barras del enum IronBarcode.BarcodeWriterEncoding. Luego podemos guardar como una imagen, un System.Drawing.Image, o un objeto de código Bitmap.
using IronBarCode;
using System.Diagnostics;
// Generate a simple BarCode image and save as PNG using the following namespaces
GeneratedBarcode MyBarCode = IronBarcode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeWriterEncoding.Code128);
MyBarCode.SaveAsPng("MyBarCode.png");
// This line opens the image in your default image viewer
Process.Start("MyBarCode.png");using IronBarCode;
using System.Diagnostics;
// Generate a simple BarCode image and save as PNG using the following namespaces
GeneratedBarcode MyBarCode = IronBarcode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeWriterEncoding.Code128);
MyBarCode.SaveAsPng("MyBarCode.png");
// This line opens the image in your default image viewer
Process.Start("MyBarCode.png");
Ejemplo de creación de una imagen de código de barras en C#
IronBarcode también admite estilizar códigos QR, como colocar un gráfico de logotipo en el centro exacto de la imagen. También puede colorearse para coincidir con una marca o identidad gráfica específica.
Para probar, cree un logotipo en el siguiente ejemplo de código y vea qué tan simple es usar el método QRCodeWriter.CreateQRCodeWithLogo.
using IronBarCode;
// Adding a Logo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);using IronBarCode;
// Adding a Logo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
Crear código QR con imagen de logotipo
Finalmente, guardamos el código QR generado como un archivo PDF. Para su conveniencia, la línea final de código guarda el código QR como un archivo HTML.
using IronBarCode;
// Adding a Logo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
// Save as PDF
MyQRWithLogo.SaveAsPdf("MyQRWithLogo.pdf");
// Also Save as HTML
MyQRWithLogo.SaveAsHtmlFile("MyQRWithLogo.html");using IronBarCode;
// Adding a Logo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
// Save as PDF
MyQRWithLogo.SaveAsPdf("MyQRWithLogo.pdf");
// Also Save as HTML
MyQRWithLogo.SaveAsHtmlFile("MyQRWithLogo.html");A continuación, vemos cómo crear, diseñar y exportar un código de barras con solo una línea de código.
IronBarcode incluye una API fluida que es similar a System.Linq. Creamos un código de barras, establecemos sus márgenes y lo exportamos a bitmap en una sola línea encadenando llamadas a métodos. Esto puede ser muy útil y hace que el código sea más fácil de leer.
using IronBarCode;
using System.Drawing;
// Fluent API for Barcode image generation
string MyValue = "https://ironsoftware.com/csharp/barcode";
Bitmap BarcodeBmp = IronBarcode.BarcodeWriter.CreateBarcode(MyValue, BarcodeEncoding.PDF417)
.ResizeTo(300, 200)
.SetMargins(100)
.ToBitmap();using IronBarCode;
using System.Drawing;
// Fluent API for Barcode image generation
string MyValue = "https://ironsoftware.com/csharp/barcode";
Bitmap BarcodeBmp = IronBarcode.BarcodeWriter.CreateBarcode(MyValue, BarcodeEncoding.PDF417)
.ResizeTo(300, 200)
.SetMargins(100)
.ToBitmap();Como resultado, aparece una System.Drawing.Image de un código de barras PDF417 como se muestra a continuación:

Generación de códigos de barras PDF417 sencilla y fluida en C#
Lectura de archivos de código QR
Lectura de códigos QR con IronBarcode
Leer un código de barras o código QR es pan comido cuando usa la biblioteca de clases de IronBarcode junto con el lector de códigos de barras .NET. En nuestro primer ejemplo, podemos ver cómo leer un código de barras usando solo una línea de código.

Imagen de código de barras Code128 para escanear con C#
Podemos obtener el valor del código de barras, la imagen, el tipo de codificación y los datos binarios (si los hay) y luego mostrarlo en la consola.
using IronBarCode;
using System;
// Read a barcode or QR code from an image
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;
// Read a barcode or QR code from an image
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);
}Lectura de códigos de barras dentro de archivos PDF
Vamos a ver cómo leer un documento PDF escaneado y encontrar todos los códigos de barras unidimensionales en unas 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 sabemos en qué número de página se descubrió 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 be 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 be 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);
}Obtendrá datos de resultados con todos los códigos de barras de mapa de bits en el PDF.

Lectura de códigos de barras almacenados en resultados PDF
Lectura de códigos de barras desde GIF y TIFF
using IronBarCode;
using System;
// 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)
{
// Process each page result
}using IronBarCode;
using System;
// 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)
{
// Process each page result
}
Lectura de códigos de barras desde una imagen TIFF de varios fotogramas
El siguiente ejemplo muestra cómo leer códigos QR y códigos de barras PDF-417 de un PDF escaneado. Hemos establecido un nivel adecuado de corrección de rotación de códigos de barras y corrección de imagen de códigos de barras para limpiar ligeramente el documento sin incurrir en una penalización de rendimiento significativa.
using IronBarCode;
using System;
// PDF documents 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;
//...
}using IronBarCode;
using System;
// PDF documents 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;
//...
}
Lectura de códigos de barras de un documento PDF escaneado
Lectura de códigos QR corruptos a partir de imágenes de mapa de bits
El siguiente ejemplo muestra que esta biblioteca de códigos de barras de C# puede incluso leer una miniatura de código de barras corrupta.
La corrección del tamaño de la miniatura del código de barras se realiza automáticamente. IronBarcode en C# hace que un archivo sea legible.
Los métodos del lector detectan automáticamente las imágenes de códigos de barras que son demasiado pequeñas para ser un código de barras legítimo y las aumentan de escala. Limpian todo el ruido digital asociado con trabajar con miniaturas, haciéndolas legibles nuevamente.
using IronBarCode;
// Small or 'Thumbnail' barcode images are automatically detected by IronBarcode and corrected wherever possible even if they have much digital noise.
BarcodeResult SmallResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128);using IronBarCode;
// Small or 'Thumbnail' barcode images are automatically detected by IronBarcode and corrected wherever possible even if they have much digital noise.
BarcodeResult SmallResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128);
Corrección automática del tamaño de la miniatura del código de barras
Lectura de códigos de barras a partir de imágenes imperfectas
En escenarios del mundo real, podríamos querer leer códigos de barras de imágenes imperfectas. Podrían ser imágenes inclinadas o fotografías con ruido digital. Esto sería imposible con la mayoría de las bibliotecas de generación y lectura de códigos de barras .NET de código abierto. IronBarcode, por otro lado, hace que leer códigos de barras de imágenes imperfectas sea muy fácil.
Ahora vamos a ver el método ReadASingleBarcode. Con su parámetro RotationCorrection, IronBarcode intenta corregir la inclinación y leer códigos de barras de muestras digitales imperfectas.
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);
Cómo leer un código de barras desde la cámara de un teléfono
IronBarcode también puede leer múltiples códigos de barras al mismo tiempo. Obtenemos mejores resultados de IronBarcode cuando creamos una lista de documentos y usamos el lector de códigos de barras para leer numerosos documentos. El método ReadBarcodesMultithreaded para el proceso de escaneo de códigos de barras utiliza múltiples subprocesos y potencialmente todos los núcleos de su CPU, lo que puede ser exponencialmente más rápido que leer códigos de barras uno a la vez.
using IronBarCode;
// 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;
//...
}using IronBarCode;
// 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;
//...
}Lectura y decodificación de códigos QR con ZXing.NET
Para leer los archivos de código QR, agregue un método de acción ViewFile a su controlador, como se muestra a continuación.
public ActionResult ViewFile()
{
List<KeyValuePair<string, string>> fileData = new List<KeyValuePair<string, string>>();
KeyValuePair<string, string> data;
string[] files = Directory.GetFiles(Server.MapPath("~/qrr"));
foreach (string file in files)
{
// Create a barcode reader instance
IBarcodeReader reader = new BarcodeReader();
// Load a bitmap
var barcodeBitmap = (Bitmap)Image.FromFile(Server.MapPath("~/qrr") + "/" + Path.GetFileName(file));
// Detect and decode the barcode inside the bitmap
var result = reader.Decode(barcodeBitmap);
// Do something with the result
data = new KeyValuePair<string, string>(result.ToString(), "/QR/" + Path.GetFileName(file));
fileData.Add(data);
}
return View(fileData);
}public ActionResult ViewFile()
{
List<KeyValuePair<string, string>> fileData = new List<KeyValuePair<string, string>>();
KeyValuePair<string, string> data;
string[] files = Directory.GetFiles(Server.MapPath("~/qrr"));
foreach (string file in files)
{
// Create a barcode reader instance
IBarcodeReader reader = new BarcodeReader();
// Load a bitmap
var barcodeBitmap = (Bitmap)Image.FromFile(Server.MapPath("~/qrr") + "/" + Path.GetFileName(file));
// Detect and decode the barcode inside the bitmap
var result = reader.Decode(barcodeBitmap);
// Do something with the result
data = new KeyValuePair<string, string>(result.ToString(), "/QR/" + Path.GetFileName(file));
fileData.Add(data);
}
return View(fileData);
}
Lectura y decodificación de códigos QR

Código QR decodificado
Decodificación de un código de barras dentro de un mapa de bits
using ZXing;
using System.Drawing;
// Create a barcode reader instance
BarcodeReader reader = new BarcodeReader();
// Load a bitmap
var barcodeBitmap = (Bitmap)Image.FromFile("C:\\sample-barcode-image.png");
// Detect and decode the barcode inside the bitmap
var result = reader.Decode(barcodeBitmap);
// Do something with the result
if (result != null)
{
txtDecoderType.Text = result.BarcodeFormat.ToString();
txtDecoderContent.Text = result.Text;
}using ZXing;
using System.Drawing;
// Create a barcode reader instance
BarcodeReader reader = new BarcodeReader();
// Load a bitmap
var barcodeBitmap = (Bitmap)Image.FromFile("C:\\sample-barcode-image.png");
// Detect and decode the barcode inside the bitmap
var result = reader.Decode(barcodeBitmap);
// Do something with the result
if (result != null)
{
txtDecoderType.Text = result.BarcodeFormat.ToString();
txtDecoderContent.Text = result.Text;
}Decodificador ZXing en línea
ZXing Decoder Online es un escáner de códigos de barras y códigos QR disponible en línea que admite la decodificación. Cargue una imagen PNG o de otro formato del código QR y comenzará la decodificación. De manera similar, puede generar un código QR para cualquier dato. La mayoría de las veces, esa información será una URL o texto que desea codificar en un código QR.
Navegue al sitio web de ZXing Decoder.

Sitio web del decodificador ZXing

Resultado de la decodificación de ZXing
Precios y licencias
La biblioteca ZXing.NET es una biblioteca gratuita y de código abierto que le permite crear aplicaciones de lectura de códigos de barras, con licencia bajo la Licencia Apache 2.0, que permite el uso comercial gratuito con la debida atribución.
Se ofrece una licencia de desarrollador para IronBarcode sin cargo. IronBarcode tiene un esquema de precios único: el paquete Lite comienza en $liteLicense sin costos adicionales. Los elementos SaaS y OEM también pueden distribuirse nuevamente. Cada licencia incluye una licencia perpetua, validez en desarrollo/pruebas/producción, una garantía de devolución de dinero de 30 días y un año de soporte y actualizaciones de software (compra única). Visite esta página para ver la información completa de precios y licencias de IronBarcode.
¿Por qué elegir IronBarcode?
IronBarcode incluye una API fácil de usar para que los desarrolladores lean y escriban códigos de barras en .NET, lo que optimiza la precisión y una baja tasa de error en casos de uso del mundo real.
La clase BarcodeWriter, por ejemplo, validará y corregirá "checksums" en códigos de barras UPCA y UPCE. También "rellenará con ceros" los números que son demasiado cortos para ser ingresados en un formato numérico específico. Si sus datos son incompatibles con el formato de datos especificado, IronBarcode notificará al desarrollador sobre un formato de código de barras más adecuado que puedan usar.
IronBarcode sobresale en la lectura de códigos de barras cuando el código de barras ha sido escaneado o leído de una imagen fotográfica, en otras palabras, cuando la imagen no es perfecta gráficamente y no es una captura de pantalla generada por máquina.
¿En qué se diferencia IronBarcode de ZXing.NET?
IronBarcode está construido a partir del núcleo de ZXing.NET (Zebra Crossing), con una capacidad de procesamiento mejorada. Viene con una API fácil de usar y una baja tasa de error en comparación con la biblioteca central ZXing.NET. No solo eso, sino que IronBarcode también admite una gama más amplia de formatos de código de barras que la biblioteca ZXing.NET habitual.
IronBarcode es una versión más mejorada de ZXing.NET, brindando al usuario la plataforma para uso comercial y la posibilidad de usar el mismo paquete en múltiples plataformas. También tiene soporte técnico completo, siempre listo para ayudarle donde sea necesario.
IronBarcode incluye corrección automática de rotación, corrección de perspectiva y corrección de ruido digital y puede detectar el tipo de código de barras codificado en una imagen.
Conclusión
En conclusión, IronBarcode es una biblioteca de software .NET versátil y generador de códigos QR en C# para leer una amplia gama de formatos de códigos de barras, ya sean capturas de pantalla, fotografías, escaneos u otras imágenes imperfectas del mundo real.
IronBarcode es una de las bibliotecas más efectivas para crear e identificar códigos de barras. En términos de crear e identificar códigos de barras, también se encuentra entre las bibliotecas más rápidas. Diferentes sistemas operativos son compatibles con la biblioteca. Es fácil de diseñar y admite una amplia gama de formatos de códigos de barras. Además, se admiten varios símbolos, formatos y caracteres.
El código de barras ZXing.NET es una poderosa biblioteca que genera y reconoce códigos de barras en varios formatos de imagen. Podemos leer y crear imágenes en una variedad de formatos. ZXing.NET también le permite cambiar la apariencia de un código de barras, alterando su altura, ancho, texto del código de barras, etc.
En comparación con ZXing.NET, los paquetes de IronBarcode ofrecen licenciamiento y soporte confiables. IronBarcode cuesta $liteLicense. Aunque ZXing es gratuito y de código abierto, IronBarcode ofrece soporte comercial integral y mantenimiento profesional. Además de ser más flexible que ZXing.NET, la solución Iron Barcode también tiene más funciones. Por lo tanto, es evidente que IronBarcode tiene una ventaja sobre ZXing.NET.
Al comparar los tiempos de procesamiento para reconocer y generar códigos de barras, IronBarcode supera a ZXing.NET. IronBarcode también tiene varias propiedades que nos permiten leer códigos de barras desde diferentes formatos de imagen y documentos PDF. También nos permite incluir imágenes dentro del código de barras o código QR, algo que no está disponible en ninguna otra biblioteca.
IronBarcode es gratuito para las etapas iniciales de desarrollo. Puede adquirir una prueba gratuita para uso a nivel de producción o comercial. Según los requisitos del desarrollador, IronBarcode ofrece tres niveles de precios. Puede elegir la solución que mejor satisfaga sus demandas. Ahora puede obtener un conjunto de cinco productos de Iron Software por el precio de dos artículos de Iron Software. Visite este sitio web para obtener más información.
Preguntas Frecuentes
¿Cómo puedo generar un código QR en C#?
Puedes generar un código QR en C# usando IronBarcode utilizando su clase `BarcodeWriter`. Simplemente define el contenido del código QR, personaliza opciones como color y tamaño, y llama al método `Write` para generar el código QR.
¿Qué hace a IronBarcode más robusto que ZXing.NET?
IronBarcode ofrece capacidades mejoradas como soporte para una mayor variedad de formatos de código de barras, características avanzadas de procesamiento de imágenes como rotación y corrección de perspectiva, y la capacidad de crear códigos QR decorados con logotipos y colores. También es compatible con múltiples plataformas y proporciona soporte comercial.
¿Puedo leer códigos de barras de imágenes con imperfecciones usando IronBarcode?
Sí, IronBarcode puede leer códigos de barras de imágenes con imperfecciones usando funciones como corrección de rotación, corrección de perspectiva y reducción de ruido digital, haciéndolo efectivo para imágenes escaneadas o fotográficas.
¿Cuáles son los pasos para leer un código de barras en C#?
Para leer un código de barras en C#, utiliza la clase `BarcodeReader` de IronBarcode. Carga la imagen que contiene el código de barras usando el método `BarcodeReader.QuicklyReadOneBarcode`, que decodificará y devolverá el contenido del código de barras si se reconoce.
¿Cómo maneja IronBarcode la compatibilidad multiplataforma?
IronBarcode admite la compatibilidad multiplataforma para Windows, macOS, Linux y Azure, permitiéndote integrar funcionalidades de generación y lectura de códigos de barras en diversas aplicaciones .NET sin dependencias de terceros.
¿Qué opciones hay disponibles para personalizar códigos QR con IronBarcode?
IronBarcode permite la personalización de códigos QR ajustando colores, agregando logotipos para la marca y configurando niveles de corrección de errores para equilibrar tamaño y legibilidad, proporcionando flexibilidad para diversos requisitos estéticos y funcionales.
¿Hay una tarifa de licencia para usar IronBarcode en aplicaciones comerciales?
IronBarcode ofrece diferentes opciones de licencia, incluyendo una licencia perpetua adecuada para aplicaciones comerciales. Esto contrasta con ZXing.NET, que es gratuito pero tiene restricciones para uso comercial.
¿Cuáles son los escenarios comunes de solución de problemas al usar bibliotecas de códigos de barras?
Los problemas comunes podrían incluir reconocimiento incorrecto del código de barras debido a baja calidad de imagen, formatos de código de barras no soportados, o errores de configuración. El procesamiento avanzado de imágenes de IronBarcode puede ayudar a mitigar algunos problemas de reconocimiento.
¿Por qué alguien podría elegir IronBarcode sobre ZXing.NET para el manejo de códigos de barras?
IronBarcode proporciona una API más robusta, mejor manejo de errores, soporte extensivo de formatos de códigos de barras y características para generar códigos QR visualmente personalizados, todo con el beneficio adicional de licencias comerciales y soporte profesional.
¿Cómo se puede instalar IronBarcode en un proyecto .NET?
Puedes instalar IronBarcode en un proyecto .NET usando el Administrador de Paquetes NuGet en Visual Studio buscando 'IronBarcode' y agregándolo a tu proyecto, asegurando fácil integración y actualizaciones.







