Zum Fußzeileninhalt springen
VIDEOS

Wie man Barcodes in C# for .NET 5 mit IronBarcode liest

Migrating from Google ML KitBarcode Scanning to IronBarcode

Dieser Leitfaden richtet sich an Teams in einer der folgenden beiden Situationen: Entweder portieren Sie eine Android-Anwendung nach .NET MAUI oder .NET 9 und müssen den Barcode-Scanner von ML Kit durch eine verwaltete Alternative ersetzen, oder Ihnen wurde Google ML Kitin einer Diskussion über plattformübergreifende Barcodes empfohlen und Sie haben beim Hinzufügen des NuGet Pakets festgestellt, dass es nicht existiert.

Google ML Kit Barcode Scanning ist eine native Android- und iOS-Bibliothek. Es wird als Maven-Abhängigkeit (com.google.mlkit:barcode-scanning:17.3.0 gebündelt oder com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 ungebündelt) für Kotlin/Java und als CocoaPod (GoogleMLKit/BarcodeScanning) für Swift geliefert. ML Kit ist seit Juni 2020 ein eigenständiges Produkt und erfordert kein Firebase mehr, aber es gibt kein offizielles .NET SDK, kein dotnet add package google-mlkit-barcode und keine C# API aus erster Hand von Google. Von der Community gepflegte Xamarin/MAUI-Bindungen sind im Laufe der Jahre erschienen, aber sie brechen, wenn ML Kit sein zugrunde liegendes SDK aktualisiert.

IronBarcode ist eine native .NET Bibliothek, die über NuGet installiert wird, sich in Standard .NET Muster integriert und unter Windows, Linux, macOS, Docker, Azure und AWS läuft. Dieser Leitfaden zeigt, wie Sie die in Kotlin oder Java geschriebenen Muster in äquivalenten C#-Code übersetzen können.

Der Portierungskontext

Beim Portieren von ML Kit zu IronBarcode ändern sich einige Dinge strukturell – nicht nur syntaktisch:

Callbacks werden zu Rückgabewerten. ML Kit verwendet die Android-API Task mit addOnSuccessListener und addOnFailureListener. IronBarcode's BarcodeReader.Read() gibt eine Sammlung synchron zurück. Du wiederholst es direkt. Keine Rückrufregistrierung, keine Thread-Koordination.

Kein Scanner-Objekt. ML Kit erfordert, dass Sie ein BarcodeScannerOptions-Objekt erstellen, BarcodeScanning.getClient(options) aufrufen, um eine Scanner-Instanz zu erhalten, und dann scanner.process(inputImage) aufrufen. IronBarcode verwendet statische Methoden — BarcodeReader.Read() ist der Einstiegspunkt. Es gibt keine Instanz, die verwaltet oder entsorgt werden muss.

Keine Konstruktion von InputImage. ML Kit's InputImage muss aus einer Android-spezifischen Quelle konstruiert werden: InputImage.fromFilePath(context, uri), InputImage.fromBitmap(bitmap, rotation) oder InputImage.fromMediaImage(image, rotation). IronBarcode akzeptiert einen Dateipfad als Zeichenfolge, ein Stream, ein byte[] oder ein System.Drawing.Bitmap. Kein Android-Kontext, keine URI, keine Rotationsmetadaten.

Keine Google Play-Dienste. Das ungebündelte ML Kit-Modell läuft über Google Play-Dienste. Die gebündelte Variante liefert das Modell innerhalb der APK (fügt etwa 2,4 MB hinzu) und vermeidet die Play-Dienste-Überprüfung, aber keine der Varianten ist auf .NET-Zielen erhältlich. IronBarcode hat keine solche Abhängigkeit – es läuft identisch auf jeder Plattform, die .NET unterstützt.

Schnellinstallation in .NET

Entfernen Sie alle in Ihrem Projekt vorhandenen Xamarin/MAUI ML Kit-Bindungspakete und installieren Sie anschließend IronBarcode:

dotnet add package BarCode

Fügen Sie den Lizenzschlüssel beim Start der Anwendung hinzu — in Program.cs, MauiProgram.cs oder Startup.cs, je nach Art Ihrer App:

// NuGet: dotnet add package BarCode
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// NuGet: dotnet add package BarCode
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Die Lizenz kann zu jedem Zeitpunkt vor dem ersten BarcodeReader.Read()- oder BarcodeWriter.CreateBarcode()-Aufruf gesetzt werden. Eine kostenlose Testversion ist verfügbar; Im Testmodus werden Wasserzeichen in die Barcodes eingefügt, die Lesbarkeit wird dadurch aber nicht eingeschränkt.

Barcodes lesen: Kotlin zu C

Einfaches Lesen eines einzelnen Barcodes

Hier ist ein typischer ML Kit-Read in Kotlin, der einen einzelnen QR-Code aus einer Datei-URI scannt:

// Android Kotlin — ML Kit
val options = BarcodeScannerOptions.Builder()
    .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
    .build()
val scanner = BarcodeScanning.getClient(options)
val inputImage = InputImage.fromFilePath(context, imageUri)

scanner.process(inputImage)
    .addOnSuccessListener { barcodes ->
        val barcode = barcodes.firstOrNull()
        if (barcode != null) {
            Log.d("MLKit", "Value: ${barcode.rawValue}")
            Log.d("MLKit", "Format: ${barcode.format}")
        }
    }
    .addOnFailureListener { e ->
        Log.e("MLKit", "Scan failed: ${e.message}")
    }

Das Äquivalent in C# mit IronBarcode:

using IronBarCode;

try
{
    var results = BarcodeReader.Read("captured-image.jpg");
    var barcode = results.FirstOrDefault();
    if (barcode != null)
    {
        Console.WriteLine($"Value: {barcode.Value}");
        Console.WriteLine($"Format: {barcode.Format}");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Scan failed: {ex.Message}");
}
using IronBarCode;

try
{
    var results = BarcodeReader.Read("captured-image.jpg");
    var barcode = results.FirstOrDefault();
    if (barcode != null)
    {
        Console.WriteLine($"Value: {barcode.Value}");
        Console.WriteLine($"Format: {barcode.Format}");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Scan failed: {ex.Message}");
}
Imports IronBarCode

Try
    Dim results = BarcodeReader.Read("captured-image.jpg")
    Dim barcode = results.FirstOrDefault()
    If barcode IsNot Nothing Then
        Console.WriteLine($"Value: {barcode.Value}")
        Console.WriteLine($"Format: {barcode.Format}")
    End If
Catch ex As Exception
    Console.WriteLine($"Scan failed: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

Das Ergebnis steht sofort als Rückgabewert zur Verfügung. barcode.Value entspricht barcode.rawValue. barcode.Format entspricht barcode.format. Die Fehlerbehandlung verwendet standardmäßige try/catch-Blöcke anstelle eines separaten Fehler-Listeners.

Lesen mehrerer Barcodes

ML Kit scannt einen einzigen InputImage und gibt eine Liste zurück. Bei mehreren Barcodes in einem Bild iterieren Sie die Liste des Erfolgs-Listeners:

// Android Kotlin — ML Kit, multiple barcodes
val options = BarcodeScannerOptions.Builder()
    .setBarcodeFormats(Barcode.FORMAT_ALL_FORMATS)
    .build()
val scanner = BarcodeScanning.getClient(options)
val inputImage = InputImage.fromFilePath(context, imageUri)

scanner.process(inputImage)
    .addOnSuccessListener { barcodes ->
        for (barcode in barcodes) {
            val rawValue = barcode.rawValue
            val format = barcode.format
            processBarcode(rawValue, format)
        }
    }
    .addOnFailureListener { e -> Log.e("MLKit", e.message ?: "Unknown error") }

Mit IronBarcode setzen Sie ExpectMultipleBarcodes = true in BarcodeReaderOptions und iterieren die Ergebnis-Sammlung:

using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};

var results = BarcodeReader.Read("warehouse-shelf.jpg", options);
foreach (var barcode in results)
{
    Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}");
    ProcessBarcode(barcode.Value, barcode.Format);
}
using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};

var results = BarcodeReader.Read("warehouse-shelf.jpg", options);
foreach (var barcode in results)
{
    Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}");
    ProcessBarcode(barcode.Value, barcode.Format);
}
Imports IronBarCode

Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}

Dim results = BarcodeReader.Read("warehouse-shelf.jpg", options)
For Each barcode In results
    Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}")
    ProcessBarcode(barcode.Value, barcode.Format)
Next
$vbLabelText   $csharpLabel

