Saltar al pie de página
COMPARAR CON OTROS COMPONENTES
Una Comparación Entre IronBarcode y las Bibliotecas ZXing.NET

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.


¿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".

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 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);
}
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 ' width of the QR Code
	Dim height = 250 ' height of the QR Code
	Dim margin = 0

	' BarcodeWriterPixelData acts as a QR code generator
	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)

	' 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 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
				' 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)
			End Try

			' Save to folder
			Dim fileGuid As String = 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()
		End Using
	End Using
	Return View(byteArray)
End Function
$vbLabelText   $csharpLabel

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

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))" />
    }
}
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
$vbLabelText   $csharpLabel

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'.

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ódigo QR mostrados

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);
Imports IronBarCode
' Create a barcode and save it in various formats
Private 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
Dim MyBarCodeImage As System.Drawing.Image = MyBarCode.Image
Dim MyBarCodeBitmap As System.Drawing.Bitmap = MyBarCode.ToBitmap()
Dim DataURL As String = MyBarCode.ToDataUrl()
Dim ImgTagForHTML As String = MyBarCode.ToHtmlTag()
Dim PngBytes() As Byte = MyBarCode.ToPngBinaryData()

' Save barcode in PDF stream
Using PdfStream As System.IO.Stream = MyBarCode.ToPdfStream()
	' The Stream barcode image output also works for GIF, JPEG, PDF, PNG, BMP and TIFF
End Using

' Stamp barcode onto an existing PDF at a specific position
MyBarCode.StampToExistingPdfPage("ExistingPDF.pdf", 1, 200, 50)
$vbLabelText   $csharpLabel

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.

A Comparison between IronBarcode and Zxing.NET, Figure 4: Formatos de código de barras 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");
Imports IronBarCode
' Generate a simple QR Code image and save as PNG
QRCodeWriter.CreateQrCode("hello world", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium).SaveAsPng("MyQR.png")
$vbLabelText   $csharpLabel

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.

A Comparison between IronBarcode and ZXing.NET, Figure 5: Formatos de código de barras compatibles

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");
Imports IronBarCode
Imports System.Diagnostics

' Generate a simple BarCode image and save as PNG using the following namespaces
Private MyBarCode As GeneratedBarcode = 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")
$vbLabelText   $csharpLabel
A Comparison between IronBarcode and ZXing.NET, Figure 6: Ejemplo de creación de una imagen de código de barras en C#

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);
Imports IronBarCode

' Adding a Logo
Private MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500)
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen)
$vbLabelText   $csharpLabel
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

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");
Imports IronBarCode

' Adding a Logo
Private 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")
$vbLabelText   $csharpLabel

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();
Imports IronBarCode
Imports System.Drawing

' Fluent API for Barcode image generation
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()
$vbLabelText   $csharpLabel

Como resultado, aparece una 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 de códigos de barras PDF417 sencilla y fluida en C#

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.

A Comparison between IronBarcode and ZXing.NET, Figure 9: Imagen de código de barras Code128 para escanear con C#

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);
}
Imports IronBarCode
Imports System

' Read a barcode or QR code from an image
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
$vbLabelText   $csharpLabel

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);
}
Imports IronBarCode
Imports System
Imports 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
Private PDFResults() As PagedBarcodeResult = BarcodeReader.ReadBarcodesFromPdf("MultipleBarcodes.pdf")

' Work with the results
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
$vbLabelText   $csharpLabel

Obtendrá datos de resultados con todos los códigos de barras de mapa de bits en el PDF.

A Comparison between IronBarcode and ZXing.NET, Figure 10: Lectura de códigos de barras almacenados en resultados 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
}
Imports IronBarCode
Imports System

' Multi-frame TIFF and GIF images can also be scanned, and multiple threads will be used automatically in the background for improved performance
Private MultiFrameResults() As PagedBarcodeResult = BarcodeReader.ReadBarcodesFromMultiFrameTiff("Multiframe.tiff", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels)
For Each PageResult In MultiFrameResults
	' Process each page result
Next PageResult
$vbLabelText   $csharpLabel
A Comparison between IronBarcode and ZXing.NET, Figure 11: Lectura de códigos de barras desde una imagen TIFF de varios fotogramas

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;
    //...
}
Imports IronBarCode
Imports System

