Przejdź do treści stopki
PORóWNAJ Z INNYMI KOMPONENTAMI
Porównanie pomiędzy IronBarcode a bibliotekami ZXing.NET

Porównanie IronBarcode i ZXing.NET

BarCode scanner may not always be appropriate for our applications. Być może masz już cyfrowy obraz BarCODE i chcesz wiedzieć, co on oznacza w języku angielskim. Ponadto skaner ten odczytuje wyłącznie barcody 1D, które zawierają ograniczoną ilość danych i mogą być używane wyłącznie w bibliotece Windows RT Class. BarCodes 2D (znane również jako kody QR) są obecnie powszechne i mogą zawierać znacznie więcej informacji.

Można stworzyć aplikację opartą na języku C#, która odczytuje kody kreskowe za pomocą prostych wywołań API i kilku kroków kodowania. Aplikacja obsługująca platformę .NET działa w systemach Windows, macOS lub Linux bez konieczności korzystania z narzędzi lub interfejsów API innych firm.

W tym artykułe porównamy dwie najpotężniejsze biblioteki aplikacji .NET Core służące do programowego odczytu kodów kreskowych. Te dwie biblioteki to biblioteka IronBarcode i ZXing.NET. Zobaczymy, co sprawia, że IronBarcode jest bardziej wydajny i niezawodny niż ZXing.NET.


Czym jest ZXing.NET

ZXing.NET to biblioteka, która dekoduje i generuje BARCODES (takie jak QR Code, PDF 417, EAN, UPC, Aztec, Data Matrix, Codabar). ZXing, co oznacza "zebra crossing", to oparta na Javie biblioteka typu open source, która obsługuje różne formaty kodów kreskowych 1D i 2D.

Jego podstawowe cechy są następujące:

  • Posiada możliwość przechowywania adresów URL, danych kontaktowych, wydarzeń kalendarzowych i nie tylko
  • Jest dostosowany do aplikacji Java SE
  • Umożliwia integrację skanera BarCode poprzez intencję
  • Jest to prosta aplikacja na Google Glass

Czym jest IronBarcode

IronBarcode to biblioteka C#, która pozwala programistom odczytywać i generować kody kreskowe. Jako wiodąca biblioteka kodów kreskowych, biblioteka IronBarcode obsługuje szeroką gamę kodów kreskowych 1- i 2-wymiarowych, w tym ozdobione (kolorowe i opatrzone logo) kody QR. Obsługuje .NET Standard i .NET Core w wersji 2 i wyższej, co pozwala na korzystanie z niego na różnych platformach, takich jak Azure, Linux, macOS, Windows i Web. IronBarcode to znana biblioteka klas lub komponent dla systemu .NET, który umożliwia programistom C#, VB.NET i F# pracę ze standardowymi językami programowania. Umożliwia to klientom przeglądanie tagów skanera i tworzenie nowych, znormalizowanych etykiet. Działa wyjątkowo dobrze z kodami kreskowymi 2D i innymi standardowymi kodami kreskowymi 3D.

IronBarcode obsługuje teraz kody kreskowe 2D. Zapewnia funkcje optymalizacji kolorystyki, stylizacji i pikselizacji tych kodów oraz możliwość dodawania do nich logo w celu wykorzystania w materiałach PRINT lub reklamowych. Biblioteka ta potrafi również odczytywać przekrzywione i zniekształcone kody kreskowe, których inne oprogramowanie do odczytu kodów kreskowych może nie być w stanie odczytać.

Instalacja IronBarcode i ZXing.NET

Instalacja ZXing.NET

Aby korzystać z biblioteki ZXing.NET, zainstaluj następujące dwa pakiety w swojej aplikacji ASP.NET Core za pomocą konsoli NuGet Package Manager Console:

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

Alternatywnie, zainstaluj ZXing.NET w swoim projekcie za pomocą menedżera pakietów NuGet. Aby to zrobić, przejdź do Narzędzia > Menedżer pakietów NuGet > Zarządzaj pakietami NuGet dla rozwiązań..., a następnie przejdź do zakładki "Przeglądaj" i wyszukaj "ZXing.NET".

A Comparison between IronBarcode and Zxing.NET, Figure 1: Aplikacja internetowa ASP.NET

Aplikacja internetowa ASP.NET

Instalacja IronBarcode

