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"
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
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
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)
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
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
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
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")
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")
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")
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")
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
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-scanningin Gradle-Dateien → entfernen,BarCodeNuGet hinzufügenBarcodeScannerOptions.Builder()→new BarcodeReaderOptions { }BarcodeScanning.getClient(options)→ entfernen (keine Scanner-Instanz in IronBarcode)InputImage.fromFilePath(context, uri)→ Dateipfad-ZeichenfolgenargumentInputImage.fromBitmap(bitmap, rotation)→BarcodeReader.Read(stream)oder Byte-Array-Überladungscanner.process(inputImage)→BarcodeReader.Read(path, options).addOnSuccessListener { barcodes -> }→ Rückgabewert vonRead()durchlaufen.addOnFailureListener { e -> }→ try/catch umRead()barcode.rawValue→barcode.Valuebarcode.format→barcode.FormatBarcode.FORMAT_QR_CODE→BarcodeEncoding.QRCodeBarcode.FORMAT_CODE_128→BarcodeEncoding.Code128Barcode.FORMAT_ALL_FORMATS→ lassen SieExpectBarcodeTypeswegusing Google.MLKit.BarcodeScanning;(Xamarin-Bindung) →using IronBarCode;IronBarCode.License.LicenseKeysollte inMauiProgram.cs,Program.csoderStartup.csgesetzt 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.