' PDF documents can also be scanned, and multiple threads will be used automatically in the background for improved performance
Private ScanResults = BarcodeReader.ReadBarcodesFromPdf("Scan.pdf", BarcodeEncoding.All, BarcodeReader.BarcodeRotationCorrection.Low, BarcodeReader.BarcodeImageCorrection.LightlyCleanPixels)

' Work with the results
For Each PageResult In ScanResults
	Dim Value As String = PageResult.Value
	'...
Next PageResult
$vbLabelText   $csharpLabel
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 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);
Imports IronBarCode

' Small or 'Thumbnail' barcode images are automatically detected by IronBarcode and corrected wherever possible even if they have much digital noise.
Private SmallResult As BarcodeResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128)
$vbLabelText   $csharpLabel
A Comparison between IronBarcode and ZXing.NET, Figure 13: Corrección automática del tamaño de la miniatura del código de barras

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);
Imports IronBarCode
Imports System
Imports 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
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)
$vbLabelText   $csharpLabel
A Comparison between IronBarcode and ZXing.NET, Figure 14: Cómo leer un código de barras desde la cámara de un teléfono

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;
    //...
}
Imports IronBarCode

' The BarcodeResult.ReadBarcodesMultiThreaded method allows for faster barcode scanning of multiple images or PDFs. All threads are automatically managed by IronBarcode.
Private ListOfDocuments = { "Image1.png", "image2.JPG", "image3.pdf" }
Private BatchResults() As PagedBarcodeResult = BarcodeReader.ReadBarcodesMultiThreaded(ListOfDocuments)

' Work with the results
For Each Result In BatchResults
	Dim Value As String = Result.Value
	'...
Next Result
$vbLabelText   $csharpLabel

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);
}
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
		' Create a barcode reader instance
		Dim reader As IBarcodeReader = New BarcodeReader()

		' Load a bitmap
		Dim barcodeBitmap = CType(Image.FromFile(Server.MapPath("~/qrr") & "/" & Path.GetFileName(file)), Bitmap)

		' Detect and decode the barcode inside the bitmap
		Dim result = reader.Decode(barcodeBitmap)

		' Do something with the result
		data = New KeyValuePair(Of String, String)(result.ToString(), "/QR/" & Path.GetFileName(file))
		fileData.Add(data)
	Next file
	Return View(fileData)
End Function
$vbLabelText   $csharpLabel
A Comparison between IronBarcode and ZXing.NET, Figure 15: Lectura y decodificación de códigos QR

Lectura y decodificación de códigos QR

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

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;
}
Imports ZXing
Imports System.Drawing

' Create a barcode reader instance
Private reader As New BarcodeReader()

' Load a bitmap
Private barcodeBitmap = CType(Image.FromFile("C:\sample-barcode-image.png"), Bitmap)

' Detect and decode the barcode inside the bitmap
Private result = reader.Decode(barcodeBitmap)

' Do something with the result
If result IsNot Nothing Then
	txtDecoderType.Text = result.BarcodeFormat.ToString()
	txtDecoderContent.Text = result.Text
End If
$vbLabelText   $csharpLabel

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.

A Comparison between IronBarcode and ZXing.NET, Figure 17: Código QR decodificado

Sitio web del decodificador ZXing

A Comparison between IronBarcode and ZXing.NET, Figure 18: Código QR decodificado

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.

Por favor notaZXing.NET es una marca registrada de su respectivo propietario. Este sitio no está afiliado, respaldado ni patrocinado por ZXing.NET. Todos los nombres de producto, logotipos y marcas son propiedad de sus respectivos dueños. Las comparaciones son sólo para fines informativos y reflejan información disponible públicamente al momento de escribir.

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.

Jordi Bardia
Ingeniero de Software
Jordi es más competente en Python, C# y C++. Cuando no está aprovechando sus habilidades en Iron Software, está programando juegos. Compartiendo responsabilidades para pruebas de productos, desarrollo de productos e investigación, Jordi agrega un valor inmenso a la mejora continua del producto. La experiencia variada lo mantiene ...
Leer más