Zainstaluj IronBarcode za pomocą menedżera pakietów NuGet lub pobierając bibliotekę DLL bezpośrednio ze strony produktu. Przestrzeń nazw IronBarcode zawiera wszystkie klasy IronBarcode.

IronBarcode można zainstalować za pomocą menedżera pakietów NuGet dla Visual Studio: nazwa pakietu to "Barcode".

Install-Package BarCode

Tworzenie kodów kreskowych 2D

Korzystanie z ZXing.NET

Najpierw utwórz nowy folder o nazwie "qrr" w folderze głównym pliku projektu.

Następnie przystąpimy do tworzenia plików QR i zapisania plików systemu obrazów w folderze "qrr".

W kontrolerze dodaj metodę GenerateFile(), tak jak pokazano poniżej w kodzie źródłowym.

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

Jedyna pozostała zmiana to zapisanie pliku z kodem QR w folderze "qrr". Wykonuje się to za pomocą dwóch poniższych wierszy kodu.

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

Następnie należy utworzyć widok GenerateFile i umieścić w nim poniższy kod. Widok GenerateFile jest identyczny z widokiem Indeks.

@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

Wpisz dowolną wartość w polu tekstowym i kliknij przycisk "Prześlij". Kod QR zostanie wygenerowany i zapisany jako plik .PNG w folderze "qrr".

A Comparison between IronBarcode and ZXing.NET, Figure 2: Generator kodów QR

Generator kodów QR

A Comparison between IronBarcode and ZXing.NET, Figure 3: Wyświetlane pliki kodów QR

Wyświetlane pliki kodów QR

Obsługiwane formaty BarCode

IronBarcode obsługuje szeroki zakres powszechnie używanych formatów kodów kreskowych, w tym:

  • Kody QR z logo i kolorami (w tym kody ozdobione i opatrzone marką)
  • Kody kreskowe w wielu formatach, w tym Aztec, Data Matrix, CODE 93, CODE 128, RSS Expanded Databar, UPS MaxiCode oraz kody kreskowe USPS i IMB (OneCode)
  • Kod kreskowy liniowy RSS-14 i PDF-417
  • UPCA, UPCE, EAN-8, EAN-13, Codabar, ITF, MSI i Plessey to tradycyjne numeryczne formaty BARCODE.

Utwórz i zapisz BarCode

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

Z drugiej strony, ZXing to oparta na Javie biblioteka open source do przetwarzania obrazów BarCode 1D/2D. Obsługiwane są formaty kodów kreskowych UPC-A, UPC-E, EAN-8, Code 93, Code 128, QR Code, Data Matrix, Aztec, PDF 417 i inne.

A Comparison between IronBarcode and Zxing.NET, Figure 4: Obsługiwane formaty BarCode

Obsługiwane formaty BarCode

Tworzenie plików kodów QR za pomocą IronBarcode

Aby tworzyć kody QR za pomocą IronBarcode, możemy użyć klasy QRCodeWriter zamiast klasy BarcodeWriter. Ta klasa wprowadza kilka nowatorskich i intrygujących funkcji do tworzenia kodów QR. Umożliwia to ustawienie poziomu korekcji błędów kodu QR, co pozwala znaleźć równowagę między rozmiarem a czytelnością kodu 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

Korekta błędów pozwala nam określić, jak łatwe będzie odczytanie kodu QR w rzeczywistych sytuacjach. Wyższy poziom korekcji błędów skutkuje większymi kodami QR o większej liczbie pikseli i większej złożoności. Na poniższym obrazku widoczny jest plik z kodem QR.

A Comparison between IronBarcode and ZXing.NET, Figure 5: Obsługiwane formaty BarCode

Obraz kodu QR

Zaczynamy od określenia wartości BARCODE i formatu BARCODE z wyliczenia IronBarCode.BarcodeWriterEncoding. Możemy następnie zapisać jako obraz, System.Drawing.Image lub obiekt kodu 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
Dim MyBarCode As GeneratedBarcode = 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: Przykład tworzenia obrazu BarCode w języku C#

Przykład tworzenia obrazu BarCode w języku C#

IronBarcode obsługuje również stylizację kodów QR, np. umieszczanie grafiki z logo i dopasowywanie jej do siatki dokładnie w środku obrazu. Może być również dostosowany kolorystycznie do konkretnej marki lub identyfikacji wizualnej.

Aby przetestować, utwórz logo w poniższym przykładzie kodu i zobacz, jak proste jest użycie metody 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: Utwórz kod QR z obrazem logo