Formatspezifikation: setBarcodeFormats to BarcodeReaderOptions

ML Kit erfordert, dass Sie angeben, welche Formate über setBarcodeFormats() gesucht werden sollen. Wenn Sie es weglassen, durchsucht ML Kit alle Formate. IronBarcode funktioniert nach dem gleichen Prinzip – das Weglassen von Formatbeschränkungen durchsucht alles, aber die Angabe erwarteter Typen verbessert die Leistung.

ML Kit Kotlin IronBarcode C#
Barcode.FORMAT_QR_CODE BarcodeEncoding.QRCode
Barcode.FORMAT_CODE_128 BarcodeEncoding.Code128
Barcode.FORMAT_CODE_39 BarcodeEncoding.Code39
Barcode.FORMAT_CODE_93 BarcodeEncoding.Code93
Barcode.FORMAT_EAN_13 BarcodeEncoding.EAN13
Barcode.FORMAT_EAN_8 BarcodeEncoding.EAN8
Barcode.FORMAT_UPC_A BarcodeEncoding.UPCA
Barcode.FORMAT_UPC_E BarcodeEncoding.UPCE
Barcode.FORMAT_PDF417 BarcodeEncoding.PDF417
Barcode.FORMAT_DATA_MATRIX BarcodeEncoding.DataMatrix
Barcode.FORMAT_AZTEC BarcodeEncoding.Aztec
Barcode.FORMAT_ITF BarcodeEncoding.ITF
Barcode.FORMAT_CODABAR BarcodeEncoding.Codabar
Barcode.FORMAT_ALL_FORMATS Lassen Sie ExpectBarcodeTypes weg

Verwendung von Formatierungsflags in IronBarcode:

using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.EAN13
};

var results = BarcodeReader.Read("product-image.jpg", options);
using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.EAN13
};

var results = BarcodeReader.Read("product-image.jpg", options);
Imports IronBarCode

Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True,
    .ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128 Or BarcodeEncoding.EAN13
}

Dim results = BarcodeReader.Read("product-image.jpg", options)
$vbLabelText   $csharpLabel

Die bitweise ODER-Verknüpfung funktioniert genauso wie die Vararg-Formatliste von ML Kit.

Ergebniszugriff: Rohwert und Format

ML Kit's Ergebnisobjekt gibt rawValue (ein String?) und format (eine Int-Konstante) frei. Das Ergebnis von IronBarcode gibt Value (ein string) und Format (ein BarcodeEncoding-Enum-Wert) frei.

// ML Kit Kotlin— result fields
val rawValue: String? = barcode.rawValue
val format: Int = barcode.format
val boundingBox: Rect? = barcode.boundingBox
val displayValue: String? = barcode.displayValue
// IronBarcode C#— result fields
string value = barcode.Value;
BarcodeEncoding format = barcode.Format;
int page = barcode.PageNumber; // populated for PDF / multi-page input
// IronBarcode C#— result fields
string value = barcode.Value;
BarcodeEncoding format = barcode.Format;
int page = barcode.PageNumber; // populated for PDF / multi-page input
' IronBarcode VB.NET— result fields
Dim value As String = barcode.Value
Dim format As BarcodeEncoding = barcode.Format
Dim page As Integer = barcode.PageNumber ' populated for PDF / multi-page input
$vbLabelText   $csharpLabel

barcode.Value ist immer eine nicht-null-Zeichenfolge in IronBarcode — wenn die Erfassung erfolgreich war, ist der Wert vorhanden. barcode.Format ist das BarcodeEncoding-Enum-Mitglied, das Sie direkt vergleichen können: if (barcode.Format == BarcodeEncoding.QRCode).

Was ist anders in .NET?

Synchrone API anstelle von Callbacks. Dies ist die bedeutendste strukturelle Änderung. ML Kit's scanner.process() gibt ein Task<List<Barcode>> im Android-Sinn zurück — Sie verketteten Listener. Das BarcodeReader.Read() von IronBarcode gibt das Ergebnis inline zurück. Wenn Sie es außerhalb des UI-Threads in einer MAUI-App ausführen müssen, umschließen Sie es mit Task.Run():

using IronBarCode;

