COMPARACIóN CON OTROS COMPONENTES

Comparación entre IronBarcode y ZXing.NET

Actualizado 12 de diciembre, 2022
Compartir:

Un escáner de códigos de barras no siempre es adecuado para nuestras aplicaciones. Puede que ya tenga una imagen digital del código de barras y quiera saber qué representa en texto inglés. Además, este escáner sólo lee códigos de barras 1-D, que contienen una cantidad limitada de datos y sólo pueden utilizarse en la biblioteca de clases de Windows RT. Códigos de barras bidimensionales (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 simples llamadas a la API y unos pocos 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.

En este artículo se compararán las dos bibliotecas de aplicaciones .NET Core más potentes para leer códigos de barras mediante programación. Estas dos bibliotecas son IronBarcode y ZXing.NET. Veremos qué hace que IronBarcode sea más potente y robusto que ZXing.NET.


Qué es ZXing.NET

ZXing.NET es una biblioteca que descodifica y genera códigos de barras (como Código QR, PDF 417, EAN, UPC, Aztec, Data Matrix, Codabar). ZXing, que significa "paso de cebra", es una biblioteca de código abierto basada en Java que admite diversos formatos de códigos de barras 1D y 2D.

Sus características esenciales son las siguientes:

  • Permite almacenar URL, datos de contacto, eventos del calendario, etc.
  • Está adaptado a las aplicaciones Java SE
  • Permite la integración de escáneres de códigos de barras mediante intent
  • Se trata de una sencilla aplicación para Google Glass

Qué es IronBarcode

IronBarcode es una biblioteca de C# que permite a los programadores leer y generar códigos de barras. Como biblioteca líder de códigos de barras, IronBarcode admite una amplia variedad de códigos de barras unidimensionales y bidimensionales, incluidos los decorados (de color y de marca) Códigos QR. Es compatible con las versiones 2 y superiores de .NET Standard y Core, 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. Permitirá a los clientes examinar las etiquetas de los escáneres y crear nuevas etiquetas normalizadas. Funciona excepcionalmente bien con códigos de barras 2D y otros códigos de barras 3D normalizados.

IronBarcode ahora admite códigos de barras 2D. Ofrece funciones para optimizar el color, el estilo y el pixelado de estos códigos, así como la posibilidad de añadirles logotipos para su uso en material impreso o publicitario. Esta biblioteca también puede leer códigos de barras torcidos y deformados, algo que otros programas de códigos de barras no pueden leer.

Instalación de IronBarcode y ZXing.NET

Instalación de ZXing.NET

Para utilizar la biblioteca ZXing.NET, instale los dos paquetes siguientes en su aplicación ASP.NET Core mediante la consola del gestor de paquetes NuGet:

1. ZXing.Net

Install-Package ZXing.Net

2. ZXing.Net.Bindings.CoreCompat.System.Drawing

Install-Package ZXing.Net.Bindings.CoreCompat.System.Drawing -Version 0.16.5-beta

Alternativamente, instale ZXing.NET en su proyecto utilizando el gestor de paquetes NuGet. Para ello, vaya a Herramientas > Administrador de paquetes NuGet > Administrar paquetes NuGet para soluciones..., luego cambie a la pestaña "Examinar" y busque "ZXing.NET".

A Comparison between IronBarcode and Zxing.NET, Figure 1: Aplicación web ASP.NET

Aplicación web ASP.NET

Instalación de IronBarcode

Instale IronBarcode mediante el gestor de paquetes NuGet o descargando la DLL directamente de la página sitio web del producto. En IronBarcode contiene todas las clases de IronBarcode.

IronBarcode puede instalarse mediante el gestor de paquetes NuGet para Visual Studio: el nombre del paquete es "Barcode".

Install-Package BarCode

Creación de códigos de barras 2D

Uso de ZXing.NET

En primer lugar, crea una nueva carpeta llamada 'qrr' dentro de la carpeta raíz del archivo de proyecto.

A continuación, procederemos a crear archivos QR y a almacenar los archivos del sistema de imágenes dentro de la carpeta 'qrr'.

Dentro del Controlador, añade el comando `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; //  Anchura del código QR
    var height = 250; //  altura del código QR
    var margin = 0;
    var qrCodeWriter = new ZXing.BarcodeWriterPixelData
    {
        Format = ZXing.BarcodeFormat.QR_CODE,
        Options = new QrCodeEncodingOptions
        {
            Height = height,
            Width = width,
            Margin = margin
        }
    };
    var pixelData = qrCodeWriter.Write(qrText);

    //  crear un mapa de bits PNG a partir de los datos de píxeles en bruto; si sólo se utilizan colores blanco y negro, no hay diferencia si los datos de píxeles en bruto están orientados BGRA y el mapa de bits se inicializa con 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
            {
                //  suponemos que la fila del mapa de bits está alineada a 4 bytes multiplicados por la anchura de la imagen
                System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan, pixelData.Pixels.Length);
            }
            finally
            {
                bitmap.UnlockBits(bitmapData);
            }

            //  guardar en carpeta
            string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
            bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);

            //  guardar en stream como 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; //  Anchura del código QR
    var height = 250; //  altura del código QR
    var margin = 0;
    var qrCodeWriter = new ZXing.BarcodeWriterPixelData
    {
        Format = ZXing.BarcodeFormat.QR_CODE,
        Options = new QrCodeEncodingOptions
        {
            Height = height,
            Width = width,
            Margin = margin
        }
    };
    var pixelData = qrCodeWriter.Write(qrText);

    //  crear un mapa de bits PNG a partir de los datos de píxeles en bruto; si sólo se utilizan colores blanco y negro, no hay diferencia si los datos de píxeles en bruto están orientados BGRA y el mapa de bits se inicializa con 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
            {
                //  suponemos que la fila del mapa de bits está alineada a 4 bytes multiplicados por la anchura de la imagen
                System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan, pixelData.Pixels.Length);
            }
            finally
            {
                bitmap.UnlockBits(bitmapData);
            }

            //  guardar en carpeta
            string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
            bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);

            //  guardar en stream como PNG
            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            byteArray = ms.ToArray();
        }
    }
    return View(byteArray);
}
Public Function GenerateFile() As ActionResult
	Return View()
End Function

<HttpPost>
Public Function GenerateFile(ByVal qrText As String) As ActionResult
	Dim byteArray() As Byte
	Dim width = 250 '  Anchura del código QR
	Dim height = 250 '  altura del código QR
	Dim margin = 0
	Dim qrCodeWriter = New ZXing.BarcodeWriterPixelData With {
		.Format = ZXing.BarcodeFormat.QR_CODE,
		.Options = New QrCodeEncodingOptions With {
			.Height = height,
			.Width = width,
			.Margin = margin
		}
	}
	Dim pixelData = qrCodeWriter.Write(qrText)

	'  crear un mapa de bits PNG a partir de los datos de píxeles en bruto; si sólo se utilizan colores blanco y negro, no hay diferencia si los datos de píxeles en bruto están orientados BGRA y el mapa de bits se inicializa con RGB
	Using bitmap = New System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb)
		Using ms = New MemoryStream()
			Dim bitmapData = bitmap.LockBits(New System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb)
			Try
				'  suponemos que la fila del mapa de bits está alineada a 4 bytes multiplicados por la anchura de la imagen
				System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan, pixelData.Pixels.Length)
			Finally
				bitmap.UnlockBits(bitmapData)
			End Try

			'  guardar en carpeta
			Dim fileGuid As String = Guid.NewGuid().ToString().Substring(0, 4)
			bitmap.Save(Server.MapPath("~/qrr") & "/file-" & fileGuid & ".png", System.Drawing.Imaging.ImageFormat.Png)

			'  guardar en stream como PNG
			bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
			byteArray = ms.ToArray()
		End Using
	End Using
	Return View(byteArray)
End Function
VB   C#

El único cambio que queda es guardar el archivo del código QR dentro de la carpeta 'qrr'. Para ello se utilizan las dos líneas de código siguientes.

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);
Dim fileGuid As String = Guid.NewGuid().ToString().Substring(0, 4)
bitmap.Save(Server.MapPath("~/qrr") & "/file-" & fileGuid & ".png", System.Drawing.Imaging.ImageFormat.Png)
VB   C#

También debes crear la vista GenerateFile e incluir en ella el siguiente código. La vista GenerarArchivo es idéntica a la vista Índice.

@model Byte []
@using (Html.BeginForm(null, null, FormMethod.Post))
{
    <table>
        <tbody>
            <tr>
                <td>
                    <label>Enter text for creating QR Code</label>
                </td>
                <td>
//  cuadro de texto para introducir texto...
                    <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>
//  etiqueta img para mostrar el código QR generado...
        <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>
//  cuadro de texto para introducir texto...
                    <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>
//  etiqueta img para mostrar el código QR generado...
        <img src="@String.Format("data:image/png;base64,{0}", Convert.ToBase64String(Model))" />
    }
}
model Function [using](Html.BeginForm ByVal As (Nothing, Nothing, FormMethod.Post)) As Byte()
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <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>
	"qrText" /> </td> </tr> (Of tr) <td colspan="2"> (Of button) Submit</button> </td> </tr> </tbody> </table>
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <table> <tbody> <tr> <td> <label> Enter text for creating QR Code</label> </td> <td> <input type="text" name="qrText" /> </td> </tr> <tr> <td colspan
	"text" name="qrText" /> </td> </tr> (Of tr) <td colspan
	(Of table) (Of tbody) (Of tr) (Of td) (Of label) Enter text for creating QR Code</label> </td> (Of td) <input type="text" name
End Function
@
If True Then
	If Model IsNot Nothing Then
'INSTANT VB WARNING: Instant VB cannot determine whether both operands of this division are integer types - if they are then you should use the VB integer division operator:
		(Of h3) QR Code Successfully Generated</h3> <img src="@String.Format("data:image/png
		base64,
		If True Then
			0
		End If
		", Convert.ToBase64String(Model))" />
	End If
End If
VB   C#

Introduzca cualquier valor en el cuadro de texto y pulse el botón "Enviar". El código QR se generará y guardará como un archivo .PNG en la carpeta 'qrr'.

A Comparison between IronBarcode and ZXing.NET, Figure 2: Generador de códigos QR

Generador de códigos QR

A Comparison between IronBarcode and ZXing.NET, Figure 3: Archivos de códigos QR visualizados

Archivos de códigos QR visualizados

Formatos de códigos de barras compatibles

IronBarcode admite una amplia gama de formatos de códigos de barras de uso común, entre los que se incluyen:

  • Códigos QR con logotipos y colores(incluidos los códigos decorados y de marca)
  • Códigos de barras multiformato, 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ódigos de barras

var MyBarCode = IronBarcode.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");
Image  MyBarCodeImage = MyBarCode.Image;
Bitmap MyBarCodeBitmap = MyBarCode.ToBitmap();
string DataURL = MyBarCode.ToDataUrl();
string ImgTagForHTML = MyBarCode.ToHtmlTag();
byte [] PngBytes = MyBarCode.ToPngBinaryData();
     //  La salida de imágenes binarias de códigos de barras también funciona para GIF, JPEG, PDF, PNG, BMP y TIFF.
using (System.IO.Stream PdfStream = MyBarCode.ToPdfStream()){
    //  El flujo de salida de imágenes de códigos de barras también funciona con GIF, JPEG, PDF, PNG, BMP y TIFF.
}
MyBarCode.StampToExistingPdfPage("ExistingPDF.pdf", 1, 200, 50);
var MyBarCode = IronBarcode.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");
Image  MyBarCodeImage = MyBarCode.Image;
Bitmap MyBarCodeBitmap = MyBarCode.ToBitmap();
string DataURL = MyBarCode.ToDataUrl();
string ImgTagForHTML = MyBarCode.ToHtmlTag();
byte [] PngBytes = MyBarCode.ToPngBinaryData();
     //  La salida de imágenes binarias de códigos de barras también funciona para GIF, JPEG, PDF, PNG, BMP y TIFF.
using (System.IO.Stream PdfStream = MyBarCode.ToPdfStream()){
    //  El flujo de salida de imágenes de códigos de barras también funciona con GIF, JPEG, PDF, PNG, BMP y TIFF.
}
MyBarCode.StampToExistingPdfPage("ExistingPDF.pdf", 1, 200, 50);
Dim MyBarCode = IronBarcode.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")
Dim MyBarCodeImage As Image = MyBarCode.Image
Dim MyBarCodeBitmap As Bitmap = MyBarCode.ToBitmap()
Dim DataURL As String = MyBarCode.ToDataUrl()
Dim ImgTagForHTML As String = MyBarCode.ToHtmlTag()
Dim PngBytes() As Byte = MyBarCode.ToPngBinaryData()
	 '  La salida de imágenes binarias de códigos de barras también funciona para GIF, JPEG, PDF, PNG, BMP y TIFF.
Using PdfStream As System.IO.Stream = MyBarCode.ToPdfStream()
	'  El flujo de salida de imágenes de códigos de barras también funciona con GIF, JPEG, PDF, PNG, BMP y TIFF.
End Using
MyBarCode.StampToExistingPdfPage("ExistingPDF.pdf", 1, 200, 50)
VB   C#

Por otro lado, ZXing es una biblioteca de procesamiento de imágenes de códigos de barras 1D/2D de código abierto basada en Java. UPC-A, UPC-E, EAN-8, Código 93, Código 128, Código QR, Data Matrix, Aztec, PDF 417 y otros formatos de código de barras son compatibles.

A Comparison between IronBarcode and Zxing.NET, Figure 4: Formatos de códigos de barras compatibles

Formatos de códigos de barras compatibles

Crear archivos de código QR con IronBarcode

Para crear códigos QR con IronBarcode, podemos utilizar la clase QRCodeWriter en lugar de la clase BarcodeWriter. Esta clase presenta algunas características novedosas e intrigantes para crear códigos QR. Nos permite establecer el nivel de corrección de errores del QR, lo que le permite encontrar un equilibrio entre el tamaño y la legibilidad de su código QR.

//  Generar una imagen sencilla de código QR y guardarla como PNG
QRCodeWriter.CreateQrCode("hello world", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium).SaveAsPng("MyQR.png");
//  Generar una imagen sencilla de código QR y guardarla como PNG
QRCodeWriter.CreateQrCode("hello world", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium).SaveAsPng("MyQR.png");
'  Generar una imagen sencilla de código QR y guardarla como PNG
QRCodeWriter.CreateQrCode("hello world", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium).SaveAsPng("MyQR.png")
VB   C#

La corrección de errores nos permite especificar lo fácil que será leer un código QR en situaciones reales. Los niveles más altos de corrección de errores dan lugar a códigos QR más grandes, con más píxeles y complejidad. En la siguiente imagen, vemos el archivo de código QR desplegado.

Comparación entre IronBarcode y ZXing.NET, Figura 5: Formatos de códigos de barras admitidos

Imagen del código QR

Comenzamos especificando el valor del código de barras y el formato del código de barras a partir del enum IronBarcode.BarcodeWriterEncoding. A continuación, podemos guardar como una imagen, un System.Drawing.Image, o un objeto de código Bitmap. Este es todo el código fuente que necesitas!

//  Genere una imagen simple de código de barras y guárdela como PNG utilizando los siguientes espacios de nombres
using IronBarCode;
GeneratedBarcode MyBarCode = IronBarcode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeWriterEncoding.Code128);
MyBarCode.SaveAsPng("MyBarCode.png");
//  Esta línea abre la imagen en su visor de imágenes predeterminado
System.Diagnostics.Process.Start("MyBarCode.png");
//  Genere una imagen simple de código de barras y guárdela como PNG utilizando los siguientes espacios de nombres
using IronBarCode;
GeneratedBarcode MyBarCode = IronBarcode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeWriterEncoding.Code128);
MyBarCode.SaveAsPng("MyBarCode.png");
//  Esta línea abre la imagen en su visor de imágenes predeterminado
System.Diagnostics.Process.Start("MyBarCode.png");
'  Genere una imagen simple de código de barras y guárdela como PNG utilizando los siguientes espacios de nombres
Imports IronBarCode
Private MyBarCode As GeneratedBarcode = IronBarcode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeWriterEncoding.Code128)
MyBarCode.SaveAsPng("MyBarCode.png")
'  Esta línea abre la imagen en su visor de imágenes predeterminado
System.Diagnostics.Process.Start("MyBarCode.png")
VB   C#
A Comparison between IronBarcode and ZXing.NET, Figure 6: Crear una imagen de código de barras en C# Ejemplo

Crear una imagen de código de barras en C# Ejemplo

IronBarcode también admite la estilización de códigos QR, como la colocación de un gráfico de logotipo y su ajuste a una cuadrícula en el centro exacto de la imagen. También se puede colorear para adaptarlo a una marca o identidad gráfica específica.

Para probar, cree un logotipo en el siguiente ejemplo de código y vea lo sencillo que es utilizar el método QRCodeWriter.CreateQRCodeWithLogo.

//  Añadir un logotipo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
//  Añadir un logotipo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
'  Añadir un logotipo
Dim MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500)
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen)
VB   C#
A Comparison between IronBarcode and ZXing.NET, Figure 7: Crear código QR con imagen de logotipo

Crear código QR con imagen de logotipo

Por último, guardamos el código QR generado como archivo PDF. Para mayor comodidad, la última línea de código guarda el código QR como archivo HTML.

//  Añadir un logotipo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
//Guardar como PDF
MyQRWithLogo.SaveAsPdf("MyQRWithLogo.pdf");
//Guardar también como HTML
MyQRWithLogo.SaveAsHtmlFile("MyQRWithLogo.html");
//  Añadir un logotipo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
//Guardar como PDF
MyQRWithLogo.SaveAsPdf("MyQRWithLogo.pdf");
//Guardar también como HTML
MyQRWithLogo.SaveAsHtmlFile("MyQRWithLogo.html");
'  Añadir un logotipo
Dim MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500)
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen)
'Guardar como PDF
MyQRWithLogo.SaveAsPdf("MyQRWithLogo.pdf")
'Guardar también como HTML
MyQRWithLogo.SaveAsHtmlFile("MyQRWithLogo.html")
VB   C#

A continuación, veremos cómo crear, estilizar y exportar un código de barras con una sola línea de código.

IronBarcode incluye una API fluida similar a System.Linq. Creamos un código de barras, establecemos sus márgenes y lo exportamos a mapa de bits en una sola línea encadenando llamadas a métodos. Esto puede ser muy útil y facilita la lectura del código.

using IronBarCode;
using System.Drawing;
 //  API fluida para la generación de imágenes de códigos de barras.
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;
 //  API fluida para la generación de imágenes de códigos de barras.
string MyValue = "https://ironsoftware.com/csharp/barcode";
Bitmap BarcodeBmp = IronBarcode.BarcodeWriter.CreateBarcode(MyValue, BarcodeEncoding.PDF417).ResizeTo(300,200).SetMargins(100).ToBitmap();
Imports IronBarCode
Imports System.Drawing
 '  API fluida para la generación de imágenes de códigos de barras.
Private MyValue As String = "https://ironsoftware.com/csharp/barcode"
Private BarcodeBmp As Bitmap = IronBarcode.BarcodeWriter.CreateBarcode(MyValue, BarcodeEncoding.PDF417).ResizeTo(300,200).SetMargins(100).ToBitmap()
VB   C#

Como resultado, aparece un System.Drawing.Image de un código de barras PDF417 como se muestra a continuación:

A Comparison between IronBarcode and ZXing.NET, Figure 8: Generación sencilla y fluida de códigos de barras PDF417 en C#

Generación sencilla y fluida de códigos de barras PDF417 en C#

Lectura de archivos de códigos QR

Lectura de códigos QR con IronBarcode

Leer un código de barras o un código QR es pan comido cuando se utiliza la biblioteca de clases 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 utilizando sólo una línea de código.

A Comparison between IronBarcode and ZXing.NET, Figure 9: Code128 Imagen de Código de Barras para ser Escaneada con C#

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

Podemos obtener el valor, la imagen, el tipo de codificación y los datos binarios del código de barras (en su caso) y luego 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#

Lectura de códigos de barras en 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, salvo que ahora sabemos en qué número de página se descubrió 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#

Obtendrá un resultado de datos con todos los códigos de barras bitmap en el PDF.

A Comparison between IronBarcode and ZXing.NET, Figure 10: Lectura de códigos de barras almacenados en PDF Resultados

Lectura de códigos de barras almacenados en PDF Resultados

Lectura de códigos de barras a partir de GIF y TIFF

//  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#
A Comparison between IronBarcode and ZXing.NET, Figure 11: Lectura de códigos de barras de una imagen TIFF de varios fotogramas

Lectura de códigos de barras de una imagen TIFF de varios fotogramas

El siguiente ejemplo muestra cómo leer códigos QR y códigos de barras PDF-417 a partir de un PDF escaneado. 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 sin incurrir en una penalización significativa del rendimiento por sobredimensionar nuestras necesidades.

//  También se pueden escanear documentos PDF, 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 documentos PDF, 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 documentos PDF, 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#
A Comparison between IronBarcode and ZXing.NET, Figure 12: Lectura de códigos de barras de un documento PDF escaneado

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 dañada.

La corrección del tamaño de la miniatura del código de barras se realiza automáticamente. IronBarcode en C# hace legible un archivo.

Los métodos de lectura 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 escalan. Limpian todo el ruido digital asociado al trabajo con miniaturas, haciéndolas legibles de nuevo.

//  IronBarcode detecta automáticamente las imágenes de códigos de barras pequeñas o "en miniatura" y las corrige siempre que es posible, incluso si tienen 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 es posible, incluso si tienen 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 es posible, incluso si tienen mucho ruido digital.
Dim SmallResult As BarcodeResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128)
VB   C#
A Comparison between IronBarcode and ZXing.NET, Figure 13: Corrección automática del tamaño de las miniaturas de los códigos de barras

Corrección automática del tamaño de las miniaturas de los códigos de barras

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

En el mundo real, es posible que queramos leer códigos de barras a partir de imágenes imperfectas. Podrían ser imágenes sesgadas 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 su parte, facilita la lectura de códigos de barras a partir de imágenes imperfectas.

Ahora veremos el método ReadASingleBarcode. Con su parámetro RotationCorrection, IronBarcode intenta desalinear y leer códigos de barras a partir de muestras digitales imperfectas.

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#
A Comparison between IronBarcode and ZXing.NET, Figure 14: Lectura de un código de barras desde la cámara de un teléfono

Lectura de un código de barras desde la cámara de un teléfono

IronBarcode también puede leer varios códigos de barras al mismo tiempo. Obtenemos mejores resultados de IronBarcode cuando creamos una lista de documentos y utilizamos 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 hilos y potencialmente todos los núcleos de su CPU y puede ser exponencialmente más rápido que la lectura de 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 y descodificación de códigos QR con ZXing.NET

Para leer los archivos de código QR, añada 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)
    {
        //  crear una instancia de lector de código de barras
        IBarcodeReader reader = new BarcodeReader();
        //  cargar un mapa de bits
        var barcodeBitmap = (Bitmap)Image.FromFile(Server.MapPath("~/qrr") + "/" + Path.GetFileName(file));
        //  detectar y descodificar el código de barras dentro del mapa de bits
        var result = reader.Decode(barcodeBitmap);
        //  hacer algo con el resultado
        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)
    {
        //  crear una instancia de lector de código de barras
        IBarcodeReader reader = new BarcodeReader();
        //  cargar un mapa de bits
        var barcodeBitmap = (Bitmap)Image.FromFile(Server.MapPath("~/qrr") + "/" + Path.GetFileName(file));
        //  detectar y descodificar el código de barras dentro del mapa de bits
        var result = reader.Decode(barcodeBitmap);
        //  hacer algo con el resultado
        data = new KeyValuePair<string, string>(result.ToString(), "/QR/" + Path.GetFileName(file));
        fileData.Add(data);
    }
    return View(fileData);
}
Public Function ViewFile() As ActionResult
	Dim fileData As New List(Of KeyValuePair(Of String, String))()
	Dim data As KeyValuePair(Of String, String)

	Dim files() As String = Directory.GetFiles(Server.MapPath("~/qrr"))
	For Each file As String In files
		'  crear una instancia de lector de código de barras
		Dim reader As IBarcodeReader = New BarcodeReader()
		'  cargar un mapa de bits
		Dim barcodeBitmap = CType(Image.FromFile(Server.MapPath("~/qrr") & "/" & Path.GetFileName(file)), Bitmap)
		'  detectar y descodificar el código de barras dentro del mapa de bits
		Dim result = reader.Decode(barcodeBitmap)
		'  hacer algo con el resultado
		data = New KeyValuePair(Of String, String)(result.ToString(), "/QR/" & Path.GetFileName(file))
		fileData.Add(data)
	Next file
	Return View(fileData)
End Function
VB   C#
A Comparison between IronBarcode and ZXing.NET, Figure 15: Lectura y descodificación de códigos QR

Lectura y descodificación de códigos QR

A Comparison between IronBarcode and ZXing.NET, Figure 16: Código QR descodificado

Código QR descodificado

Descodificación de un código de barras dentro de un mapa de bits

//  crear una instancia de lector de código de barras
BarcodeReader reader = new BarcodeReader();
//  cargar un mapa de bits
var barcodeBitmap = (Bitmap)Image.LoadFrom("C:\\sample-barcode-image.png");
//  detectar y descodificar el código de barras dentro del mapa de bits
var result = reader.Decode(barcodeBitmap);
//  hacer algo con el resultado
if (result != null)
{
   txtDecoderType.Text = result.BarcodeFormat.ToString();
   txtDecoderContent.Text = result.Text;
}
//  crear una instancia de lector de código de barras
BarcodeReader reader = new BarcodeReader();
//  cargar un mapa de bits
var barcodeBitmap = (Bitmap)Image.LoadFrom("C:\\sample-barcode-image.png");
//  detectar y descodificar el código de barras dentro del mapa de bits
var result = reader.Decode(barcodeBitmap);
//  hacer algo con el resultado
if (result != null)
{
   txtDecoderType.Text = result.BarcodeFormat.ToString();
   txtDecoderContent.Text = result.Text;
}
'  crear una instancia de lector de código de barras
Dim reader As New BarcodeReader()
'  cargar un mapa de bits
Dim barcodeBitmap = CType(Image.LoadFrom("C:\sample-barcode-image.png"), Bitmap)
'  detectar y descodificar el código de barras dentro del mapa de bits
Dim result = reader.Decode(barcodeBitmap)
'  hacer algo con el resultado
If result IsNot Nothing Then
   txtDecoderType.Text = result.BarcodeFormat.ToString()
   txtDecoderContent.Text = result.Text
End If
VB   C#

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 descodificación. Sube un PNG u otro formato de la imagen del código QR, y comenzará la decodificación. Del mismo modo, puede generar un código QR para cualquier dato. La mayoría de las veces, esa información será una URL o un texto que quieras codificar en un código QR.

Navega hasta el sitio web de ZXing Decoder.

Comparación entre IronBarcode y ZXing.NET, Figura 17: Código QR descodificado

Sitio web del descodificador ZXing

Comparación entre IronBarcode y ZXing.NET, Figura 18: Código QR descodificado

ZXing Decode Resultado

Precios y licencias

La biblioteca ZXing.NET es una biblioteca gratuita de código abierto que permite crear aplicaciones de lectura de códigos de barras, pero está basada en una licencia Apache que no permite su uso libre con fines comerciales.

Se ofrece gratuitamente una licencia de desarrollador para IronBarcode. IronBarcode tiene un esquema de precios único: el paquete Lite comienza en $599 sin costes adicionales. Los artículos SaaS y OEM también pueden distribuirse de nuevo. Cada licencia incluye una licencia perpetua, validez dev/staging/production, una garantía de devolución del dinero de 30 días y un año de soporte y actualizaciones del software. (compra única). Visita esta página página para ver la información completa sobre 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 errores en casos de uso en el mundo real.

La clase BarcodeWriter, por ejemplo, validará y corregirá las sumas de comprobación de los códigos de barras UPCA y UPCE. También pondrá a cero los números demasiado cortos para introducirlos en un formato numérico específico. Si sus datos son incompatibles con el formato de datos especificado, IronBarcode notificará al desarrollador un formato de código de barras más adecuado que pueda utilizar.

IronBarcode destaca en la lectura de códigos de barras cuando el código de barras ha sido escaneado o leído a partir 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 una máquina.

¿En qué se diferencia IronBarcode de ZXing.NET?

IronBarcode se ha creado a partir de ZXing.NET (Paso de cebra) núcleo, con capacidad de procesamiento mejorada. Viene con una API fácil de usar y una baja tasa de errores en comparación con la biblioteca central ZXing.NET. No sólo eso, sino que IronBarcode también admite una gama más amplia de formatos de códigos de barras que la que admite la biblioteca habitual ZXing.NET.

IronBarcode es una versión más mejorada de ZXing.NET, que ofrece al usuario la plataforma para uso comercial y la posibilidad de utilizar el mismo paquete en múltiples plataformas. Además, cuenta con un completo servicio de asistencia técnica, siempre dispuesto a ayudarte cuando lo necesites.

IronBarcode incluye rotación automática, corrección de la perspectiva y corrección digital del ruido, y puede detectar el tipo de código de barras codificado en una imagen.

Conclusión

En conclusión, IronBarcode es una versátil biblioteca de software .NET y generador de códigos QR 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 eficaces para crear e identificar códigos de barras. En cuanto a la creación e identificación de 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.

ZXing.NET barcode es una potente librería que genera y reconoce códigos de barras en varios formatos de imagen. Podemos leer y crear imágenes en diversos formatos. ZXing.NET también le permite cambiar la apariencia de un código de barras, alterando su altura, anchura, texto del código de barras, etc.

En comparación con ZXing.NET, los paquetes IronBarcode ofrecen una licencia y un soporte fiables. IronBarcode cuesta $599. Aunque ZXing es gratuito, no ofrece ninguna posibilidad de uso comercial y además carece de soporte técnico. Además de ser más flexible que ZXing.NET, la solución IronBarcode también tiene más funcionalidades. Por lo tanto, es evidente que IronBarcode tiene una gran 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 de diferentes formatos de imagen y documentos PDF. También nos permite incluir imágenes dentro del código de barras o QR, lo que no está disponible en ninguna otra biblioteca.

IronBarcode es gratuito para las primeras fases de desarrollo. Puede adquirir un prueba gratuita para nivel de producción o uso comercial. En función de las necesidades del desarrollador, IronBarcode ofrece tres niveles de precios. Puede elegir la solución que mejor satisfaga sus exigencias. Ahora puede obtener un paquete de cinco productos de Iron Software por el precio de dos artículos de Iron Software. Visita esta página sitio web para más información.

< ANTERIOR
Comparación entre ZXing Decoder e IronBarcode
SIGUIENTE >
Comparación entre IronBarcode y Aspose.Barcode

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 1,069,531 Ver licencias >
123