Utwórz kod QR z obrazem logo

Na koniec zapisujemy wygenerowany kod QR jako plik PDF. Dla Twojej wygody ostatnia linijka kodu zapisuje kod QR jako plik 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

Poniżej pokazujemy, jak utworzyć, sformatować i wyeksportować BARCODE za pomocą zaledwie jednej linii kodu.

IronBarcode zawiera płynny interfejs API, który jest podobny do System.Linq. Tworzymy BARCODE, ustawiamy jego marginesy i eksportujemy go do formatu bitmapowego w jednej linii, łącząc wywołania metod. Może to być bardzo przydatne i ułatwia czytanie kodu.

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
Dim MyValue As String = "https://ironsoftware.com/csharp/barcode"
Dim BarcodeBmp As Bitmap = IronBarCode.BarcodeWriter.CreateBarcode(MyValue, BarcodeEncoding.PDF417) _
    .ResizeTo(300, 200) _
    .SetMargins(100) _
    .ToBitmap()
$vbLabelText   $csharpLabel

W rezultacie System.Drawing.Image BARCODE kreskowego PDF417 wygląda tak, jak pokazano poniżej:

A Comparison between IronBarcode and ZXing.NET, Figure 8: Proste i płynne generowanie BarCodes PDF417 w języku C#

Proste i płynne generowanie BarCodes PDF417 w języku C#

Odczytywanie plików kodów QR

Odczytywanie kodów QR za pomocą IronBarcode

Odczytanie kodu kreskowego lub kodu QR jest dziecinnie proste, gdy używasz biblioteki IronBarcode w połączeniu z czytnikiem kodów kreskowych .NET. W naszym pierwszym przykładzie możemy zobaczyć, jak odczytać BARCODE za pomocą zaledwie jednej linii kodu.

A Comparison between IronBarcode and ZXing.NET, Figure 9: Obraz BarCode kreskowego Code128 do zeskanowania za pomocą języka C#

Obraz BarCode kreskowego Code128 do zeskanowania za pomocą języka C#

Możemy uzyskać wartość BARCODE, obraz, typ kodowania i dane binarne (jeśli są), a następnie wyświetlić je w konsoli.

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

Odczytywanie BarCodes w plikach PDF

Przyjrzymy się, jak odczytać zeskanowany dokument PDF i znaleźć wszystkie jednowymiarowe BARCODES za pomocą kilku linii kodu.

Jak widać, jest to bardzo podobne do odczytu pojedynczego BarCoda z pojedynczego dokumentu, z tą różnicą, że teraz wiemy, na której stronie został znaleziony.

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

Otrzymasz dane wynikowe ze wszystkimi BARCODAMI w formacie bitmapowym w pliku PDF.

A Comparison between IronBarcode and ZXing.NET, Figure 10: Odczytywanie BarCodes zapisanych w plikach PDF

Odczytywanie BarCodes zapisanych w plikach PDF

Odczytywanie BarCodes z plików GIF i 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: Odczytywanie BarCodes z obrazu TIFF zawierającego wiele klatek

Odczytywanie BarCodes z obrazu TIFF zawierającego wiele klatek

Poniższy przykład pokazuje, jak odczytywać kody QR i kody kreskowe PDF-417 ze zeskanowanego pliku PDF. Ustaliliśmy odpowiedni poziom korekcji obrotu BARCODE oraz korekcji obrazu BARCODE, aby delikatnie oczyścić dokument bez znaczącego obniżenia wydajności.

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: Odczytywanie BarCodes ze zeskanowanego dokumentu PDF

Odczytywanie BarCodes ze zeskanowanego dokumentu PDF

Odczytywanie uszkodzonych kodów QR z obrazów bitmapowych

Poniższy przykład pokazuje, że ta biblioteka BarCode w języku C# potrafi odczytać nawet uszkodzoną miniaturę kodu kreskowego.

Korekta rozmiaru miniatur BARCODE-ów odbywa się automatycznie. IronBarcode w języku C# sprawia, że plik jest czytelny.

Metody odczytu automatycznie wykrywają obrazy BARCODE, które są zbyt małe, aby mogły być prawidłowymi BARCODE, i powiększają je. Usuwają one wszelkie zakłócenia cyfrowe związane z pracą z miniaturami, przywracając ich czytelność.

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: Automatyczna korekcja rozmiaru miniatur BarCode

