QRCoder.NET vs IronBarcode: C# BarCode Bibliothek Vergleich
QRCoder kann eine Sache außergewöhnlich gut: Es generiert QR-Codes in reinem C# ohne externe Abhängigkeiten, unter einer uneingeschränkten MIT-Lizenz und mit einer durchdachten API, die alles von der Standard-Payload-Formatierung bis hin zu einer Vielzahl von Ausgaberenderern abdeckt. Mit über 8 Millionen NuGet Downloads hat es sich seinen Ruf redlich verdient. Der Vergleich mit IronBarcode ist keine Qualitätsbeurteilung – es geht um die Frage des Anwendungsbereichs. IronBarcode unterstützt über 50 Barcode-Formate, kann diese lesen und schreiben und lässt sich über eine einheitliche API in PDF-Dokumente integrieren. Für Teams, deren Anforderungen über die QR-Generierung hinausgehen, ist es unerlässlich zu verstehen, wo das Design von QR-Code absichtlich aufhört.
QR-Code verstehen
QRCoder wurde 2013 von Raffael Herrmann entwickelt und wird nun von Shane32 weiterentwickelt. Die Bibliothek ist vollständig in C# geschrieben und hat keinerlei externe Abhängigkeiten – keine Versionskonflikte mit SkiaSharp, keine Probleme mit kommerziellen ImageSharp-Lizenzen, keine nativen Binärdateien, die bereitgestellt werden müssen. Es läuft auf jeder Plattform, auf der .NET läuft.
Die MIT-Lizenz ist tatsächlich uneingeschränkt. Im Gegensatz zu einigen populären Bibliotheken, bei denen eine Umsatzschwelle die Pflicht zur kommerziellen Lizenzierung auslöst, enthält QR-Code keine versteckten kommerziellen Beschränkungen. Diese Unterscheidung ist wichtig für Teams, die kommerzielle Anwendungen entwickeln.
Die Klasse PayloadGenerator bietet einen erheblichen praktischen Nutzen: Sie verarbeitet gängige QR-Code-Datenformate – WLAN-Zugangsdaten, Visitenkarten (vCard), Kalenderereignisse, SMS-Nachrichten und Geolokalisierungspunkte – sodass Entwickler sich nicht das jeweilige Datenformat für jeden Standard merken müssen. Die Vielfalt der Renderer ist auch bei verschiedenen Ausgabetypen groß.
Wichtigste architektonische Merkmale:
- Keine externen Abhängigkeiten: Reines C# ohne Laufzeitumgebungen von Drittanbietern, was die Bereitstellung in containerisierten oder eingeschränkten Umgebungen vereinfacht.
- MIT-Lizenz ohne Umsatzbeschränkungen: Wirklich kostenlos für die kommerzielle Nutzung ohne Umsatzschwellen oder kommerzielle Auslöser
- PayloadGenerator-Hilfsfunktionen: Integrierte Formatierer für WiFi, vCard, CalendarEvent, SMS, Geo und andere gängige QR-Payload-Standards
- Renderer-Vielfalt: PNG-Bytes, SVG-String, ASCII-Art, Base64, BMP und diverse weitere Ausgabeformate
- Vollständige Fehlerkorrektursteuerung: Alle vier ECC-Stufen (L, M, Q, H) sind verfügbar.
- Unterstützung für Micro-QR-Codes: Kompakte QR-Variante für Etiketten mit begrenztem Platzangebot, nicht in allen Barcode-Bibliotheken verfügbar
- QR-Code-basiertes Design: Die API-Schnittstelle dient ausschließlich der QR-Code-Generierung – keine 1D-Formate, keine DataMatrix, kein Barcode-Lesen
Das QR-Code-Design
QRCoder trennt die Datenerzeugung vom Rendering. Ein QRCodeGenerator erzeugt ein QRCodeData Zwischenobjekt, das dann an eine Rendererklasse übergeben wird. Dieses Muster ermöglicht eine präzise Kontrolle über das Ausgabeformat, erfordert jedoch zusätzliche Objekte:
using QRCoder;
using System.IO;
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
"https://example.com",
QRCodeGenerator.ECCLevel.M
);
// PNG bytes via PngByteQRCode
var pngQR = new PngByteQRCode(qrCodeData);
byte[] pngBytes = pngQR.GetGraphic(20); // 20px per module
File.WriteAllBytes("qr.png", pngBytes);
// SVG string via SvgQRCode
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("qr.svg", svgContent);
using QRCoder;
using System.IO;
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
"https://example.com",
QRCodeGenerator.ECCLevel.M
);
// PNG bytes via PngByteQRCode
var pngQR = new PngByteQRCode(qrCodeData);
byte[] pngBytes = pngQR.GetGraphic(20); // 20px per module
File.WriteAllBytes("qr.png", pngBytes);
// SVG string via SvgQRCode
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("qr.svg", svgContent);
Imports QRCoder
Imports System.IO
Dim qrGenerator As New QRCodeGenerator()
Dim qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
' PNG bytes via PngByteQRCode
Dim pngQR As New PngByteQRCode(qrCodeData)
Dim pngBytes As Byte() = pngQR.GetGraphic(20) ' 20px per module
File.WriteAllBytes("qr.png", pngBytes)
' SVG string via SvgQRCode
Dim svgContent As String = New SvgQRCode(qrCodeData).GetGraphic(10)
File.WriteAllText("qr.svg", svgContent)
Die Methode QRCodeGenerator.CreateQrCode ist der einzige Einstiegspunkt für die Codeerstellung – es gibt keine CreateCode128, keine CreateDataMatrix, keine CreateEAN13. Die Bibliothek hält sich voll und ganz an ihren vorgesehenen Zweck.
IronBarcode verstehen
IronBarcode ist eine kommerzielle .NET Barcode-Bibliothek von Iron Software , die die Generierung und das Lesen von über 50 Barcode-Formaten über eine einzige, konsistente API ermöglicht. Anstatt separate Bibliotheken für verschiedene Formatfamilien zu pflegen, stellt IronBarcode alle Formate über BarcodeEncoding Parameter an denselben statischen BarcodeWriter und BarcodeReader Einstiegspunkten bereit.
Die Bibliothek verwendet ein statisches API-Modell: BarcodeWriter.CreateBarcode benötigt keine Instanzeinrichtung, und BarcodeReader.Read akzeptiert Dateipfade, Streams, Byte-Arrays und System.Drawing.Bitmap Objekte mit automatischer Multi-Format-Erkennung. Die Unterstützung für PDF-Dokumente – sowohl das Auslesen von Barcodes aus PDF-Seiten als auch das Einbetten von Barcodes in PDFs – ist ohne externe Abhängigkeiten enthalten.
Hauptmerkmale:
- Über 50 Barcode-Formate: QR-Code, Code 128, EAN-13, UPC-A, DataMatrix, PDF417, Aztec, MaxiCode und viele mehr über einen einzigen
BarcodeEncodingParameter - Integrierte Lese-API:
BarcodeReader.Readverarbeitet Bilder, PDFs und Streams mit automatischer Formaterkennung – keine zweite Bibliothek erforderlich - QR-Code-Anpassung: Logoeinbettung, Farbänderungen und Steuerung von Ruhezonen über
QRCodeWriterMethoden - PDF-Integration: Barcodes von PDF-Seiten lesen und Barcodes in bestehende PDF-Dokumente einfügen
- Statisches API-Modell: Keine Generatorinstanz erforderlich —
BarcodeWriterist eine statische Klasse - Kommerzielle Lizenz: Ab 749 US-Dollar für eine Einzelentwicklerlizenz ohne Formatbeschränkungen
Funktionsvergleich
Die folgende Tabelle fasst die grundlegenden Unterschiede zwischen QR-Code und IronBarcode zusammen:
| Feature | QR-Code | IronBarcode |
|---|---|---|
| QR-Code-Generierung | Ja – ausgezeichnet. | Ja |
| 1D-Barcode-Generierung | Nein | Ja (über 30 Formate) |
| Andere 2D-Formate | Nein | Ja (DataMatrix, PDF417, aztekisch usw.) |
| Barcode-Lesung | Nein | Ja – automatische Erkennung |
| PDF-Unterstützung | Nein | Ja – lesen und abstempeln |
| Lizenz | MIT – wirklich frei | Gewerbe (749 $ Einzelentwickler) |
Detaillierter Funktionsvergleich
| Feature | QR-Code | IronBarcode |
|---|---|---|
| Generation | ||
| QR-Code | Ja | Ja |
| Mikro-QR | Ja | Nein |
| Code 128 | Nein | Ja |
| EAN-13 / UPC-A | Nein | Ja |
| DataMatrix | Nein | Ja |
| PDF417 | Nein | Ja |
| aztekisch | Nein | Ja |
| Gesamtformate | 1 | 50+ |
| QR-Code-Funktionen | ||
| Fehlerkorrektur (L/M/Q/H) | Ja | Ja |
| Logoeinbettung | Ja | Ja |
| Farbanpassung | Ja | Ja |
| SVG-Ausgabe | Ja | Ja |
| ASCII-Art-Ausgabe | Ja | Nein |
| Base64-Ausgabe | Ja | Nein |
| PayloadGenerator-Helfer | Ja | Nein – manuelle Saitenkonstruktion |
| Lektüre | ||
| Dekodierung aus dem Bild | Nein | Ja |
| Aus PDF dekodieren | Nein | Ja |
| Automatische Formaterkennung | Nein | Ja |
| Integration | ||
| PDF-Barcode-Stempeln | Nein | Ja |
| Keine externen Abhängigkeiten | Ja | In sich geschlossen |
| Lizenzierung | ||
| Lizenztyp | MIT | Kommerziell |
| Einnahmenbeschränkungen | Keine | Keine |
| Preisgestaltung pro Format | Keine | Keine |
QR-Code-Generierung
Beide Bibliotheken generieren QR-Codes, aber ihre APIs spiegeln unterschiedliche Designphilosophien in der Art und Weise wider, wie der Generierungsschritt und der Rendering-Schritt miteinander in Beziehung stehen.
QRCoder-Ansatz
QRCoder verwendet ein zweiphasiges Muster: QRCodeGenerator.CreateQrCode erzeugt ein QRCodeData Zwischenobjekt, das die Daten und den Fehlerkorrekturgrad kodiert, und eine separate Renderer-Klasse konvertiert dieses Zwischenobjekt in das gewünschte Ausgabeformat. Der ECC-Level ist ein erforderlicher Parameter ohne Standardwert – Entwickler müssen ihn explizit auswählen:
using QRCoder;
using System.IO;
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
"https://example.com",
QRCodeGenerator.ECCLevel.M
);
var qrCode = new PngByteQRCode(qrCodeData);
byte[] pngBytes = qrCode.GetGraphic(20); // pixels per module
File.WriteAllBytes("qr.png", pngBytes);
using QRCoder;
using System.IO;
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
"https://example.com",
QRCodeGenerator.ECCLevel.M
);
var qrCode = new PngByteQRCode(qrCodeData);
byte[] pngBytes = qrCode.GetGraphic(20); // pixels per module
File.WriteAllBytes("qr.png", pngBytes);
Imports QRCoder
Imports System.IO
Dim qrGenerator As New QRCodeGenerator()
Dim qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
Dim qrCode As New PngByteQRCode(qrCodeData)
Dim pngBytes As Byte() = qrCode.GetGraphic(20) ' pixels per module
File.WriteAllBytes("qr.png", pngBytes)
Dieses Muster hat den Vorteil, dass das qrCodeData-Objekt für mehrere Ausgabeformate wiederverwendet werden kann, ohne die Codedaten neu zu generieren. Zu den Renderer-Klassen gehören unter anderem PngByteQRCode, SvgQRCode, AsciiQRCode, Base64QRCode und BitmapByteQRCode.
IronBarcode Ansatz
IronBarcode fasst Generierung und Rendering zu einer flüssigen Kette in der statischen Klasse BarcodeWriter zusammen. Der Parameter BarcodeEncoding.QRCode wählt das Format aus, und Terminalmethoden wie SaveAsPng oder ToPngBinaryData bestimmen die Ausgabe:
using IronBarCode;
// Single fluent call — no intermediate objects
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.ResizeTo(400, 400)
.SaveAsPng("qr.png");
using IronBarCode;
// Single fluent call — no intermediate objects
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.ResizeTo(400, 400)
.SaveAsPng("qr.png");
Imports IronBarCode
' Single fluent call — no intermediate objects
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.ResizeTo(400, 400) _
.SaveAsPng("qr.png")
Für Fälle, die eine explizite Fehlerkorrektur erfordern, bietet die Klasse QRCodeWriter formatspezifische Optionen:
using IronBarCode;
var qr = QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Medium
);
qr.SaveAsPng("qr.png");
using IronBarCode;
var qr = QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Medium
);
qr.SaveAsPng("qr.png");
Imports IronBarCode
Dim qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium)
qr.SaveAsPng("qr.png")
Der IronBarcode 2D-Barcode-Erstellungsleitfaden deckt alle unterstützten 2D-Formate ab, einschließlich QR-Code, DataMatrix, PDF417und Aztec, und verwendet dafür denselben Einstiegspunkt BarcodeWriter.
QR-Code-Anpassung
Beide Bibliotheken unterstützen das Einbetten von Logos und das Ändern der Farben auf QR-Codes, unterscheiden sich jedoch in den erforderlichen Systemtypen.
QRCoder-Ansatz
Die Einbettung des QRCoder-Logos erfolgt über die Renderer-Klasse QRCode (die sich von PngByteQRCode unterscheidet), welche eine GetGraphic-Überladung bereitstellt, die eine System.Drawing.Bitmap-Überladung akzeptiert. Das bedeutet, dass der aufrufende Code direkt mit System.Drawing arbeiten muss, um die Logodatei zu laden:
using QRCoder;
using System.Drawing;
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
"https://example.com",
QRCodeGenerator.ECCLevel.H // High ECC required when logo occludes part of the code
);
var qrCode = new QRCode(qrCodeData);
var logoBitmap = new Bitmap("logo.png");
var qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap);
qrBitmap.Save("qr-logo.png", System.Drawing.Imaging.ImageFormat.Png);
using QRCoder;
using System.Drawing;
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
"https://example.com",
QRCodeGenerator.ECCLevel.H // High ECC required when logo occludes part of the code
);
var qrCode = new QRCode(qrCodeData);
var logoBitmap = new Bitmap("logo.png");
var qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap);
qrBitmap.Save("qr-logo.png", System.Drawing.Imaging.ImageFormat.Png);
Imports QRCoder
Imports System.Drawing
Dim qrGenerator As New QRCodeGenerator()
Dim qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H) ' High ECC required when logo occludes part of the code
Dim qrCode As New QRCode(qrCodeData)
Dim logoBitmap As New Bitmap("logo.png")
Dim qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap)
qrBitmap.Save("qr-logo.png", System.Drawing.Imaging.ImageFormat.Png)
Die Farbanpassung folgt einem ähnlichen Muster über die Parameter GetGraphic der Überladung darkColor und lightColor.
IronBarcode Ansatz
IronBarcode stellt das Einbetten von Logos und Farbänderungen als benannte Methoden im QRCodeWriter Ergebnisobjekt bereit. Die Methode AddBrandLogo akzeptiert einen Dateipfad, und ChangeBarCodeColor akzeptiert einen Color Wert:
using IronBarCode;
using System.Drawing;
// Logo embedding
var qr = QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-logo.png");
// Colour customisation
var coloredQr = QRCodeWriter.CreateQrCode("https://example.com", 500);
coloredQr.ChangeBarCodeColor(Color.DarkBlue);
coloredQr.SaveAsPng("colored-qr.png");
using IronBarCode;
using System.Drawing;
// Logo embedding
var qr = QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-logo.png");
// Colour customisation
var coloredQr = QRCodeWriter.CreateQrCode("https://example.com", 500);
coloredQr.ChangeBarCodeColor(Color.DarkBlue);
coloredQr.SaveAsPng("colored-qr.png");
Imports IronBarCode
Imports System.Drawing
' Logo embedding
Dim qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
qr.AddBrandLogo("logo.png")
qr.SaveAsPng("qr-logo.png")
' Colour customisation
Dim coloredQr = QRCodeWriter.CreateQrCode("https://example.com", 500)
coloredQr.ChangeBarCodeColor(Color.DarkBlue)
coloredQr.SaveAsPng("colored-qr.png")
Der Leitfaden zur Anpassung des QR-Code-Stils behandelt Logogröße, Farbkombinationen und die Steuerung von Ruhezonen im Detail.
Barcode-Lesung
Das Lesen von Barcodes stellt den größten Leistungsunterschied zwischen den beiden Bibliotheken dar.
QRCoder-Ansatz
QRCoder besitzt keine API zum Lesen von Barcodes. Die Klasse QRCodeGenerator und alle Renderer-Klassen dienen ausschließlich der Generierung. Es gibt keine Methode, einen QR-Code aus einem Bild, einer Datei oder einem Datenstrom zu dekodieren. Anwendungen, die sowohl QR-Codes generieren als auch lesen müssen, benötigen eine separate Bibliothek – typischerweise ZXing .NET – mit eigener API, eigenem Namensraum und eigenem Wartungszyklus:
// QR-Code has no reading API.
// These methods do not exist:
// qrGenerator.Decode("image.png");
// QRCodeReader.Read("image.png");
//
// A separate library (e.g., ZXing.Net) is required for decoding.
// QR-Code has no reading API.
// These methods do not exist:
// qrGenerator.Decode("image.png");
// QRCodeReader.Read("image.png");
//
// A separate library (e.g., ZXing.Net) is required for decoding.
' QR-Code has no reading API.
' These methods do not exist:
' qrGenerator.Decode("image.png")
' QRCodeReader.Read("image.png")
'
' A separate library (e.g., ZXing.Net) is required for decoding.
Dies ist eine bewusste Designentscheidung, kein Versehen – QR-Code ist explizit eine Generierungsbibliothek.
IronBarcode Ansatz
IronBarcode beinhaltet eine Lese-API im selben Paket. BarcodeReader.Read akzeptiert Bilddateien, PDF-Dateien, Streams und System.Drawing.Bitmap Objekte. Es erkennt Barcode-Formate automatisch, ohne dass der Aufrufer das zu suchende Format angeben muss, und gibt alle im Bild gefundenen Barcodes zurück:
using IronBarCode;
// Reading a QR code — no separate library required
var results = BarcodeReader.Read("qr.png");
foreach (var result in results)
{
Console.WriteLine(result.Text); // decoded value
Console.WriteLine(result.BarcodeType); // QRCode, Code128, EAN13, etc.
}
using IronBarCode;
// Reading a QR code — no separate library required
var results = BarcodeReader.Read("qr.png");
foreach (var result in results)
{
Console.WriteLine(result.Text); // decoded value
Console.WriteLine(result.BarcodeType); // QRCode, Code128, EAN13, etc.
}
Imports IronBarCode
' Reading a QR code — no separate library required
Dim results = BarcodeReader.Read("qr.png")
For Each result In results
Console.WriteLine(result.Text) ' decoded value
Console.WriteLine(result.BarcodeType) ' QRCode, Code128, EAN13, etc.
Next
Der Leitfaden zum Lesen von Barcodes aus Bildern umfasst das Lesen aus PDFs, mehrseitigen Dokumenten, Datenströmen sowie niedrig auflösenden oder verrauschten Bildern über denselben Eingabepunkt.
Formatumfang jenseits von QR
QRCoder-Ansatz
QRCoder generiert ausschließlich QR-Codes – dies ist so beabsichtigt. Die Methode QRCodeGenerator.CreateQrCode ist der einzige Einstiegspunkt für die Generierung, den die Bibliothek bereitstellt. Projekte, die mit QR-Codes beginnen und später Code-128-Versandetiketten, EAN-13-Produktcodes oder DataMatrix-Konformitätscodes für Arzneimittel benötigen, müssen eine zweite Bibliothek einführen, um jedes zusätzliche Format abzudecken:
using QRCoder;
// QR-Code is limited to QR — other formats require separate packages
var qrGenerator = new QRCodeGenerator();
var qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M);
// Code 128requires a different library (e.g., NetBarcode)
// DataMatrixrequires yet another library
// Reading any format requires yet another library
using QRCoder;
// QR-Code is limited to QR — other formats require separate packages
var qrGenerator = new QRCodeGenerator();
var qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M);
// Code 128requires a different library (e.g., NetBarcode)
// DataMatrixrequires yet another library
// Reading any format requires yet another library
Imports QRCoder
' QR-Code is limited to QR — other formats require separate packages
Dim qrGenerator As New QRCodeGenerator()
Dim qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M)
' Code 128 requires a different library (e.g., NetBarcode)
' DataMatrix requires yet another library
' Reading any format requires yet another library
IronBarcode Ansatz
IronBarcode deckt alle Formatfamilien über denselben Einstiegspunkt BarcodeWriter.CreateBarcode ab. Der Wechsel von QR-Code zu Code 128zu DataMatrixerfordert lediglich die Änderung des Parameters BarcodeEncoding – keine zusätzlichen Pakete, keine neuen Namensräume, keine separaten APIs:
using IronBarCode;
// All formats — one API, one package
BarcodeWriter.CreateBarcode("scan-to-track", BarcodeEncoding.QRCode)
.SaveAsPng("campaign-qr.png");
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
.SaveAsPng("shipping-label.png");
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("product-code.png");
BarcodeWriter.CreateBarcode("LOT-ABC-123", BarcodeEncoding.DataMatrix)
.SaveAsPng("pharma-code.png");
using IronBarCode;
// All formats — one API, one package
BarcodeWriter.CreateBarcode("scan-to-track", BarcodeEncoding.QRCode)
.SaveAsPng("campaign-qr.png");
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
.SaveAsPng("shipping-label.png");
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("product-code.png");
BarcodeWriter.CreateBarcode("LOT-ABC-123", BarcodeEncoding.DataMatrix)
.SaveAsPng("pharma-code.png");
Imports IronBarCode
' All formats — one API, one package
BarcodeWriter.CreateBarcode("scan-to-track", BarcodeEncoding.QRCode) _
.SaveAsPng("campaign-qr.png")
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128) _
.SaveAsPng("shipping-label.png")
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
.SaveAsPng("product-code.png")
BarcodeWriter.CreateBarcode("LOT-ABC-123", BarcodeEncoding.DataMatrix) _
.SaveAsPng("pharma-code.png")
API-Mapping-Referenz
| QR-Code | IronBarcode |
|---|---|
new QRCodeGenerator() |
Statische Klasse – keine Instanz erforderlich |
qrGenerator.CreateQrCode(data, ECCLevel.M) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode) |
new PngByteQRCode(qrCodeData) |
Nicht erforderlich – das Rendern ist Teil der Kette |
qrCode.GetGraphic(20) |
.ToPngBinaryData() mit .ResizeTo(w, h) |
new SvgQRCode(qrCodeData).GetGraphic(10) |
.SaveAsSvg(path) |
new QRCode(qrCodeData).GetGraphic(...) |
QRCodeWriter.CreateQrCode(data, size, level) |
QRCodeGenerator.ECCLevel.L |
QRCodeWriter.QrErrorCorrectionLevel.Low |
QRCodeGenerator.ECCLevel.M |
QRCodeWriter.QrErrorCorrectionLevel.Medium |
QRCodeGenerator.ECCLevel.Q |
QRCodeWriter.QrErrorCorrectionLevel.Quartile |
QRCodeGenerator.ECCLevel.H |
QRCodeWriter.QrErrorCorrectionLevel.Highest |
PayloadGenerator.WiFi(...).ToString() |
"WIFI:T:WPA;S:{ssid};P:{pass};;" |
| Keine Lese-API | BarcodeReader.Read(path) |
| Nur QR-Format | Über 50 Formate via BarcodeEncoding.* |
Wenn Teams einen Wechsel von QR-Code zu IronBarcode erwägen
Für Teams, deren Projekte definitiv ausschließlich auf QR-Codes basieren und dies auch in Zukunft tun werden, ist QR-Code eine gut gepflegte Bibliothek, die ihren Zweck weiterhin gut erfüllt. Die folgenden Szenarien beschreiben die Bedingungen, die Teams dazu veranlassen, diese Haltung neu zu bewerten.
Formatanforderungen gehen über QR hinaus
Die meisten Barcode-Anforderungen beginnen mit QR-Codes, und QR-Code deckt diesen ersten Bereich zuverlässig ab. Die Spannung entsteht, wenn ein zweites Format ins Spiel kommt. Logistikteams, die Code-128-Etiketten für den Versand benötigen, Einzelhandelsbetriebe, die EAN-13-Produktcodes erfordern, pharmazeutische Arbeitsabläufe, die DataMatrixfür die Serialisierung vorschreiben – jedes neue Format drängt ein Team dazu, eine weitere NuGet Abhängigkeit hinzuzufügen. Die Integrationskosten jeder zusätzlichen Bibliothek umfassen einen neuen Namespace, der erlernt werden muss, einen neuen Release-Zyklus, der überwacht werden muss, und eine neue potenzielle Fehlerquelle bei Versionskonflikten bei .NET Upgrades.
Barcode-Lesen wird notwendig
Eine Anwendung, die ausgehende QR-Codes für eine Kampagne generiert, ist ein reines Generierungssystem. Eine Anwendung, die auch eingehende Sendungen verarbeitet, Produktcodes bei Ankunft überprüft oder Tickets bei einer Veranstaltung validiert, ist ein Generierungs- und Lesesystem. QR-Code verfügt konstruktionsbedingt über keine Lesefunktion – diese Lücke muss durch eine zweite Bibliothek geschlossen werden. Die Einführung einer Lesebibliothek verändert den Integrationsaufwand des Barcode-Subsystems erheblich, insbesondere wenn die Lesebibliothek eigene Formatvorgaben oder Thread-Sicherheitsbeschränkungen mit sich bringt.
Wartungsaufwand für mehrere Bibliotheken
Das natürliche Akkumulationsmuster für ein auf QR-Code basierendes Projekt folgt einem vorhersehbaren Pfad: QR-Code zur QR-Generierung, eine 1D-Barcode-Bibliothek für Versandetiketten, eine Lesebibliothek zum Dekodieren. Jede Bibliothek verfügt über eine eigene Dokumentation, einen eigenen Versionszyklus und eine eigene Historie von grundlegenden Änderungen. Ein .NET Versions-Upgrade, das für eine Bibliothek nur geringfügig ist, kann mit einer grundlegenden Änderung in einer anderen Bibliothek zusammenfallen. Teams, die diese Kostenakkumulation über Jahre hinweg verwalten, berichten, dass die versteckten Kosten nicht in der anfänglichen Integration liegen, sondern im sich summierenden Wartungsaufwand über mehrere Upgrade-Zyklen hinweg.
PDF-Dokumentunterstützung
Mit QR-Code ist es nicht möglich, Barcodes zu generieren, die in PDF-Berichte eingebettet werden können, oder Barcodes aus eingehenden PDF-Dokumenten in einer Dokumentenverarbeitungspipeline zu extrahieren. Für die Unterstützung von PDFs ist entweder eine vollständige PDF-Bibliothek mit Barcode-Funktionen oder eine spezielle Kombination von Bibliotheken erforderlich. Teams, die dokumentenzentrierte Arbeitsabläufe erstellen – Rechnungsverarbeitung, Compliance-Berichterstattung, Etikettengenerierung aus PDF-Vorlagen – stellen fest, dass sich der Anwendungsbereich von QR-Code bereits früh im Projektlebenszyklus mit den PDF-Anforderungen überschneidet.
Gemeinsame Überlegungen zur Migration
PayloadGenerator-Zeichenfolgenformat
Die Hilfsklassen von QR-Code (PayloadGenerator) erzeugen Zeichenketten, die den öffentlichen QR-Code-Payload-Standards entsprechen. Das WiFi-Format erzeugt beispielsweise WIFI:T:WPA;S:NetworkName;P:Password;;. Diese Zeichenketten können direkt in IronBarcode ohne Hilfsklasse erstellt werden, da das Format ein öffentlicher Standard ist, der in der QR-Code-Spezifikation dokumentiert ist. Teams, die häufig PayloadGenerator verwenden, sollten planen, kleine statische Hilfsmethoden zu schreiben, die die String-Konstruktion nachbilden.
ECCLevel-Enum-Zuordnung
QRCoder verwendet QRCodeGenerator.ECCLevel mit den Werten L, M, Q, H. IronBarcode verwendet QRCodeWriter.QrErrorCorrectionLevel mit den Werten Low, Medium, Quartile und Highest. Die Zuordnung ist direkt, aber die Enum-Referenzen müssen an allen Aufrufstellen aktualisiert werden. Wo QR-Code bei jedem CreateQrCode-Aufruf eine explizite ECC-Auswahl erforderte, wendet IronBarcode einen sinnvollen Standardwert an, wenn der Pfad BarcodeWriter.CreateBarcode verwendet wird.
Entfernung der Renderer-Klasse
Die Rendererklassen von QR-Code — PngByteQRCode, SvgQRCode, AsciiQRCode, Base64QRCode, QRCode — werden nach der Migration überflüssig. IronBarcode integriert das Rendering in die Fluent Chain auf GeneratedBarcode, sodass das Muster des Zwischenrendererobjekts nicht übernommen wird. Code, der diese Rendererklassen instanziiert, kann durch Terminalmethodenaufrufe auf dem BarcodeWriter Ergebnis ersetzt werden.
Zusätzliche IronBarcode Funktionen
Die folgenden Funktionen von IronBarcode wurden in den obigen Vergleichsabschnitten nicht behandelt:
- Barcode-Einbettung in PDFs : Barcodes direkt in bestehende PDF-Dokumente an festgelegten Seitenkoordinaten einbetten
- Mehrfach-Barcode-Erkennung : Alle in einem Bild vorhandenen Barcodes werden in einem einzigen Aufruf gelesen, unabhängig vom Format.
- Stream- und Byte-Array-Eingabe :
BarcodeReader.Readakzeptiert Eingaben vonStream,byte[]undSystem.Drawing.Bitmap, ohne dass Datei-E/A erforderlich ist. - Barcode-Anmerkungen und Ränder : Fügen Sie lesbare Textanmerkungen hinzu und konfigurieren Sie die Randbreiten der generierten Barcodes.
- Vielfältige Bildformate : Ausgabe in PNG, JPEG, TIFF, BMP, GIF, HTML und SVG aus derselben Generierungskette
- Vorverarbeitung verrauschter Bilder : Automatische Bildvorverarbeitung zur Verbesserung der Lesegeschwindigkeit bei unscharfen, verzerrten oder kontrastarmen Eingaben
.NET-Kompatibilität und Zukunftsfähigkeit
IronBarcode wird aktiv weiterentwickelt und regelmäßig mit Updates aktualisiert, die auf aktuelle und zukünftige .NET Versionen abzielen. Die Bibliothek unterstützt .NET 8, .NET 9, und Kompatibilitätsupdates für .NET 10 (voraussichtlich Ende 2026) sind Teil des laufenden Veröffentlichungsplans von Iron Software. QR-Code wird aktiv weiterentwickelt und läuft auf allen gängigen .NET Plattformen; Dank des Designs ohne Abhängigkeiten ist Vorwärtskompatibilität unkompliziert. Beide Bibliotheken eignen sich für langfristige .NET -Projekte. Für Teams, die sich für IronBarcode entscheiden, bietet das kommerzielle Supportmodell direkten Zugang zu technischer Unterstützung und priorisierter Fehlerbehebung.
Abschluss
QRCoder und IronBarcode erfüllen die gleiche Ausgangsanforderung – die Generierung von QR-Codes – jedoch von unterschiedlichen architektonischen Ausgangspunkten aus. QR-Code ist eine speziell entwickelte Bibliothek für ein einzelnes Format, deren Design bewusst bei QR-Codes endet. IronBarcode ist eine Multi-Format-Bibliothek, die die Generierung, das Lesen und die PDF-Integration von mehr als 50 Barcode-Formaten abdeckt. Der Vergleich bezieht sich nicht auf den Vergleich einer guten mit einer besseren Bibliothek; Es liegt irgendwo zwischen einem Spezialwerkzeug und einem Allzweckwerkzeug.
QRCoder ist die richtige Wahl für Projekte, bei denen die Generierung von QR-Codes eine permanente, begrenzte Anforderung ist. Dank seiner Unabhängigkeit von anderen Abhängigkeiten, der uneingeschränkten MIT-Lizenz und der PayloadGenerator-Hilfsfunktionen eignet es sich hervorragend für einen 2FA-Registrierungsworkflow, einen QR-Code-Generator für Marketingkampagnen oder jeden Kontext, in dem der Barcode-Bereich eindeutig festgelegt ist. Die Bibliothek ist gut gepflegt, wird viel genutzt und erfüllt ihren Zweck zuverlässig. Teams mit diesen Eigenschaften gewinnen durch einen Wechsel nichts.
IronBarcode ist die praktischere Wahl, wenn die Barcode-Anforderungen eines Projekts über die QR-Code-Generierung hinausgehen – oder voraussichtlich hinausgehen werden. Anwendungen, die Codes von eingehenden Sendungen oder gescannten Dokumenten lesen, Code-128-Etiketten im Rahmen von QR-Kampagnen generieren oder Barcodes in PDF-Berichte einbetten müssen, profitieren von einer einzigen, konsistenten API für all diese Aufgaben. Der QRCoder C#-Alternativenleitfaden bietet zusätzlichen Kontext dazu, wo reine QR-Bibliotheken in Produktionsumgebungen an ihre Grenzen stoßen. Die Lizenzierung beginnt bei 749 US-Dollar und wird auf derIronBarcode -Lizenzseite ausführlich beschrieben.
Die ehrliche Einschätzung lautet, dass das richtige Werkzeug vollständig vom Umfang des Projekts abhängt. Für den dauerhaften Einsatz von QR-Codes bietet QR-Code alles Notwendige kostenlos. Bei Anforderungen, die mehrere Formate, das Lesen von Codes oder die PDF-Integration umfassen, entfällt mit IronBarcode die Notwendigkeit, im Laufe des Projekts mehrere spezialisierte Bibliotheken zu verwalten.
Häufig gestellte Fragen
Was ist QRCoder.NET?
QRCoder.NET 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 für .NET-Projekte in Betracht ziehen.
Was sind die Hauptunterschiede zwischen QRCoder.NET und IronBarcode?
IronBarcode verwendet eine statische, zustandslose API, die keine Instanzverwaltung erfordert, während QRCoder.NET 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 für alle Umgebungen.
Ist IronBarcode einfacher zu lizenzieren als QRCoder.NET?
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 QRCoder.NET 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 QRCoder.NET?
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 QRCoder?
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 QRCoder.NET 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 QRCoder.NET zu IronBarcode zu migrieren?
Bei der Migration von QRCoder.NET zu IronBarcode geht es in erster Linie darum, instanzbasierte API-Aufrufe durch die statischen Methoden von IronBarcode zu ersetzen, Lizenzierungsformulierungen zu entfernen und die Namen von 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.