// In a MAUI ViewModel or page code-behind
var results = await Task.Run(() => BarcodeReader.Read(imagePath));
foreach (var barcode in results)
{
    // update UI on main thread
    MainThread.BeginInvokeOnMainThread(() =>
    {
        ResultLabel.Text = barcode.Value;
    });
}
using IronBarCode;

// In a MAUI ViewModel or page code-behind
var results = await Task.Run(() => BarcodeReader.Read(imagePath));
foreach (var barcode in results)
{
    // update UI on main thread
    MainThread.BeginInvokeOnMainThread(() =>
    {
        ResultLabel.Text = barcode.Value;
    });
}
Imports IronBarCode
Imports System.Threading.Tasks
Imports Microsoft.Maui.Dispatching

' In a MAUI ViewModel or page code-behind
Dim results = Await Task.Run(Function() BarcodeReader.Read(imagePath))
For Each barcode In results
    ' update UI on main thread
    MainThread.BeginInvokeOnMainThread(Sub()
                                           ResultLabel.Text = barcode.Value
                                       End Sub)
Next
$vbLabelText   $csharpLabel

Kein Kontextparameter. Jeder ML Kit-Aufruf, der ein InputImage konstruiert, erfordert ein Android Context. IronBarcode benötigt lediglich einen Dateipfad oder einen Datenstrom. Durch das Entfernen des Kontext-Threadings aus der Barcode-Logik wird der Code erheblich vereinfacht.

Keine Google Play Services. Das standardmäßige ML Kit-Modell läuft über Play Services — BarcodeScanning.getClient() überprüft die Verfügbarkeit von Play Services zur Laufzeit und wirft eine Ausnahme, wenn diese nicht verfügbar sind. IronBarcode verfügt über keine Laufzeitdienstprüfung. Es liest entweder das Bild ein oder löst eine Standardausnahme aus.

Standardmäßige Ausnahmebehandlung. ML Kit's addOnFailureListener empfängt eine Java-Exception-Unterklasse. In .NET erscheinen Ausfälle als Standard-System.Exception-Ausnahmen, die auf normale Weise mit try/catch abgefangen werden können.

Lesen von PDF-Dokumenten

ML Kit bietet keine PDF-Unterstützung. InputImage.fromFilePath() mit einer .pdf URI schlägt entweder fehl oder ist auf das Lesen der ersten Seite als gerastertes Bild beschränkt, je nach Android-Version. Wenn Ihr Portierungsszenario Dokumente umfasst – Rechnungsverarbeitung, Logistikmanifeste, Formularscanning – verarbeitet IronBarcode PDFs nativ:

using IronBarCode;

// Read all barcodes from all pages of a PDF
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};

var results = BarcodeReader.Read("invoice-batch.pdf", options);
foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}");
}
using IronBarCode;

// Read all barcodes from all pages of a PDF
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};

var results = BarcodeReader.Read("invoice-batch.pdf", options);
foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}");
}
Imports IronBarCode

' Read all barcodes from all pages of a PDF
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}

Dim results = BarcodeReader.Read("invoice-batch.pdf", options)
For Each barcode In results
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}")
Next
$vbLabelText   $csharpLabel

Kein Bildextraktionsschritt, keine PDF-Bibliothek von Drittanbietern, keine Seiteniterationsschleife mit separatem Rendering. Übergeben Sie den PDF-Pfad und erhalten Sie alle Barcode-Werte mit ihren Seitenzahlen zurück.

Neue Fähigkeiten: Generation

ML Kit generiert keine Barcodes – es liest sie nur. Falls Ihre portierte Anwendung Etiketten, Tickets oder QR-Codes erzeugen muss, bietet IronBarcode dafür dasselbe Paket an.

Code 128 für Versandetiketten:

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128)
    .ResizeTo(400, 120)
    .SaveAsPng("shipping-label.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128)
    .ResizeTo(400, 120)
    .SaveAsPng("shipping-label.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128) _
    .ResizeTo(400, 120) _
    .SaveAsPng("shipping-label.png")
$vbLabelText   $csharpLabel

QR-Code-Generierung:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/track/98341", 500)
    .SaveAsPng("tracking-qr.png");
using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/track/98341", 500)
    .SaveAsPng("tracking-qr.png");
Imports IronBarCode

QRCodeWriter.CreateQrCode("https://example.com/track/98341", 500) _
    .SaveAsPng("tracking-qr.png")
$vbLabelText   $csharpLabel

QR-Code mit Logo und Farbe:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500)
    .AddBrandLogo("company-logo.png")
    .ChangeBarCodeColor(System.Drawing.Color.DarkBlue)
    .SaveAsPng("product-qr.png");
using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500)
    .AddBrandLogo("company-logo.png")
    .ChangeBarCodeColor(System.Drawing.Color.DarkBlue)
    .SaveAsPng("product-qr.png");
Imports IronBarCode

QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500) _
    .AddBrandLogo("company-logo.png") _
    .ChangeBarCodeColor(System.Drawing.Color.DarkBlue) _
    .SaveAsPng("product-qr.png")
$vbLabelText   $csharpLabel

Gibt den Barcode als Byte-Array für eine HTTP-Antwort zurück:

using IronBarCode;

// In an ASP.NET Corecontroller action
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode)
    .ToPngBinaryData();

return File(barcodeBytes, "image/png");
using IronBarCode;

// In an ASP.NET Corecontroller action
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode)
    .ToPngBinaryData();

return File(barcodeBytes, "image/png");
Imports IronBarCode

' In an ASP.NET Core controller action
Dim barcodeBytes As Byte() = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode).ToPngBinaryData()

Return File(barcodeBytes, "image/png")
$vbLabelText   $csharpLabel

Keines dieser Muster hat ein Äquivalent im ML Kit. Es handelt sich um neue Funktionen, die Ihnen zur Verfügung stehen, weil Sie mit einer vollständigen .NET -Barcodebibliothek arbeiten und nicht mit einem rein mobilen Scanner.

Serverseitige Stapelverarbeitung

ML Kit verarbeitet ein Bild pro Aufruf, benötigt eine Android/iOS-Laufzeitumgebung und kennt kein Konzept der serverseitigen Ausführung. IronBarcode verarbeitet Dateien in einer Schleife, läuft in ASP.NET Coreund skaliert normal:

using IronBarCode;

// Process a folder of scanned document images
var imageFiles = Directory.GetFiles("/data/scans", "*.jpg");
var allResults = new List<(string File, string Value, BarcodeEncoding Format)>();

foreach (var file in imageFiles)
{
    var options = new BarcodeReaderOptions
    {
        Speed = ReadingSpeed.Faster,
        ExpectMultipleBarcodes = false
    };

    var results = BarcodeReader.Read(file, options);
    foreach (var barcode in results)
    {
        allResults.Add((file, barcode.Value, barcode.Format));
    }
}

// Write results to CSV, database, etc.
foreach (var (file, value, format) in allResults)
{
    Console.WriteLine($"{file}: [{format}] {value}");
}
using IronBarCode;

// Process a folder of scanned document images
var imageFiles = Directory.GetFiles("/data/scans", "*.jpg");
var allResults = new List<(string File, string Value, BarcodeEncoding Format)>();

foreach (var file in imageFiles)
{
    var options = new BarcodeReaderOptions
    {
        Speed = ReadingSpeed.Faster,
        ExpectMultipleBarcodes = false
    };

    var results = BarcodeReader.Read(file, options);
    foreach (var barcode in results)
    {
        allResults.Add((file, barcode.Value, barcode.Format));
    }
}

// Write results to CSV, database, etc.
foreach (var (file, value, format) in allResults)
{
    Console.WriteLine($"{file}: [{format}] {value}");
}
Imports IronBarCode
Imports System.IO

' Process a folder of scanned document images
Dim imageFiles = Directory.GetFiles("/data/scans", "*.jpg")
Dim allResults = New List(Of (File As String, Value As String, Format As BarcodeEncoding))()

For Each file In imageFiles
    Dim options = New BarcodeReaderOptions With {
        .Speed = ReadingSpeed.Faster,
        .ExpectMultipleBarcodes = False
    }

    Dim results = BarcodeReader.Read(file, options)
    For Each barcode In results
        allResults.Add((file, barcode.Value, barcode.Format))
    Next
Next

' Write results to CSV, database, etc.
For Each result In allResults
    Console.WriteLine($"{result.File}: [{result.Format}] {result.Value}")
Next
$vbLabelText   $csharpLabel

Dieses Vorgehen – das Einlesen eines Ordners mit Bildern, das Extrahieren von Barcodes und das Zusammenführen der Ergebnisse – ist mit ML Kit nicht möglich. Es handelt sich um einen Standard-Workflow von IronBarcode .

Funktionsvergleich

Feature Google ML Kit IronBarcode
.NET NuGet -Paket None BarCode
C# / .NET API None Ja
Barcode-Lesung Ja (Android/iOS) Ja (alle Plattformen)
Barcode-Generierung Nein Ja
QR-Code-Generierung Nein Ja
QR-Logo-Einbettung Nein Ja
PDF-Eingabe Nein Ja
Unterstützung für mehrseitige Dokumente Nein Ja
Kamera-/Bildeingabe Ja Über eine Bilddatei
Serverseitige Bereitstellung Nein Ja
ASP.NET Core Nein Ja
Azure Functions Nein Ja
Docker/Linux Nein Ja
Google Play-Dienste erforderlich Unbundled-Variante nur Nein
Firebase Abhängigkeit Nein (eigenständig seit Juni 2020) Nein
Synchrone .NET -API Nein Ja
Abhängigkeitsinjektionsfreundlich Nein Ja (statische API)
ExpectMultipleBarcodes-Option Über die Ergebnisliste BarcodeReaderOptions
Formatspezifikation setBarcodeFormats() ExpectBarcodeTypes
Kompromiss zwischen Geschwindigkeit und Genauigkeit Fest (modellbasiert) ReadingSpeed-Enum
Preisgestaltung Kostenlos (on-device, nur mobil) Ab $749 (Lite) unbefristet
Plattformen Android, iOS Windows, Linux, macOS, Docker, Azure, AWS

Migrations-Checkliste

Wenn Sie eine Android-Codebasis portieren oder eine inoffizielle Xamarin ML Kit-Bindung ersetzen, suchen Sie in Ihrem Projekt nach diesen Mustern und wenden Sie die oben genannten Übersetzungen an:

  • com.google.mlkit:barcode-scanning in Gradle-Dateien → entfernen, BarCode NuGet hinzufügen
  • BarcodeScannerOptions.Builder()new BarcodeReaderOptions { }
  • BarcodeScanning.getClient(options) → entfernen (keine Scanner-Instanz in IronBarcode)
  • InputImage.fromFilePath(context, uri) → Dateipfad-Zeichenfolgenargument
  • InputImage.fromBitmap(bitmap, rotation)BarcodeReader.Read(stream) oder Byte-Array-Überladung
  • scanner.process(inputImage)BarcodeReader.Read(path, options)
  • .addOnSuccessListener { barcodes -> } → Rückgabewert von Read() durchlaufen
  • .addOnFailureListener { e -> } → try/catch um Read()
  • barcode.rawValuebarcode.Value
  • barcode.formatbarcode.Format
  • Barcode.FORMAT_QR_CODEBarcodeEncoding.QRCode
  • Barcode.FORMAT_CODE_128BarcodeEncoding.Code128
  • Barcode.FORMAT_ALL_FORMATS → lassen Sie ExpectBarcodeTypes weg
  • using Google.MLKit.BarcodeScanning; (Xamarin-Bindung) → using IronBarCode;
  • IronBarCode.License.LicenseKey sollte in MauiProgram.cs, Program.cs oder Startup.cs gesetzt werden

Die Hauptarbeit besteht in der strukturellen Umstellung von Callback-basiertem auf synchronen Code. Die Formatkonstanten und Ergebnisfeldnamen sind direkte Zuordnungen. PDF- und Generierungsunterstützung sind rein additiv – sie erfordern keine Migration, nur neuen Code.

Häufig gestellte Fragen

Warum sollte ich von Google ML Kit Barcode Scanning auf IronBarcode umsteigen?

Zu den häufigsten Gründen gehören die Vereinfachung der Lizenzierung (Beseitigung der Komplexität von SDK und Laufzeitschlüsseln), die Beseitigung von Durchsatzbeschränkungen, die Verbesserung der nativen PDF-Unterstützung, die Verbesserung der Docker/CI/CD-Bereitstellung und die Verringerung von API-Boilerplate im Produktionscode.

Wie kann ich Google ML Kit API-Aufrufe durch IronBarcode ersetzen?