Automatyczna korekcja rozmiaru miniatur BarCode

Odczytywanie BarCodes z niedoskonałych obrazów

W rzeczywistych sytuacjach może zaistnieć potrzeba odczytania BARCODE-ów z niedoskonałych obrazów. Mogą to być zniekształcone obrazy lub zdjęcia z cyfrowym szumem. Byłoby to niemożliwe w przypadku większości bibliotek open source do generowania i odczytu BarCode'ów w środowisku .NET. Z kolei IronBarcode sprawia, że odczytywanie kodów kreskowych z niedoskonałych obrazów staje się dziecinnie proste.

Przyjrzyjmy się teraz metodzie ReadASingleBarcode. Dzięki parametrowi RotationCorrection IronBarcode próbuje skorygować zniekształcenia i odczytać kody kreskowe z niedoskonałych próbek cyfrowych.

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: Odczytywanie BarCoda za pomocą aparatu w telefonie

Odczytywanie BarCoda za pomocą aparatu w telefonie

IronBarcode może również odczytywać wiele kodów kreskowych jednocześnie. Uzyskujemy lepsze wyniki z IronBarcode, gdy tworzymy listę dokumentów i używamy czytnika kodów kreskowych do odczytu wielu dokumentów. Metoda ReadBarcodesMultithreaded służąca do skanowania BarCodes wykorzystuje wiele wątków i potencjalnie wszystkie rdzenie procesora, co może być wykładniczo szybsze niż odczytywanie BarCodes pojedynczo.

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

Odczytywanie i dekodowanie kodów QR za pomocą ZXing.NET

Aby odczytać pliki z kodami QR, dodaj metodę akcji ViewFile do swojego kontrolera, jak pokazano poniżej.

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: Odczytywanie i dekodowanie kodów QR

Odczytywanie i dekodowanie kodów QR

A Comparison between IronBarcode and ZXing.NET, Figure 16: Zdekodowany kod QR

Zdekodowany kod QR

Odkodowywanie BarCode w pliku bitmapowym

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

ZXing Decoder Online

ZXing Decoder Online to dostępny online skaner barcode'ów i kodów QR, który obsługuje dekodowanie. Prześlij obraz kodu QR w formacie PNG lub innym, a rozpocznie się jego dekodowanie. Podobnie można wygenerować kod QR dla dowolnych danych. W większości przypadków informacją tą będzie adres URL lub tekst, który chcesz zakodować w kodzie QR.

Przejdź do strony internetowej ZXing Decoder.

A Comparison between IronBarcode and ZXing.NET, Figure 17: Zdekodowany kod QR

Strona internetowa ZXing Decoder

A Comparison between IronBarcode and ZXing.NET, Figure 18: Zdekodowany kod QR

Wynik dekodowania ZXing

Ceny i licencje

Biblioteka ZXing.NET to bezpłatna biblioteka typu open source, która umożliwia tworzenie aplikacji do odczytu kodów kreskowych, na licencji Apache License 2.0, która zezwala na bezpłatne wykorzystanie komercyjne z odpowiednim podaniem źródła.

Licencja programisty na IronBarcode jest oferowana bezpłatnie. IronBarcode ma unikalny system cenowy: pakiet Lite zaczyna się od $liteLicense bez żadnych dodatkowych kosztów. Produkty SaaS i OEM mogą być również ponownie dystrybuowane. Każda licencja obejmuje Licencję wieczystą, ważność w środowiskach deweloperskich, stagingowych i produkcyjnych, 30-dniową gwarancję zwrotu pieniędzy oraz roczną pomoc techniczną i aktualizacje oprogramowania (jednorazowy zakup). Odwiedź tę stronę, aby zapoznać się z pełnymi informacjami dotyczącymi cen i licencji IronBarcode.

Dłączego warto wybrać IronBarcode?

IronBarcode zawiera łatwe w użyciu API dla programistów do odczytu i zapisu kodów kreskowych w środowisku .NET, co zapewnia optymalną dokładność i niski wskaźnik błędów w rzeczywistych zastosowaniach.

Na przykład klasa BarcodeWriter weryfikuje i koryguje "sumy kontrolne" w BARCODES-ach UPCA i UPCE. Ponadto należy uzupełnić zerami liczby, które są zbyt krótkie, aby można je było wprowadzić w określonym formacie numerycznym. Jeśli dane użytkownika są niezgodne z określonym formatem danych, IronBarcode poinformuje programistę o bardziej odpowiednim formacie BarCode, z którego może skorzystać.

