Google ML Kit Barcode Scanning vs IronBarcode: C# Barcode Bibliothek Vergleich
LEADTOOLS BarCodevs IronBarcode: Lizenzierung, Speicherbedarf und Container-Bereitstellung
Um LEADTOOLS BarCodein Docker zu verwenden, binden Sie eine Lizenzdatei unter einem bestimmten Pfad in Ihren Container ein. Diese Datei muss bei jeder Bereitstellung mitgeliefert werden. Die Lizenzdatei ist Teil des Bereitstellungsartefakt-Sets, nicht nur eine Umgebungsvariable.
Das ist kein Vorwurf an die LEADTOOLS-Technik - es spiegelt ein dateibasiertes Lizenzmodell wider, das Container-native Bereitstellungsmuster vorwegnimmt. Aber im Jahr 2026, wenn Ihre CI/CD-Pipeline ein Container-Image erstellen und hochladen muss, betten Sie entweder eine .LIC-Datei in das Image ein oder montieren sie zur Laufzeit als Volume. So oder so benötigt Ihre Barcode-Bibliothek Dateisystemzugriff, bevor sie initialisiert wird. Das ist der zugrunde liegende Kompromiss, den dieser Vergleich untersucht.
LEADTOOLS BarCodeverstehen
LEADTOOLS Barcode ist Teil des umfassenden Dokumenten-Imaging-SDKs von LEAD Technologies, das seit 1990 kontinuierlich weiterentwickelt wird. Das Barcode-Modul unterstützt mehr als 40 Symbologien und ist eng in das breitere LEADTOOLS-Ökosystem für OCR, Formularverarbeitung, PDF-Bearbeitung und Bildanzeige integriert. Diese Integration des Ökosystems ist besonders wertvoll, wenn eine Anwendung all diese Funktionen von einem einzigen Anbieter benötigt. Wenn die Anforderung das Scannen von Barcodes in einem eigenständigen Microservice oder einer fokussierten Anwendung ist, stellt die gleiche Integration einen Mehraufwand dar, der bei jeder Bereitstellung berücksichtigt werden muss.
Die Architektur der Bibliothek spiegelt ihr Alter wider. LEADTOOLS wurde in einer Ära der expliziten Ressourcenverwaltung, der manuellen Konfiguration und der dateisystembasierten Lizenzierung entwickelt. Jede dieser Designentscheidungen war in ihrem Kontext sinnvoll. In der modernen .NET -Entwicklung – containerisierte Workloads, CI/CD-Pipelines, Geheimnisverwaltungssysteme – erzeugen genau diese Entscheidungen Reibungsverluste, die die Teams aktiv umgehen müssen.
Für die Bereitstellung von LEADTOOLS BarCodewerden mindestens fünf NuGet Pakete benötigt. Die Extraktion von PDF-Barcodes erfordert ein sechstes Paket. Unter Windows muss die MSVC++ 2017-Laufzeitumgebung auf dem Host vorhanden sein. Die veröffentlichte Ausgabe einer LEADTOOLS-Barcode-Anwendung ist wesentlich größer als eine Einzelpaket-Alternative.
Wichtigste architektonische Merkmale des LEADTOOLS-Barcodes:
- Dateibasierte Lizenzarchitektur: Erfordert eine
.LIC-Datei, die physisch auf der Festplatte an einem bekannten Pfad vorhanden ist, sowie einen Entwickler-Schlüsselstring. Beide müssen zur Laufzeit zugänglich sein, damit die Bibliothek initialisiert werden kann. - Zweistufiges Lizenzmodell: Entwicklungslizenzen und Bereitstellungslizenzen werden separat bepreist und separat erworben. Für Angebote zur Produktionsimplementierung wenden Sie sich bitte an den Vertrieb von LEADTOOLS.
- Mehrfachpaket-Installation: Eine Mindestinstallation, die barcodesfähig ist, erfordert
Leadtools.Barcode,Leadtools,Leadtools.Codecs,Leadtools.Codecs.PngundLeadtools.Codecs.Jpeg. Jedes zusätzliche Bildformat benötigt sein eigenes Codec-Paket. - Native Laufzeitabhängigkeit: Für Windows-Bereitstellungen wird zusätzlich zur .NET Laufzeitumgebung die MSVC++ 2017-Laufzeitumgebung benötigt.
- Explizite Symbologie-Deklaration: Das Barcode-Lesen erfordert das Übergeben eines Arrays von
BarcodeSymbology-Enum-Werten, die angeben, welche Formate gescannt werden sollen. Fehlende Formate werden nicht erkannt. - Geschichtete Initialisierungssequenz: Nach dem Laden der Lizenzdatei muss die Anwendung überprüfen, ob die Lizenz nicht abgelaufen ist und ob jede erforderliche Funktion - 1D-Lesen, 2D-Lesen, Schreiben - einzeln freigeschaltet ist, bevor ein
BarcodeEngine-Objekt erstellt wird. - Mehr als 40 unterstützte Symbologien: Starke Formatabdeckung für 1D- und 2D-Barcodetypen als Teil einer umfassenden Bildverarbeitungsplattform.
Die dateibasierte Lizenzarchitektur
Für die Initialisierung von LEADTOOLS sind ungefähr 20 Codezeilen erforderlich, bevor die erste Barcode-Operation ausgeführt werden kann. Die Sequenz umfasst die Auflösung von Dateipfaden, die Überprüfung des Ablaufdatums und die Sperrprüfung pro Funktion:
using Leadtools;
using Leadtools.Barcode;
RasterSupport.SetLicense(
@"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
"your-developer-key-here");
if (RasterSupport.KernelExpired)
throw new InvalidOperationException("LEADTOOLS license has expired");
if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
throw new InvalidOperationException("1D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
throw new InvalidOperationException("2D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
throw new InvalidOperationException("Barcode writing is locked");
var engine = new BarcodeEngine();
using Leadtools;
using Leadtools.Barcode;
RasterSupport.SetLicense(
@"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
"your-developer-key-here");
if (RasterSupport.KernelExpired)
throw new InvalidOperationException("LEADTOOLS license has expired");
if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
throw new InvalidOperationException("1D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
throw new InvalidOperationException("2D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
throw new InvalidOperationException("Barcode writing is locked");
var engine = new BarcodeEngine();
Imports Leadtools
Imports Leadtools.Barcode
RasterSupport.SetLicense("C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC", "your-developer-key-here")
If RasterSupport.KernelExpired Then
Throw New InvalidOperationException("LEADTOOLS license has expired")
End If
If RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) Then
Throw New InvalidOperationException("1D barcode reading is locked")
End If
If RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) Then
Throw New InvalidOperationException("2D barcode reading is locked")
End If
If RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) Then
Throw New InvalidOperationException("Barcode writing is locked")
End If
Dim engine As New BarcodeEngine()
Dieser Initialisierungsblock muss erfolgreich ausgeführt werden, bevor jegliche Barcode-Lese- oder Schreibvorgänge funktionieren. Wenn die .LIC-Datei fehlt, der Pfad falsch ist oder die Dateiberechtigungen fehlerhaft sind, wird die Lizenzinitialisierung fehlschlagen und sich als Ausnahme beim Start zeigen.
IronBarcode verstehen
IronBarcode ist eine spezialisierte .NET Barcode-Bibliothek, die speziell für das Lesen und Generieren von Barcodes in .NET Anwendungen entwickelt wurde. IronBarcode ist nicht nur ein Modul innerhalb eines größeren Imaging SDK, sondern befasst sich in erster Linie mit der Barcode-Funktionalität. Die Bibliothek wird als einzelnes NuGet Paket verteilt, das die Unterstützung aller Bildformate, die native PDF-Barcode-Extraktion und die ML-basierte Fehlerkorrektur beinhaltet, ohne dass zusätzliche Codec-Pakete oder native Laufzeitabhängigkeiten erforderlich sind.
IronBarcode verwendet ein statisches API-Design. Lese- und Schreibvorgänge sind als statische Methodenaufrufe auf BarcodeReader und BarcodeWriter verfügbar, ohne dass Instanzbildung oder Initialisierungsobjekte erforderlich sind. Die Lizenzaktivierung erfolgt durch die Zuweisung einer einzelnen Zeichenkette. Die Bibliothek erkennt Barcode-Formate automatisch über alle mehr als 50 unterstützten Symbologien hinweg, sodass die Notwendigkeit entfällt, die erwarteten Formate vor jedem Lesevorgang aufzulisten.
Die Bibliothek ist für .NET Standard 2.0und höher ausgelegt und bietet Kompatibilität mit .NET Framework 4.6.2+, .NET 5, .NET 6, .NET 7, .NET 8 und .NET 9. Auf keinem der unterstützten Betriebssysteme ist eine plattformspezifische native Laufzeitumgebung erforderlich.
Hauptmerkmale von IronBarcode:
- String-Key-Lizenzierung: Zur Lizenzaktivierung ist die Zuweisung eines einzelnen Strings erforderlich. Der Schlüssel kann aus einer Umgebungsvariablen, einer Konfigurationsdatei, einem Geheimnismanager oder einer beliebigen Quelle stammen, die einen Zeichenkettenwert liefert.
- Einzelnes NuGet-Paket: Alle Bildformatunterstützungen, PDF-Extraktion und Barcode-Funktionen sind in
IronBarcodeenthalten. Es werden keine zusätzlichen Codec-Pakete benötigt. - Statische Fluent-API:
BarcodeReader.Read()undBarcodeWriter.CreateBarcode()sind statische Einstiegspunkte. Es müssen keine Engine-Instanzen oder Codec-Objekte erstellt werden. - Automatische Formaterkennung: Liest Daten aus allen über 50 unterstützten Symbologien, ohne dass der Aufrufer die erwarteten Formate angeben muss.
- Integrierte PDF-Unterstützung: Die Extraktion von PDF-Barcodes ist im Basispaket enthalten und erfordert keine zusätzliche Installation.
- Über 50 unterstützte Symbologien: Umfasst alle wichtigen 1D- und 2D-Barcodeformate, einschließlich Code 128, Code 39, QR-Code, Data Matrix, PDF417, EAN-13 und UPC-A.
- ML-Fehlerkorrektur: Die auf maschinellem Lernen basierende Bildkorrektur verbessert die Lesegenauigkeit bei beschädigten oder qualitativ minderwertigen Barcode-Bildern.
Funktionsvergleich
Die folgende Tabelle verdeutlicht die grundlegenden Unterschiede zwischen LEADTOOLS BarCodeund IronBarcode:
| Feature | LEADTOOLS BarCode | IronBarcode |
|---|---|---|
| Lizenzmodell | Datei + Schlüssel (zweistufig) | Nur Schlüssel (einstufig) |
| SDK-Fußabdruck | 5+Pakete + native Laufzeitumgebung | 1 Packung |
| Initialisierungscode | 20+Zeilen | 1 Zeile |
| Docker-Einsatz | Datei muss eingebunden werden | Umgebungsvariable |
| PDF-Barcode-Extraktion | Separates Paket | Eingebaut |
| Format automatisch erkennen | Erfordert Symbologie-Liste | Ja (über 50 Formate) |
| Gesamtsymboliken | 40+ | 50+ |
| ML-Fehlerkorrektur | Nein | Ja |
Detaillierter Funktionsvergleich
| Feature | LEADTOOLS BarCode | IronBarcode |
|---|---|---|
| Lizenzierung | ||
| Lizenzmodell | Datei + Entwicklerschlüssel | Nur Zeichenkettenschlüssel |
| Lizenzstufen | Entwicklung + Bereitstellung (separat) | Einzellizenz |
| Bereitstellungspreise | Kontakt zum Vertrieb | Veröffentlichte Preise |
| Lizenz in Umgebungsvariable | Teilweise (nur Schlüssel, Datei weiterhin erforderlich) | Ja |
| Lizenz im Bereich Geheimnismanager | Datei weiterhin erforderlich | Ja (nur Zeichenkette) |
| Installation | ||
| Erforderliche NuGet Pakete | 5+ | 1 |
| Native Laufzeitabhängigkeit | MSVC++ 2017 (Windows) | None |
| PDF-Unterstützungspaket | Separate (Leadtools.Codecs.Pdf) |
Enthalten |
| Veröffentlichte Ausgabegröße | Größer (mehrfaches Paket + native Abhängigkeiten) | Kleiner (einzeln verpackt) |
| Lektüre | ||
| 1D-Symboliken | 25+ | 30+ |
| 2D-Symboliken | Ab 15 Jahren | Ab 15 Jahren |
| Format automatisch erkennen | Erfordert Symbologie-Liste | Ja (über 50 Formate) |
| Explizite Symbolisierungsdeklaration erforderlich | Ja | Nein |
| PDF-Barcode-Extraktion | Ja (separates Paket) | Ja (integriert) |
| ML-Fehlerkorrektur | Nein | Ja |
| Mehrfach-Barcode-Erkennung | Ja | Ja |
| Generation | ||
| Code 128-Generierung | Ja | Ja |
| QR-Code-Generierung | Ja | Ja |
| QR-Code-Logo-Branding | Nein | Ja |
| Fluent-Generierungs-API | Nein | Ja |
| Ausgabeformate | PNG, JPEG, BMP | PNG, JPEG, BMP, SVG, HTML, PDF |
| API-Entwurf | ||
| API-Stil | Instanzbasiert (Engine + Codecs) | Statisch fließend |
| Initialisierungszeilen | 20+ | 1 |
| Bildladeebene | RasterCodecs (separat) | Automatisch |
| Plattform | ||
| Plattformübergreifend | Teilweise (native Abhängigkeiten) | Vollversion (.NET Standard) |
| Docker-/Container-Unterstützung | Datei muss eingebunden werden | Umgebungsvariable |
| .NET Standard 2.0 | Ja | Ja |
| .NET 8 / .NET 9 | Ja | Ja |
Lizenzarchitektur
Die Lizenzarchitektur ist der bedeutendste Unterschied zwischen diesen beiden Bibliotheken für Teams, die auf moderner Infrastruktur arbeiten.
LEADTOOLS-Ansatz
LEADTOOLS-Lizenzierung erfordert eine .LIC-Datei, die physisch auf dem Dateisystem an einem bekannten Pfad vorhanden ist, sowie einen Entwickler-Schlüsselstring, der an RasterSupport.SetLicense übergeben wird. Nach dem Aufruf von SetLicense muss die Anwendung überprüfen, dass die Lizenz nicht abgelaufen ist und dass jede Barcode-Funktion einzeln freigeschaltet ist. Erst nachdem alle Prüfungen bestanden sind, kann ein BarcodeEngine-Objekt erstellt werden:
using Leadtools;
using Leadtools.Barcode;
RasterSupport.SetLicense(
@"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
"your-developer-key-here");
if (RasterSupport.KernelExpired)
throw new InvalidOperationException("LEADTOOLS license has expired");
if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
throw new InvalidOperationException("1D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
throw new InvalidOperationException("2D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
throw new InvalidOperationException("Barcode writing is locked");
var engine = new BarcodeEngine();
using Leadtools;
using Leadtools.Barcode;
RasterSupport.SetLicense(
@"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
"your-developer-key-here");
if (RasterSupport.KernelExpired)
throw new InvalidOperationException("LEADTOOLS license has expired");
if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
throw new InvalidOperationException("1D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
throw new InvalidOperationException("2D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
throw new InvalidOperationException("Barcode writing is locked");
var engine = new BarcodeEngine();
Imports Leadtools
Imports Leadtools.Barcode
RasterSupport.SetLicense("C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC", "your-developer-key-here")
If RasterSupport.KernelExpired Then
Throw New InvalidOperationException("LEADTOOLS license has expired")
End If
If RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) Then
Throw New InvalidOperationException("1D barcode reading is locked")
End If
If RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) Then
Throw New InvalidOperationException("2D barcode reading is locked")
End If
If RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) Then
Throw New InvalidOperationException("Barcode writing is locked")
End If
Dim engine As New BarcodeEngine()
Dieses dateibasierte Modell stammt aus der Zeit vor modernen Systemen zur Geheimnisverwaltung. Die .LIC-Datei muss in jeder Umgebung, in der die Anwendung läuft, bereitgestellt werden: Entwicklerrechner, CI-Build-Agents, Staging-Server und Produktionshosts.
IronBarcode Ansatz
Die Lizenzinitialisierung von IronBarcode besteht aus einer einzigen Zeile:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dieser Schlüssel kann aus einer Umgebungsvariablen, einer Konfigurationsdatei oder einem Geheimnismanager stammen – überall dort, wo eine Zeichenkette herkommen kann. Es gibt keine Datei zu suchen, keine Ablaufprüfung durchzuführen und keine Funktionssperre zu überprüfen. Für Lizenz-Einrichtung und Bereitstellungsoptionen deckt die Dokumentation alle Muster ab: Umgebungsvariablen, appsettings.json, Azure Key Vault und mehr.
Docker und Containerbereitstellung
Der Unterschied in der Lizenzarchitektur wird beim Schreiben einer Dockerfile konkret.
LEADTOOLS-Ansatz
LEADTOOLS-Docker-Bereitstellung erfordert das Kopieren der .LIC-Datei in das Container-Image oder das Montieren zur Laufzeit als Volume:
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY publish/ .
# The license file must be physically present in the container
COPY LEADTOOLS.LIC /app/license/LEADTOOLS.LIC
ENV LEADTOOLS_LICENSE_PATH=/app/license/LEADTOOLS.LIC
ENV LEADTOOLS_DEVELOPER_KEY=your-developer-key
ENTRYPOINT ["dotnet", "YourApp.dll"]
Dieser Ansatz hat Folgekomplikationen. Das Rotieren oder Widerrufen eines Lizenzschlüssels erfordert das Neuerstellen des Images oder das erneute Einbinden des Volumes. Die CI/CD-Pipeline muss entweder die .LIC-Datei einchecken oder sie zur Build-Zeit aus einem base64-verschlüsselten Geheimnis dekodieren. Kubernetes Geheimnisse, die für Schlüssel-Wert-Zeichenfolgenpaare entwickelt wurden, müssen jetzt Dateiinhalte speichern. Teams, die mit kurzlebigen Containern arbeiten, müssen das Problem der Dateibereitstellung auf jedem neuen Knoten lösen.
IronBarcode Ansatz
IronBarcode benötigt keine Datei im Container:
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY publish/ .
ENV IRONBARCODE_LICENSE=your-license-key
ENTRYPOINT ["dotnet", "YourApp.dll"]
Das Modell der Umgebungsvariablen funktioniert nativ mit Docker Secrets, Kubernetes Secrets, AWS Secrets Manager, Azure Key Vault und HashiCorp Vault – also mit jedem System, das eine Zeichenkette in die Umgebung eines Containers einfügen kann. Es gibt einen vollständigen Docker- und Linux-Bereitstellungsleitfaden, der sowohl Alpine- als auch Debian-Basisimages abdeckt.
Barcode-Lesung
LEADTOOLS-Ansatz
LEADTOOLS-Lesen erfordert die Erstellung einer RasterCodecs-Instanz, um das Bild zu laden, einer BarcodeEngine-Instanz, um es zu scannen, und eines expliziten Arrays von BarcodeSymbology-Werten, das angibt, nach welchen Formaten gesucht werden soll. Wird eine Symbologie aus dem Array weggelassen, erkennt LEADTOOLS Barcodes dieses Typs nicht:
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
using var codecs = new RasterCodecs();
using var image = codecs.Load(imagePath);
var engine = new BarcodeEngine();
var symbologies = new[]
{
BarcodeSymbology.Code128,
BarcodeSymbology.QR,
BarcodeSymbology.DataMatrix,
BarcodeSymbology.EAN13,
BarcodeSymbology.UPCA
};
var barcodes = engine.Reader.ReadBarcodes(
image,
LogicalRectangle.Empty,
0,
symbologies);
return barcodes.Select(b => b.Value).ToArray();
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
using var codecs = new RasterCodecs();
using var image = codecs.Load(imagePath);
var engine = new BarcodeEngine();
var symbologies = new[]
{
BarcodeSymbology.Code128,
BarcodeSymbology.QR,
BarcodeSymbology.DataMatrix,
BarcodeSymbology.EAN13,
BarcodeSymbology.UPCA
};
var barcodes = engine.Reader.ReadBarcodes(
image,
LogicalRectangle.Empty,
0,
symbologies);
return barcodes.Select(b => b.Value).ToArray();
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs
Dim barcodes As BarcodeData()
Using codecs As New RasterCodecs()
Using image As RasterImage = codecs.Load(imagePath)
Dim engine As New BarcodeEngine()
Dim symbologies As BarcodeSymbology() = {
BarcodeSymbology.Code128,
BarcodeSymbology.QR,
BarcodeSymbology.DataMatrix,
BarcodeSymbology.EAN13,
BarcodeSymbology.UPCA
}
barcodes = engine.Reader.ReadBarcodes(
image,
LogicalRectangle.Empty,
0,
symbologies)
End Using
End Using
Return barcodes.Select(Function(b) b.Value).ToArray()
IronBarcode Ansatz
IronBarcode erkennt automatisch Formate in allen über 50 unterstützten Symbologien. Der Dateipfad wird direkt übergeben; Es wird keine Bildladeschicht oder Symbolisierungsmatrix benötigt:
using IronBarCode;
var results = BarcodeReader.Read(imagePath);
return results.Select(r => r.Value).ToArray();
using IronBarCode;
var results = BarcodeReader.Read(imagePath);
return results.Select(r => r.Value).ToArray();
Imports IronBarCode
Dim results = BarcodeReader.Read(imagePath)
Return results.Select(Function(r) r.Value).ToArray()
Weitere Details zu Leseoptionen, der Abstimmung von Geschwindigkeit und Genauigkeit sowie dem Umgang mit schwierigen Bildern finden Sie im Leitfaden zum Lesen von Barcodes aus Bildern, der die gesamte API abdeckt.
Barcode-Erstellung
LEADTOOLS-Ansatz
Die Barcodeerzeugung von LEADTOOLS erfordert die Erstellung eines BarcodeData-Objekts mit Symbologie, Wert und Begrenzungen - dann die Erstellung einer leeren RasterImage mit expliziten Pixeldimensionen, Farbtiefe, Byte-Reihenfolge und Blickwinkel - dann Füllen mit einem weißen Hintergrund mit FillCommand - dann Aufrufen von engine.Writer.WriteBarcode() - dann Speichern mit RasterCodecs. Das sind fünf verschiedene Operationen über mehrere Objekttypen hinweg:
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
var engine = new BarcodeEngine();
var barcodeData = new BarcodeData(BarcodeSymbology.Code128)
{
Value = data,
Bounds = new LeadRect(0, 0, 400, 100)
};
using var image = new RasterImage(
RasterMemoryFlags.Conventional,
400, 100, 24,
RasterByteOrder.Bgr,
RasterViewPerspective.TopLeft,
null, IntPtr.Zero, 0);
new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, barcodeData, null);
using var codecs = new RasterCodecs();
codecs.Save(image, outputPath, RasterImageFormat.Png, 0);
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
var engine = new BarcodeEngine();
var barcodeData = new BarcodeData(BarcodeSymbology.Code128)
{
Value = data,
Bounds = new LeadRect(0, 0, 400, 100)
};
using var image = new RasterImage(
RasterMemoryFlags.Conventional,
400, 100, 24,
RasterByteOrder.Bgr,
RasterViewPerspective.TopLeft,
null, IntPtr.Zero, 0);
new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, barcodeData, null);
using var codecs = new RasterCodecs();
codecs.Save(image, outputPath, RasterImageFormat.Png, 0);
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs
Dim engine As New BarcodeEngine()
Dim barcodeData As New BarcodeData(BarcodeSymbology.Code128) With {
.Value = data,
.Bounds = New LeadRect(0, 0, 400, 100)
}
Using image As New RasterImage(RasterMemoryFlags.Conventional, 400, 100, 24, RasterByteOrder.Bgr, RasterViewPerspective.TopLeft, Nothing, IntPtr.Zero, 0)
Dim fillCommand As New FillCommand(RasterColor.White)
fillCommand.Run(image)
engine.Writer.WriteBarcode(image, barcodeData, Nothing)
Using codecs As New RasterCodecs()
codecs.Save(image, outputPath, RasterImageFormat.Png, 0)
End Using
End Using
IronBarcode Ansatz
IronBarcode übernimmt die Bilderstellung, das Ausfüllen des Hintergrunds und die Kodierung intern:
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng(outputPath);
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng(outputPath);
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng(outputPath)
Für die Erstellung von Barcode-Bildern bietet die IronBarcode API Styling, Ränder, Drehung und Formatkonvertierung über eine flüssige Kette anstelle einer Reihe imperativer Setup-Objekte.
API-Mapping-Referenz
| LEADTOOLS BarCode | IronBarcode | Notizen |
|---|---|---|
RasterSupport.SetLicense(path, key) |
IronBarCode.License.LicenseKey = "key" |
Nur Schlüssel – keine Datei |
RasterSupport.KernelExpired |
(removed) | Keine Ablaufprüfung erforderlich |
RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) |
(removed) | Alle Funktionen enthalten |
RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) |
(removed) | Alle Funktionen enthalten |
RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) |
(removed) | Alle Funktionen enthalten |
new BarcodeEngine() |
Statisch – keine Instanz | BarcodeReader, BarcodeWriter sind statisch |
new RasterCodecs() |
(removed) | Dateipfad direkt übergeben |
codecs.Load(imagePath) |
(removed) | Dateipfad direkt übergeben |
engine.Reader.ReadBarcodes(image, rect, 0, symbologies) |
BarcodeReader.Read(imagePath) |
Automatische Symbolerkennung |
BarcodeData.Value |
result.Value |
Gleicher Eigenschaftsname |
BarcodeData.Symbology |
result.Format |
Immobilie umbenannt |
new BarcodeData(BarcodeSymbology.Code128) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) |
Flüssige Erstellung |
BarcodeSymbology.Code128 |
BarcodeEncoding.Code128 |
Namensraumänderung |
BarcodeSymbology.QR |
BarcodeEncoding.QRCode |
Namensänderung |
BarcodeSymbology.DataMatrix |
BarcodeEncoding.DataMatrix |
Gleicher Name |
BarcodeSymbology.PDF417 |
BarcodeEncoding.PDF417 |
Gleicher Name |
BarcodeSymbology.EAN13 |
BarcodeEncoding.EAN13 |
Gleicher Name |
BarcodeSymbology.UPCA |
BarcodeEncoding.UPCA |
Gleicher Name |
engine.Writer.WriteBarcode(image, data, null) + codecs.Save(...) |
.SaveAsPng(path) |
Eine Methodenkette |
new RasterImage(...) + new FillCommand(RasterColor.White).Run(image) |
(removed) | Intern bei IronBarcode |
Wenn Teams einen Wechsel von LEADTOOLS BarCodezu IronBarcode erwägen
Container- und Cloud-Bereitstellung
Teams, die Workloads in Docker-, Kubernetes- oder serverlose Umgebungen migrieren, stoßen auf das dateibasierte Lizenzierungsmodell als konkretes operatives Problem. Jede neue Containerinstanz, jede neue Cloud-Region und jede neue Umgebung muss die .LIC-Datei bereitgestellt und zugänglich haben, bevor die Anwendung starten wird. Geheimnisverwaltungssysteme, die für Geheimnisse mit Zeichenkettenwerten ausgelegt sind, können dateibasierte Artefakte nicht problemlos verarbeiten. Teams, die die Konfiguration standardmäßig über die Einbindung von Umgebungsvariablen durchführen, stellen fest, dass LEADTOOLS einen separaten Bereitstellungsschritt erfordert, der außerhalb ihres normalen Secrets-Workflows liegt. Wenn das Bereitstellungsvolumen wächst – automatische Skalierung, Blue-Green-Bereitstellung, regionsübergreifende Replikation – steigen auch die Betriebskosten für die Dateibereitstellung.
SDK-Footprint und Abhängigkeitsmanagement
Wenn das Lesen oder Generieren von Barcodes die primäre oder einzige Anforderung eines Dienstes ist, stellen die Installation von LEADTOOLS aus fünf Paketen und die Abhängigkeit von der MSVC++ 2017 Runtime einen Overhead dar, der sich auf die Größe des Container-Images, die Kaltstartlatenz in serverlosen Funktionen und die Build-Zeiten in CI/CD-Pipelines auswirkt. Teams, die leichtgewichtige Microservices oder Lambda-ähnliche Funktionen entwickeln, stellen fest, dass die Einbindung eines kompletten Imaging-SDKs zur Erfüllung einer barcodespezifischen Anforderung eine Abhängigkeitsfläche schafft, die sich in Code-Reviews und Architektur-Reviews nur schwer rechtfertigen lässt. Wenn für ein zukünftiges Plattform-Upgrade das Testen einer Änderung der nativen Laufzeitabhängigkeit erforderlich ist, fällt diese Aufgabe dem Team zu, das den Dienst betreut.
Preistransparenz
Entwicklungsteams, die ein Projekt vor Beginn der Entwicklung budgetieren müssen, können sich anhand der veröffentlichten Preisliste von LEADTOOLS kein vollständiges Kostenbild verschaffen. Entwicklungslizenzen beginnen bei etwa 1.469 USD pro Entwickler pro Jahr, aber Lizenzkosten für die Produktion von Serveranwendungen werden gesondert über den Vertrieb angeboten. Ein Team von fünf Entwicklern, die auf drei Produktionsservern arbeiten, muss ein individuelles Angebot einholen, bevor es bestätigen kann, dass LEADTOOLS in sein Budget passt. Teams, die Beschaffungsentscheidungen lieber auf Basis veröffentlichter Preise treffen – Optionen vergleichen, interne Genehmigungen einholen oder mehrjährige Budgets planen –, stellen fest, dass dieses Modell ein Verkaufsgespräch erfordert, bevor die Bewertung abgeschlossen ist.
Anforderungen für ausschließliche Barcode-Nutzung
Anwendungen, die Barcodes lesen oder generieren müssen, ohne OCR, DICOM-Bildverarbeitung, Dokumentenannotation oder andere Funktionen der LEADTOOLS- Suite zu benötigen, zahlen für eine breitere Plattform, als ihre Anforderungen erfordern. Der Integrationswert von LEADTOOLS – die Möglichkeit, Daten zwischen den Modulen für OCR, Barcode und Dokumentenverarbeitung auszutauschen – ist real, kommt aber nur dann zum Tragen, wenn mehrere Funktionen aus dieser Suite aktiv genutzt werden. Wenn die Anforderung auf das Scannen von Barcodes in einer Web-API oder die Generierung in einer Dokumentenverarbeitungspipeline beschränkt ist, erfüllt eine spezialisierte Barcode-Bibliothek die Anforderung direkt, ohne die Last einer umfassenden Bildverarbeitungsplattform mit sich zu tragen.
Gemeinsame Überlegungen zur Migration
Ersatz für die Lizenzinitialisierung
Der gesamte Initialisierungsblock von LEADTOOLS – Dateipfad, Ablaufprüfung und Überprüfung der Sperre pro Funktion – wird durch eine einzige Zeile ersetzt. Der IronBarcode Lizenzschlüssel kann in jedem Geheimnisverwaltungssystem gespeichert werden, das Zeichenketten speichert.
// Replace the entire LEADTOOLS initialization block with:
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
// Replace the entire LEADTOOLS initialization block with:
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
' Replace the entire LEADTOOLS initialization block with:
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
Docker-Umgebungsvariablenmuster
Die COPY LEADTOOLS.LIC-Zeile in jeder Dockerfile wird vollständig entfernt. Die Lizenz wird zur Laufzeit über eine Umgebungsvariable bereitgestellt, die mit allen gängigen Mechanismen zur Geheimnisinjektion kompatibel ist:
# Remove: COPY LEADTOOLS.LIC /app/license/LEADTOOLS.LIC
# Remove: ENV LEADTOOLS_LICENSE_PATH=/app/license/LEADTOOLS.LIC
# Add:
ENV IRONBARCODE_LICENSE=your-license-key
Paketabholung
Die fünf LEADTOOLS-Pakete – und der optionale PDF-Codec – werden entfernt und durch ein einziges Paket ersetzt:
dotnet remove package Leadtools.Barcode
dotnet remove package Leadtools
dotnet remove package Leadtools.Codecs
dotnet remove package Leadtools.Codecs.Png
dotnet remove package Leadtools.Codecs.Jpeg
# If added:
dotnet remove package Leadtools.Codecs.Pdf
dotnet add package BarCode
dotnet remove package Leadtools.Barcode
dotnet remove package Leadtools
dotnet remove package Leadtools.Codecs
dotnet remove package Leadtools.Codecs.Png
dotnet remove package Leadtools.Codecs.Jpeg
# If added:
dotnet remove package Leadtools.Codecs.Pdf
dotnet add package BarCode
Zusätzliche IronBarcode Funktionen
Über die in den vorangegangenen Abschnitten beschriebenen Funktionen hinaus bietet IronBarcode die folgenden Features, die für gängige .NET -Barcode-Szenarien relevant sind:
- PDF Barcode Extraction: Lesen Sie Barcodes aus mehrseitigen PDF-Dokumenten mit automatischer Seiteniteration und
PageNumber-Berichterstattung für jedes Ergebnis - keine Seiten-Schleife erforderlich. - ML-basierte Fehlerkorrektur : Die maschinelle Lernverfahren zur Bildvorverarbeitung verbessern die Lesegenauigkeit bei beschädigten, kontrastarmen oder gedrehten Barcode-Bildern ohne zusätzliche Konfiguration.
- Asynchrone Batch-Verarbeitung:
BarcodeReader.ReadAsync()unterstützt asynchrones Lesen, was eine hochdurchsatzfähige Batch-Verarbeitung ermöglicht, ohne Threads zu blockieren. - QR-Code-Logo-Branding:
QRCodeWriterunterstützt das Einbetten eines Logobildes in der Mitte eines QR-Codes mit einem einzigen Methodenaufruf und verwendet eingebaute Fehlerkorrektur, um die Scannbarkeit beizubehalten. - SVG und HTML Output:
BarcodeWriterkann generierte Barcodes als skalierbare SVG-Dateien oder als Inline-HTML-Elemente ausgeben, zusätzlich zu Rasterbildformaten. - BarcodeReaderOptions Tuning : Lesegeschwindigkeit, erwartete Symbologie-Hinweise, Mehrfach-Barcode-Erkennung und Bildvorverarbeitung können pro Lesevorgang konfiguriert werden, ohne den globalen Zustand zu beeinflussen.
.NET-Kompatibilität und Zukunftsfähigkeit
IronBarcode zielt auf .NET Standard 2.0ab und bietet Kompatibilität mit .NET Framework 4.6.2 und höher, .NET 5, .NET 6, .NET 7, .NET 8 und .NET 9. Die Bibliothek hat keine plattformspezifischen nativen Laufzeitvoraussetzungen und ermöglicht so die Bereitstellung unter Windows, Linux und macOS ohne zusätzliche Bereitstellungsschritte. Mit der fortschreitenden Einführung von .NET 10 bis zum Jahr 2026 gewährleistet der regelmäßige Veröffentlichungszyklus von IronBarcode die Kompatibilität mit aktuellen und zukünftigen .NET Versionen. Das statische API-Design und das Einzelpaket-Vertriebsmodell bleiben über alle Releases hinweg stabil, sodass Versions-Upgrades keine Änderungen am Initialisierungscode der Anwendung oder an der Bereitstellungskonfiguration erfordern.
Abschluss
LEADTOOLS Barcode und IronBarcode repräsentieren unterschiedliche Punkte im Designraum for .NET -Barcode-Bibliotheken. LEADTOOLS ist ein Modul innerhalb eines 30 Jahre alten umfassenden Imaging-SDKs mit einer dateibasierten Lizenzierungsarchitektur, einer Installation aus mehreren Paketen und einem veralteten API-Design, das die technischen Normen der Ära widerspiegelt, in der es entwickelt wurde. IronBarcode ist eine speziell für modernes .NET entwickelte Barcode-Bibliothek mit einer Installation aus einem einzigen Paket, einer Lizenzierung über einen String-Schlüssel und einer statischen API, die keine Initialisierungsobjekte erfordert.
LEADTOOLS Barcode ist die richtige Wahl, wenn eine Anwendung LEADTOOLS bereits für andere Funktionen nutzt – OCR, DICOM-Bildverarbeitung, Dokumentenannotation oder Formularerkennung. In diesen Kontexten erweitert die Integration von Barcode-Funktionalität über dasselbe SDK eine bestehende Investition, ohne dass ein neuer Anbieter oder eine neue Lizenzvereinbarung erforderlich ist. Unternehmen mit bestehenden LEADTOOLS- Enterprise können Barcode-Funktionen zu geringen Grenzkosten nutzen. Für Anwendungen, die den vollen Funktionsumfang der LEADTOOLS-Bildverarbeitungsplattform benötigen, bietet die Integration über verschiedene Module hinweg einen echten Mehrwert.
IronBarcode ist die richtige Wahl, wenn das Lesen oder Generieren von Barcodes die primäre oder einzige Anforderung an einen Dienst ist, wenn die Anwendung in Containern oder Cloud-nativer Infrastruktur bereitgestellt wird oder wenn das Team vor Beginn der Entwicklung eine vorhersehbare Preisgestaltung benötigt. Das Installationsmodell mit einem einzigen Paket und das Lizenzierungsmodell mit Umgebungsvariablen entsprechen der Art und Weise, wie moderne .NET Dienste konfiguriert, bereitgestellt und skaliert werden. Die flüssige statische API reduziert den Initialisierungs- und Betriebscode, den die Barcode-Funktionalität erfordert.
Der praktische Unterschied zwischen den beiden Bibliotheken zeigt sich am deutlichsten in Einsatzszenarien. Wenn ein Team eine neue Umgebung hinzufügt, auf eine neue Cloud-Region skaliert oder eine Lizenzanmeldeinformation rotiert, verlangt IronBarcode die Aktualisierung einer Zeichenkette in einem Geheimnismanager. LEADTOOLS erfordert die Bereitstellung einer Datei. Diese Unterscheidung ist keine Kritik an der LEADTOOLS-Entwicklung, sondern beschreibt lediglich die jeweiligen Anforderungen der Architektur. Teams, die eine ehrliche Bewertung vornehmen, sollten diese Beschreibung direkt auf ihr Bereitstellungsmodell anwenden und entscheiden, welches Modell am besten passt.
Häufig gestellte Fragen
Was ist LEADTOOLS BarCode?
LEADTOOLS BarCode ist eine .NET Barcode-Bibliothek zum Erzeugen und Lesen von Barcodes in C#-Anwendungen. Sie ist eine von mehreren Alternativen, die Entwickler bei der Auswahl einer Barcode-Lösung for .NET-Projekte in Betracht ziehen.
Was sind die Hauptunterschiede zwischen LEADTOOLS BarCode und IronBarcode?
IronBarcode verwendet eine statische, zustandslose API, die keine Instanzverwaltung erfordert, während LEADTOOLS BarCode in der Regel eine Instanzerstellung und -konfiguration vor der Verwendung erfordert. IronBarcode bietet außerdem native PDF-Unterstützung, automatische Formaterkennung und Single-Key-Lizenzierung in allen Umgebungen.
Ist IronBarcode einfacher zu lizenzieren als LEADTOOLS BarCode?
IronBarcode verwendet einen einzigen Lizenzschlüssel, der sowohl die Entwicklungs- als auch die Produktionsbereitstellung abdeckt. Dies vereinfacht CI/CD-Pipelines und Docker-Konfigurationen im Vergleich zu Lizenzierungssystemen, die SDK-Schlüssel von Laufzeitschlüsseln trennen.
Unterstützt IronBarcode alle Barcode-Formate, die auch LEADTOOLS Barcode unterstützt?
IronBarcode unterstützt über 30 Barcode-Symbologien, darunter QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 und viele mehr. Die automatische Formaterkennung bedeutet, dass keine explizite Formataufzählung erforderlich ist.
Unterstützt IronBarcode das native Lesen von PDF-Barcodes?
Ja, IronBarcode liest Barcodes direkt aus PDF-Dateien mit BarcodeReader.Read("document.pdf"), ohne dass eine separate PDF-Rendering-Bibliothek erforderlich ist. Die seitenweisen Ergebnisse umfassen Seitenzahl, Barcodeformat, Wert und Konfidenzwert.
Wie handhabt IronBarcode die Stapelverarbeitung im Vergleich zu LEADTOOLS BarCode?
Die statischen Methoden von IronBarcode sind zustandslos und natürlich thread-sicher, was die direkte Verwendung von Parallel.ForEach ohne Instanzverwaltung pro Thread ermöglicht. Es gibt auf keiner Preisstufe eine Obergrenze für den Durchsatz.
Welche .NET Versionen werden von IronBarcode unterstützt?
IronBarcode unterstützt .NET Framework 4.6.2+, .NET Core 3.1 und .NET 5, 6, 7, 8 und 9 in einem einzigen NuGet-Paket. Zu den Zielplattformen gehören Windows x64/x86, Linux x64 und macOS x64/ARM.
Wie installiere ich IronBarcode in einem .NET-Projekt?
Installieren Sie IronBarcode über NuGet: Führen Sie "Install-Package IronBarCode" in der Paketmanager-Konsole oder "dotnet add package IronBarCode" in der CLI aus. Es sind keine zusätzlichen SDK-Installationsprogramme oder Laufzeitdateien erforderlich.
Kann ich IronBarcode vor dem Kauf testen, im Gegensatz zu LEADTOOLS?
Ja, der Testmodus von IronBarcode liefert vollständige dekodierte Barcodewerte - nur die erzeugten Ausgabebilder erhalten ein Wasserzeichen. Sie können die Lesegenauigkeit an Ihren eigenen Dokumenten testen, bevor Sie sich zum Kauf verpflichten.
Was ist der Preisunterschied zwischen LEADTOOLS BarCode und IronBarcode?
Die Preise für IronBarcode beginnen bei 749 US-Dollar für eine unbefristete Einzelentwicklerlizenz für Entwicklung und Produktion. Preisdetails und Volumenoptionen sind auf der IronBarcode-Lizenzierungsseite verfügbar. Es ist keine separate Runtime-Lizenz erforderlich.
Ist es einfach, von LEADTOOLS BarCode zu IronBarcode zu migrieren?
Bei der Migration von LEADTOOLS Barcode zu IronBarcode geht es in erster Linie darum, instanzbasierte API-Aufrufe durch die statischen Methoden von IronBarcode zu ersetzen, Lizenzierungs-Boilerplate zu entfernen und die Namen der Ergebniseigenschaften zu aktualisieren. Bei den meisten Migrationen wird eher Code reduziert als hinzugefügt.
Kann IronBarcode QR-Codes mit Logos generieren?
Ja. QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") bettet ein Markenbild nativ in einen QR-Code mit konfigurierbarer Fehlerkorrektur ein. Farbige QR-Codes werden auch über ChangeBarCodeColor() unterstützt.