Ersetzen Sie Instanzerstellung und Lizenzierung durch IronBarCode.License.LicenseKey = "key". Ersetzen Sie die Leseaufrufe durch BarcodeReader.Read(path) und die Schreibaufrufe durch BarcodeWriter.CreateBarcode(data, encoding). Statische Methoden erfordern keine Instanzverwaltung.

Wie viel Code ändert sich bei der Migration von Google ML Kit Barcode Scanning zu IronBarcode?

Die meisten Migrationen führen zu weniger Codezeilen. Lizenzierungs-Boilerplate, Instanzkonstruktoren und explizite Formatkonfiguration werden entfernt. Zentrale Lese-/Schreibvorgänge werden auf kürzere IronBarcode-Äquivalente mit saubereren Ergebnisobjekten abgebildet.

Muss ich während der Migration sowohl Google ML Kit Barcode Scanning als auch IronBarcode installiert lassen?

Nein. Die meisten Migrationen sind direkte Ersetzungen und keine Paralleloperationen. Migrieren Sie eine Serviceklasse nach der anderen, ersetzen Sie die NuGet-Referenz und aktualisieren Sie die Instanzierungs- und API-Aufrufmuster, bevor Sie zur nächsten Klasse übergehen.

Wie lautet der NuGet-Paketname für IronBarcode?

Das Paket ist 'IronBarCode' (mit großem B und C). Installieren Sie es mit 'Install-Package IronBarCode' oder 'dotnet add package IronBarCode'. Die using-Anweisung im Code lautet 'using IronBarCode;'.

Wie vereinfacht IronBarcode die Docker-Bereitstellung im Vergleich zum Google ML Kit Barcode Scanning?

IronBarcode ist ein NuGet-Paket, für das keine externen SDK-Dateien oder Lizenzkonfigurationen erforderlich sind. In Docker setzen Sie die Umgebungsvariable IRONBARCODE_LICENSE_KEY und das Paket übernimmt die Lizenzvalidierung beim Start.

Erkennt IronBarcode nach der Migration von Google ML Kit automatisch alle Barcodeformate?

Ja, IronBarcode erkennt automatisch die Symbologie aller unterstützten Formate. Eine explizite Aufzählung von BarcodeTypes ist nicht erforderlich. Wenn das Format bereits bekannt ist und die Leistung eine Rolle spielt, ermöglicht BarcodeReaderOptions die Einschränkung des Suchraums als eine Optimierung.

Kann IronBarcode Barcodes aus PDFs ohne eine separate Bibliothek lesen?

Ja, BarcodeReader.Read("document.pdf") verarbeitet PDF-Dateien nativ. Die Ergebnisse enthalten PageNumber, Format, Value und Confidence für jeden gefundenen Barcode. Es ist kein externer PDF-Rendering-Schritt erforderlich.

Wie handhabt IronBarcode die parallele Verarbeitung von Barcodes?

Die statischen Methoden von IronBarcode sind zustandslos und thread-sicher. Verwenden Sie Parallel.ForEach direkt über Dateilisten ohne Instanzmanagement pro Thread. BarcodeReaderOptions.MaxParallelThreads steuert das interne Thread-Budget.

Welche Ergebniseigenschaften ändern sich bei der Migration von Google ML Kit Barcode Scanning zu IronBarcode?

Übliche Umbenennungen: BarcodeValue wird zu Value, BarcodeType wird zu Format. IronBarcode-Ergebnisse fügen auch Confidence und PageNumber hinzu. Eine lösungsweite Such- und Ersetzungsfunktion übernimmt die Umbenennungen im bestehenden Ergebnisverarbeitungscode.

Wie kann ich die IronBarcode-Lizenzierung in einer CI/CD-Pipeline einrichten?

Speichern Sie IRONBARCODE_LICENSE_KEY als Pipeline-Geheimnis und weisen Sie IronBarCode.License.LicenseKey im Startup-Code der Anwendung zu. Ein Geheimnis deckt alle Umgebungen ab, einschließlich Entwicklung, Test, Staging und Produktion.

Unterstützt IronBarcode die Generierung von QR-Codes mit benutzerdefiniertem Styling?

Ja. QRCodeWriter.CreateQrCode() unterstützt benutzerdefinierte Farben über ChangeBarCodeColor(), das Einbetten von Logos über AddBrandLogo(), konfigurierbare Fehlerkorrekturstufen und mehrere Ausgabeformate einschließlich PNG, JPG, PDF und Stream.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an