IronBarcode doskonale radzi sobie z odczytywaniem kodów kreskowych, gdy kod został zeskanowany lub odczytany z obrazu fotograficznego, innymi słowy, gdy obraz nie jest idealny pod względem graficznym i nie jest zrzutem ekranu wygenerowanym maszynowo.

Czym IronBarcode różni się od ZXing.NET?

IronBarcode został zbudowany w oparciu o rdzeń ZXing.NET (Zebra Crossing) i charakteryzuje się zwiększoną wydajnością przetwarzania. Oferuje łatwe w użyciu API i niski wskaźnik błędów w porównaniu z biblioteką podstawową ZXing.NET Core. Co więcej, biblioteka IronBarcode obsługuje również szerszy zakres formatów kodów kreskowych niż standardowa biblioteka ZXing.NET.

IronBarcode to ulepszona wersja ZXing.NET, zapewniająca użytkownikowi platformę do użytku komercyjnego oraz możliwość korzystania z tego samego pakietu na wielu platformach. Oferuje również pełne wsparcie techniczne, zawsze gotowe do pomocy w razie potrzeby.

IronBarcode oferuje funkcje automatycznego obracania, korekcji perspektywy i korekcji szumów cyfrowych oraz potrafi rozpoznać typ kodu kreskowego zakodowanego na obrazie.

Wnioski

Podsumowując, IronBarcode to wszechstronna biblioteka oprogramowania .NET i generator kodów QR w języku C#, służący do odczytu szerokiej gamy formatów kodów kreskowych, niezależnie od tego, czy są to zrzuty ekranu, zdjęcia, skany czy inne niedoskonałe obrazy z rzeczywistego świata.

IronBarcode to jedna z najskuteczniejszych bibliotek do tworzenia i identyfikacji kodów kreskowych. Jeśli chodzi o tworzenie i identyfikację BarCodes, jest to również jedna z najszybszych bibliotek. Biblioteka jest kompatybilna z różnymi systemami operacyjnymi. Jest łatwy w projektowaniu i obsługuje szeroki zakres formatów BarCode. Ponadto obsługiwane są różne symbole, formaty i znaki.

ZXing.NET BARCODE to potężna biblioteka, która generuje i rozpoznaje BARCODE-sy w różnych formatach obrazów. Możemy odczytywać i tworzyć obrazy w różnych formatach. ZXing.NET pozwala również na zmianę wyglądu BARCODE, modyfikując jego wysokość, szerokość, tekst BARCODE i tak dalej.

W porównaniu z ZXing.NET pakiety IronBarcode oferują niezawodne licencjonowanie i wsparcie techniczne. IronBarcode kosztuje $liteLicense. Chociaż ZXing jest bezpłatny i dostępny na licencji open source, firma IronBarcode zapewnia kompleksowe wsparcie komercyjne i profesjonalną obsługę techniczną. Oprócz większej elastyczności w porównaniu z ZXing.NET, rozwiązanie Iron BarCode oferuje również szerszy zakres funkcji. W związku z tym oczywiste jest, że IronBarcode ma znaczną przewagę nad ZXing.NET.

Porównując czas przetwarzania potrzebny do rozpoznawania i generowania kodów kreskowych, IronBarcode przewyższa ZXing.NET. IronBarcode posiada również kilka funkcji, które pozwalają nam odczytywać BarCodes z różnych formatów obrazów i dokumentów PDF. Pozwala nam to również na umieszczanie obrazów w kodzie BARCODE lub kodzie QR, co nie jest dostępne w żadnej innej bibliotece.

IronBarcode jest bezpłatny na wczesnych etapach rozwoju. Możesz uzyskać bezpłatną wersję próbną do użytku produkcyjnego lub komercyjnego. Zgodnie z wymaganiami programisty, IronBarcode oferuje trzy poziomy cenowe. Możesz wybrać rozwiązanie, które najlepiej spełnia Twoje wymagania. Teraz możesz otrzymać Suite pięciu produktów Iron Software w cenie dwóch produktów Iron Software. Więcej informacji można znaleźć na tej stronie internetowej.

Zwróć uwagęZXing.NET jest zastrzeżonym znakiem towarowym odpowiedniego właściciela. Ta strona nie jest powiązana z serwisem ZXing.NET, nie jest przez niego promowana ani sponsorowana. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

Często Zadawane Pytania

Jak mogę wygenerować kod QR w C#?

Można wygenerować kod QR w C# za pomocą IronBarcode, używając jego klasy `BarcodeWriter`. Wystarczy zdefiniować zawartość kodu QR, dostosować opcje takie jak kolor i rozmiar, a następnie wywołać metodę `Write`, aby wygenerować kod QR.

Co sprawia, że IronBarcode jest bardziej niezawodny niż ZXing.NET?

IronBarcode oferuje zaawansowane funkcje, takie jak wsparcie dla większej liczby formatów kodów kreskowych, zaawansowane funkcje przetwarzania obrazu, takie jak rotacja i korekta perspektywy, oraz możliwość tworzenia ozdobnych kodów QR z logo i kolorami. Jest także kompatybilny międzyplatformowo i oferuje komercyjne wsparcie.

Czy mogę czytać kody kreskowe z wadliwych obrazów za pomocą IronBarcode?

Tak, IronBarcode potrafi czytać kody kreskowe z wadliwych obrazów za pomocą takich funkcji jak korekta rotacji, korekta perspektywy i redukcja szumu cyfrowego, co czyni go skutecznym dla obrazów skanowanych lub fotograficznych.

Jakie są kroki, aby odczytać kod kreskowy w C#?

Aby odczytać kod kreskowy w C#, użyj klasy `BarcodeReader` z IronBarcode. Załaduj obraz zawierający kod kreskowy, korzystając z metody `BarcodeReader.QuicklyReadOneBarcode`, która zdekoduje i zwróci zawartość kodu kreskowego, jeśli zostanie rozpoznany.

Jak IronBarcode zapewnia kompatybilność międzyplatformową?

IronBarcode wspiera kompatybilność międzyplatformową dla Windows, macOS, Linux i Azure, pozwalając na integrację funkcji generowania i odczytu kodów kreskowych w różnorodnych aplikacjach .NET bez zależności od zewnętrznych bibliotek.

Jakie opcje są dostępne do dostosowania kodów QR z IronBarcode?

IronBarcode pozwala na dostosowanie kodów QR poprzez ustawienie kolorów, dodanie logo dla brandingu i skonfigurowanie poziomów korekcji błędów, w celu zrównoważenia rozmiaru i czytelności, oferując elastyczność dla różnych estetycznych i funkcjonalnych wymagań.

Czy istnieje opłata licencyjna za używanie IronBarcode w aplikacjach komercyjnych?

IronBarcode oferuje różne opcje licencjonowania, w tym licencję wieczystą odpowiednią dla aplikacji komercyjnych. To kontrastuje z ZXing.NET, który jest darmowy, ale posiada ograniczenia dla użytku komercyjnego.

Jakie są typowe scenariusze rozwiązywania problemów przy używaniu bibliotek kodów kreskowych?

Typowe problemy mogą obejmować nieprawidłowe rozpoznanie kodu kreskowego z powodu słabej jakości obrazu, nieobsługiwane formaty kodów kreskowych lub błędy konfiguracyjne. Zaawansowane przetwarzanie obrazu w IronBarcode może pomóc w łagodzeniu niektórych problemów z rozpoznaniem.

Dlaczego ktoś mógłby wybrać IronBarcode zamiast ZXing.NET do obsługi kodów kreskowych?

IronBarcode dostarcza bardziej niezawodne API, lepsze zarządzanie błędami, wsparcie dla szerokiej gamy formatów kodów kreskowych i funkcje generowania wizualnie dostosowanych kodów QR, wszystko z dodatkową korzyścią licencjonowania komercyjnego i profesjonalnym wsparciem.

Jak zainstalować IronBarcode w projekcie .NET?

Można zainstalować IronBarcode w projekcie .NET, używając Menedżera Pakietów NuGet w Visual Studio, wyszukując 'IronBarcode' i dodając go do projektu, zapewniając łatwą integrację i aktualizacje.

Jordi Bardia
Inżynier oprogramowania
Jordi jest najbardziej biegły w Pythonie, C# i C++. Kiedy nie wykorzystuje swoich umiejętności w Iron Software, programuje gry. Dzieląc odpowiedzialność za testowanie produktów, rozwój produktów i badania, Jordi wnosi ogromną wartość do ciągłej poprawy produktów. Różnorodne doświadczenia ...
Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie