フッターコンテンツにスキップ
他のコンポーネントと比較する

MessagingToolkit BarcodeとIronBarcodeの比較:C#バーコードライブラリの比較

QRCoder対IronBarcode: QR専用ライブラリが限界に達する場所

QRCoderは、ある一点において非常に優れています。それは、外部依存関係を一切持たず、制限のないMITライセンスで、標準的なペイロードフォーマットから様々な出力レンダラーまであらゆるものを処理する洗練されたAPIを備え、純粋なC#でQRコードを生成することです。 6000万以上のNuGetダウンロードにより、その評判が得られました。 IronBarcodeとの比較は、品質評価ではなく、適用範囲に関する問題です。 IronBarcodeは50種類以上のバーコード形式に対応し、読み取りと書き込みの両方が可能で、単一の統一されたAPIを通じてPDFドキュメントとの連携も実現します。 QRコード生成以外の要件を持つチームにとって、QRCoderの設計が意図的にどこで止まっているのかを理解することは不可欠です。

QRCoderを理解する

QRCoderは2013年にRaffael Herrmannによって作成され、現在はShane32によってメンテナンスされています。このライブラリは完全にC#で記述されており、外部依存関係は一切ありません。SkiaSharpのバージョン競合、ImageSharpの商用ライセンスに関する懸念、ネイティブバイナリのデプロイといった問題は一切ありません。 .NETが動作するあらゆるプラットフォームで動作します。

MITライセンスは、真に制限のないライセンスです。 一部の人気ライブラリでは、一定の収益基準を超えると商用ライセンスが必要になりますが、QRCoderには隠れた商用制限はありません。 その違いは、商用アプリケーションを開発するチームにとって重要だ。

PayloadGenerator クラスは実用的な価値を大きく向上させます。これは、WiFi認証情報、連絡先カード(vCard)、カレンダーイベント、SMSメッセージ、地理位置データなどの一般的なQRコードデータ形式を処理するため、開発者が各標準のワイヤフォーマットを暗記する必要がないからです。 レンダリングエンジンの種類も豊富で、複数の出力タイプに対応しています。

主な建築上の特徴:

-外部依存関係ゼロ:サードパーティのランタイム要件のない純粋なC#で記述されているため、コンテナ化された環境や制限された環境へのデプロイが簡素化されます。 -収益制限なしのMITライセンス:収益のしきい値や商業的なトリガーなしに、完全に無料で商用利用できます。

  • PayloadGeneratorヘルパー: WiFi、vCard、CalendarEvent、SMS、Geo、その他の一般的なQRペイロード規格に対応した組み込みフォーマッター -レンダリング形式: PNGバイト、SVG文字列、ASCIIアート、Base64、BMP、その他複数の出力形式 -完全なエラー訂正制御: 4つのECCレベル(L、M、Q、H)すべてが公開されています -マイクロQRサポート:スペースに制約のあるラベル向けのコンパクトなQRコード。すべてのバーコードライブラリで利用できるわけではありません。
  • QRコード専用設計: APIはQRコード生成のみを対象としており、1Dフォーマット、DataMatrix、バーコード読み取りは提供していません。

QRコード専用デザイン

QRCoderはデータ作成ステップをレンダリングステップから分離します。QRCodeGeneratorQRCodeData という中間オブジェクトを生成し、その後レンダラークラスに渡されます。 このパターンは、追加のオブジェクトが必要になるという代償を伴いますが、出力フォーマットを精密に制御できます。

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)
$vbLabelText   $csharpLabel

QRCodeGenerator.CreateQrCode メソッドはコード作成の唯一のエントリーポイントです。CreateEAN13 はありません。 この図書館は、当初の目的を完全に遵守している。

IronBarcodeを理解する

IronBarcodeは、 Iron Software社が提供する商用.NETバーコードライブラリで、単一の統一されたAPIを通じて50種類以上のバーコード形式の生成と読み取りに対応しています。 異なるフォーマットファミリーのために別々のライブラリを維持する代わりに、IronBarcodeはすべてのフォーマットを単一の静的なBarcodeEncodingパラメータを介して提供します。

このライブラリは静的APIモデルを使用しています。System.Drawing.Bitmapオブジェクトを受け入れ、マルチフォーマットを自動検出します。 PDFドキュメントのサポート(PDFページからのバーコードの読み取りとPDFへのバーコードの埋め込みの両方)は、外部依存関係なしで含まれています。

主な特徴:

  • 50以上のバーコード形式: QRコード、Code 128、EAN-13、UPC-A、DataMatrix、PDF417、Aztec、MaxiCode などが単一のBarcodeEncodingパラメータで使用可能です
  • 統合読み取りAPI: BarcodeReader.Readは画像、PDF、ストリームを自動フォーマット検出でサポートし、第二のライブラリは不要です
  • QRコードカスタマイズ: ロゴ埋め込み、色変更、静寂ゾーンの制御がQRCodeWriterメソッドを通じて可能です
  • PDF連携: PDFページからバーコードを読み取り、既存のPDF文書にバーコードを挿入します。
  • 静的APIモデル: ジェネレーターインスタンスは不要で、BarcodeWriterは静的クラスです -商用ライセンス:フォーマット制限なしのシングル開発者ライセンスは749ドルから

機能比較

以下の表は、QRCoderとIronBarcodeの基本的な違いをまとめたものです。

フィーチャー QRCoder IronBarcode
QRコード生成 はい、素晴らしい はい
1次元バーコード生成 なし はい(30種類以上のフォーマットに対応)
その他の2Dフォーマット なし はい(DataMatrix、PDF417、Aztecなど)
バーコード読み取り なし はい、自動検出です
PDFサポート なし はい、読んでスタンプを押してください
ライセンス MIT ― 真に無料 商業用(開発者1名につき749ドル)

詳細な機能比較

フィーチャー QRCoder IronBarcode
世代
QRコード はい はい
マイクロQR はい なし
コード128 なし はい
EAN-13 / UPC-A なし はい
データマトリックス なし はい
PDF417 なし はい
アステカ なし はい
合計フォーマット 1 50歳以上
QRコードの特徴
エラー訂正(L/M/Q/H) はい はい
ロゴ埋め込み はい はい
色のカスタマイズ はい はい
SVG出力 はい はい
ASCIIアート出力 はい なし
Base64出力 はい なし
ペイロードジェネレーターヘルパー はい いいえ — 手作業による弦の構造
読む
画像からデコード なし はい
PDFからデコードする なし はい
自動フォーマット検出 なし はい
統合
PDFバーコードスタンプ なし はい
外部依存関係はゼロ はい 自己完結型
ライセンスについて
ライセンスの種類 MIT 商用
収益制限 None None
フォーマットごとの価格設定 None None

QRコード生成

どちらのライブラリもQRコードを生成しますが、生成ステップとレンダリングステップの関連性において、それぞれのAPIは異なる設計思想を反映しています。

QRCoderアプローチ

QRCoderは2段階のパターンを使用します。QRCodeDataという中間オブジェクトを生成し、別のレンダラークラスがそれを必要な出力形式に変換します。 ECCレベルは必須パラメータであり、デフォルト値はありません。開発者は明示的に選択する必要があります。

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)
$vbLabelText   $csharpLabel

このパターンの利点は、コードデータを再生成することなくqrCodeDataオブジェクトを複数の出力形式に再利用できることです。 レンダラークラスには、PngByteQRCode, SvgQRCode, AsciiQRCode, Base64QRCode, BitmapByteQRCode などがあります。

IronBarcodeのアプローチ

IronBarcodeはジェネレーションとレンダリングを静的なBarcodeWriterクラス上で流暢なチェーンに統合しています。 BarcodeEncoding.QRCode パラメータはフォーマットを選択し、ToPngBinaryDataといった端末メソッドが出力を決定します:

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")
$vbLabelText   $csharpLabel

特定の誤り訂正コントロールが必要な場合、QRCodeWriterクラスはフォーマット特有のオプションを提供します:

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")
$vbLabelText   $csharpLabel

IronBarcodeの2Dバーコード作成ガイドでは、QRコード、DataMatrix、PDF417、Aztecを含むすべてのサポートされた2D形式を同じBarcodeWriterエントリーポイントでカバーしています。

QRコードのカスタマイズ

どちらのライブラリもQRコードへのロゴ埋め込みと色変更をサポートしていますが、必要なシステムの種類によってアプローチが異なります。

QRCoderアプローチ

QRCoderのロゴ埋め込みはSystem.Drawing.Bitmapを受け入れることを公開しています。 つまり、呼び出しコードは直接System.Drawingを使用してロゴファイルを読み込まなければなりません:

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)
$vbLabelText   $csharpLabel

カラーのカスタマイズは、lightColorパラメータを通じて同様のパターンに従います。

IronBarcodeのアプローチ

IronBarcodeはロゴ埋め込みと色変更をQRCodeWriter結果オブジェクトの名前付きメソッドとして提供しています。 AddBrandLogo メソッドはファイルパスを受け入れ、ChangeBarCodeColorColor 値を受け入れます:

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")
$vbLabelText   $csharpLabel

QRコードスタイルのカスタマイズガイドでは、ロゴのサイズ、色の組み合わせ、静音ゾーンの制御について詳しく説明しています。

バーコード読み取り

バーコード読み取り機能は、両図書館間の能力差を最も顕著に示している。

QRCoderアプローチ

QRCoderにはバーコード読み取りAPIがありません。 QRCodeGenerator クラスとすべてのレンダラークラスは生成専用です。 画像、ファイル、またはストリームからQRコードをデコードする方法はありません。 QRコードの生成と読み取りの両方を必要とするアプリケーションは、独自のAPI、独自のネームスペース、独自のメンテナンスサイクルを持つ別のライブラリ(通常はZXing .NET )を追加する必要があります。

//QRCoderhas 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.
//QRCoderhas 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.
'QRCoder 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.
$vbLabelText   $csharpLabel

これは設計上の決定であり、見落としではありません。QRCoderは明確に生成ライブラリです。

IronBarcodeのアプローチ

IronBarcodeには、同じパッケージ内に読み取りAPIが含まれています。 BarcodeReader.Read は画像ファイル、PDFファイル、ストリーム、およびSystem.Drawing.Bitmapオブジェクトを受け入れます。 呼び出し元が検索するバーコード形式を指定する必要なく、バーコード形式を自動的に検出し、画像内で見つかったすべてのバーコードを返します。

using IronBarCode;

// Reading a QR code — no separate library required
var results = BarcodeReader.Read("qr.png");
foreach (var result in results)
{
    Console.WriteLine(result.Value);       // decoded value
    Console.WriteLine(result.Format);      // 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.Value);       // decoded value
    Console.WriteLine(result.Format);      // 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.Value)       ' decoded value
    Console.WriteLine(result.Format)      ' QRCode, Code128, EAN13, etc.
Next
$vbLabelText   $csharpLabel

画像からのバーコード読み取りガイドでは、 PDF、複数ページ文書、ストリーム、低解像度またはノイズの多い画像から、同じ入力ポイントを通してバーコードを読み取る方法を解説しています。

QRコード以外のフォーマット範囲

QRCoderアプローチ

QRCoderはQRコードのみを生成します。これは意図的な設計です。 QRCodeGenerator.CreateQrCode メソッドは、このライブラリが提供する唯一の生成エントリーポイントです。 QRコードから始まり、後にCode 128配送ラベル、EAN-13製品コード、またはDataMatrix医薬品コンプライアンスコードを必要とするプロジェクトでは、追加される各フォーマットに対応するために、2つ目のライブラリを導入する必要があります。

using QRCoder;

//QRCoderis limited to QR — other formats require separate packages
var qrGenerator = new QRCodeGenerator();
var qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M);

// コード128 requires a different library (e.g., NetBarcode)
// データマトリックス requires yet another library
// Reading any format requires yet another library
using QRCoder;

//QRCoderis limited to QR — other formats require separate packages
var qrGenerator = new QRCodeGenerator();
var qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M);

// コード128 requires a different library (e.g., NetBarcode)
// データマトリックス requires yet another library
// Reading any format requires yet another library
Imports QRCoder

'QRCoder is limited to QR — other formats require separate packages
Dim qrGenerator As New QRCodeGenerator()
Dim qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M)

' コード128 requires a different library (e.g., NetBarcode)
' データマトリックス requires yet another library
' Reading any format requires yet another library
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ

IronBarcodeはすべての形式ファミリーを同じBarcodeWriter.CreateBarcodeエントリーポイントでカバーしています。 QRコードからCode 128からDataMatrixに切り替えるには、BarcodeEncodingパラメータを変更するだけでよく、追加のパッケージや新しい名前空間、別個のAPIは不要です:

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")
$vbLabelText   $csharpLabel

APIマッピングリファレンス

QRCoder IronBarcode
new QRCodeGenerator() 静的クラス - インスタンスは不要
qrGenerator.CreateQrCode(data, ECCLevel.M) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
new PngByteQRCode(qrCodeData) 不要です。レンダリングは処理チェーンの一部です。
qrCode.GetGraphic(20) .ToPngBinaryData() with .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};;"
読み取りAPIはありません BarcodeReader.Read(path)
QRコード形式のみ 50+ formats via BarcodeEncoding.*

チームがQRCoderからIronBarcodeへの移行を検討する場合

プロジェクトがQRコードのみを対象としており、今後もその方針が変わらないチームにとって、QRCoderは適切にメンテナンスされたライブラリであり、その目的を十分に果たし続けている。 以下のシナリオは、チームがその姿勢を再評価するきっかけとなる状況を説明しています。

フォーマット要件はQRコードを超えて拡大する

ほとんどのバーコード要件はQRコードから始まりますが、QRCoderはその初期段階を確実に処理します。 緊張感が生じるのは、別のフォーマットが話題に上ってきた時だ。 出荷にコード128ラベルが必要な物流チーム、EAN-13製品コードを必要とする小売業務、シリアル化にDataMatrixを必要とする製薬ワークフローなど、新しいフォーマットが登場するたびに、チームはNuGetの依存関係を一つ追加せざるを得なくなります。 ライブラリを追加するたびに、新しい名前空間を習得する必要が生じ、新しいリリースサイクルを監視する必要が生じ、 .NETのアップグレード時にバージョン競合が発生する可能性も高まります。

バーコード読み取りが必須となる

キャンペーン用の送信用QRコードを生成するアプリケーションは、生成専用システムである。 入荷貨物の処理、到着時の製品コードの検証、イベントでのチケットの認証なども行うアプリケーションは、生成・読み取りシステムである。 QRCoderには設計上、読み取り機能がありません。その不足分は別のライブラリで補う必要があります。 読み取りライブラリの導入は、バーコードサブシステムの統合フットプリントを大幅に変更します。特に、読み取りライブラリが独自のフォーマット仕様要件やスレッドセーフティ制約を課す場合はなおさらです。

複数図書館の保守管理負担

QRCoderベースのプロジェクトにおける自然な蓄積パターンは、予測可能な経路をたどります。QRコード生成のためのQRCoder、配送ラベル用の1次元バーコードライブラリ、そしてデコード用の読み取りライブラリです。 各ライブラリは、独自のドキュメント、独自のバージョン管理サイクル、および独自の互換性のない変更履歴を持っています。 あるライブラリにとってマイナーな.NETバージョンのアップグレードが、別のライブラリにとって互換性のない変更と重なる場合がある。 長年にわたってこうした蓄積を管理してきたチームは、隠れたコストは最初の統合にあるのではなく、複数のアップグレードサイクルにわたる複合的なメンテナンス費用にあると報告している。

PDFドキュメントのサポート

QRCoderでは、PDFレポートに埋め込むためのバーコードを生成したり、文書処理パイプラインで受信したPDF文書からバーコードを抽出したりすることはできません。 PDFをサポートするには、バーコード機能を備えた完全なPDFライブラリ、または専用のライブラリの組み合わせが必要です。 請求書処理、コンプライアンス報告、テンプレート化されたPDFからのラベル生成など、文書中心のワークフローを構築するチームは、プロジェクトのライフサイクルの早い段階で、QRCoderの適用範囲がPDFの要件と交差することに気づきます。

一般的な移行の考慮事項

ペイロードジェネレーター文字列フォーマット

QRCoderのPayloadGeneratorヘルパークラスは、一般のQRコードペイロード標準に準拠した文字列を生成します。 例えばWiFi形式では、WIFI:T:WPA;S:NetworkName;P:Password;;を生成します。 これらの文字列は、QRコード仕様で文書化された公開標準フォーマットであるため、ヘルパークラスを使用せずにIronBarcodeで直接構築できます。 多数のPayloadGenerator使用を行うチームは、文字列構築を再現する小さな静的ヘルパーメソッドを書くことを計画する必要があります。

ECCLevel 列挙型マッピング

QRCoderはL、M、Q、Hの値を持つQRCodeGenerator.ECCLevelを使用します。 IronBarcodeはHighestの値を使用します。 マッピングは直接的ですが、列挙型参照はすべての呼び出し箇所で更新する必要があります。 QRCoderが毎回BarcodeWriter.CreateBarcodeパスが使用される際には妥当なデフォルトを適用します。

レンダラークラスの削除

QRCoderのレンダラークラス(QRCode)は、移行後は必要ありません。 IronBarcodeはGeneratedBarcode上での流暢なチェーンにレンダリングを組み込んでいるため、中間レンダラーオブジェクトパターンは引き継がれません。 これらのレンダラークラスをインスタンス化するコードは、BarcodeWriter結果の終端メソッドコールに置き換えることができます。

IronBarcodeの追加機能

上記の比較セクションでは、以下のIronBarcodeの機能については触れていません。

.NETの互換性と将来の準備

IronBarcodeは、現在および今後 for .NETリリースを対象とした定期的なアップデートを行い、活発な開発を継続しています。 ライブラリは現在 for .NET LTSと最近のリリースをサポートし、新しい.NETバージョンが到着するにつれて互換性更新が展開されます。QRCoderも積極的に保守されており、すべての現在 for .NETターゲットで実行されます; 依存関係がゼロの設計なので、将来の互換性も容易です。 どちらのライブラリも、長期的な.NETプロジェクトに適しています。 IronBarcodeを選択するチームにとって、商用サポートモデルは、技術支援への直接アクセスと、バグの優先的な解決を提供します。

結論

QRCoderとIronBarcodeは、同じ初期要件であるQRコード生成に、異なるアーキテクチャ上の出発点から取り組んでいる。 QRCoderは、QRコードのみを扱うことを目的とした、単一フォーマット専用のライブラリです。 IronBarcodeは、50種類以上のバーコード形式に対応した、生成、読み取り、PDF統合機能を備えたマルチフォーマットライブラリです。 比較対象は、良い図書館とより良い図書館ではない。 それは、専用工具と汎用工具の中間に位置する。

QRCoderは、QRコード生成が恒久的かつ限定的な要件となるプロジェクトに最適な選択肢です。 ゼロ依存のフットプリントや無制限のMITライセンス、PayloadGeneratorヘルパーにより、2FA登録ワークフローやマーケティングキャンペーン用QRジェネレーター、またはバーコードの範囲が明確に固定された任意のコンテキストにおいて優れた選択肢となります。 この図書館はよく整備されており、広く利用されており、その本来の機能を確実に果たしている。 こうした特徴を持つチームは、チームを移籍しても何のメリットもない。

プロジェクトのバーコード要件がQRコード生成の範囲を超える場合、あるいは今後超える可能性が高い場合、 IronBarcodeはより実用的な選択肢となります。 入荷した貨物やスキャンした文書からコードを読み取る必要のあるアプリケーション、QRコードキャンペーンと並行してCode 128ラベルを生成する必要のあるアプリケーション、またはPDFレポートに埋め込まれたバーコードを生成する必要のあるアプリケーションは、これらのすべてのタスクで一貫した単一のAPIを利用することでメリットが得られます。 QRCoderのC#代替ライブラリガイドでは、 QRコード専用ライブラリが本番環境で限界に達する箇所について、より詳細な情報を提供しています。 ライセンス料は749ドルからで、詳細はIronBarcodeのライセンスページでご確認いただけます。

率直に言って、最適なツールはプロジェクトの規模によって全く異なります。 QRコードのみを必要とする永続的な要件であれば、QRCoderは必要な機能をすべて無料で提供します。複数のフォーマット、読み取り、またはPDF統合を必要とする要件の場合、 IronBarcodeはプロジェクトの進化に伴って複数の単機能ライブラリを管理する必要性をなくします。

よくある質問

QRCoder.NETとは何ですか?

QRCoder.NETは、C#アプリケーションでバーコードを生成して読み取るため for .NETバーコードライブラリです。QRCoder.NET は、.NET プロジェクトのバーコードソリューションを選択する際に、開発者が評価するいくつかの選択肢の 1 つです。

QRCoder.NETとIronBarcodeの主な違いは何ですか?

IronBarcodeはインスタンス管理を必要としない静的なステートレスAPIを使用します。一方QRCoder.NETは通常、使用前にインスタンスの作成と設定が必要です。IronBarcodeはまた、ネイティブPDFサポート、自動フォーマット検出、すべての環境でのシングルキーライセンスを提供します。

IronBarcodeはQRCoder.NETよりもライセンスが簡単ですか?

IronBarcodeは単一のライセンスキーで開発環境と本番環境の両方をカバーします。これは、SDKキーとランタイムキーを分離するライセンスシステムと比較して、CI/CDパイプラインとDocker構成を簡素化します。

IronBarcode はQRCoder.NETがサポートしているすべてのバーコードフォーマットをサポートしていますか?

IronBarcodeはQRコード、Code 128、Code 39、DataMatrix、PDF417、Aztec、EAN-13、UPC-A、GS1など30以上のバーコードシンボロジーをサポートしています。フォーマットの自動検出は、明示的なフォーマットの列挙が不要であることを意味します。

IronBarcodeはネイティブPDFバーコード読み取りをサポートしていますか?

IronBarcodeは、別のPDFレンダリングライブラリを必要とせず、BarCodeReader.Read("document.pdf")を使用してPDFファイルから直接バーコードを読み取ります。ページごとの結果には、ページ番号、バーコードフォーマット、値、信頼度スコアが含まれます。

IronBarcode はQRCoder.NETと比べてどのようにバッチ処理を行いますか?

IronBarcodeの静的メソッドはステートレスで当然スレッドセーフであり、スレッドごとのインスタンス管理なしにParallel.ForEachを直接使用できます。どの価格帯でもスループットの上限はありません。

IronBarcode はど for .NETバージョンをサポートしていますか?

IronBarcodeは.NET Framework 4.6.2+、.NET Core 3.1、.NET 5、6、7、8、9を単一のNuGetパッケージでサポートしています。プラットフォーム・ターゲットには、Windows x64/x86、Linux x64、macOS x64/ARMが含まれます。

.NETプロジェクトにIronBarcodeをインストールするには?

NuGet経由でIronBarcodeをインストールする:パッケージマネージャーコンソールで'Install-Package IronBarCode'を実行するか、CLIで'dotnet add package IronBarCode'を実行する。追加のSDKインストーラーやランタイムファイルは必要ありません。

QRCoderとは異なり、購入前にIronBarcodeを評価することはできますか?

IronBarcodeのトライアルモードでは、完全なデコードされたバーコード値を返します。購入を決定する前に、ご自身のドキュメントで読み取り精度をベンチマークすることができます。

QRCoder.NETとIronBarcodeの価格の違いは何ですか?

IronBarcodeは、開発および量産をカバーする永続的なシングルデベロッパーライセンスで749ドルからご利用いただけます。価格の詳細とボリュームオプションはIronBarcodeのライセンスページでご覧いただけます。別途ランタイムライセンスは必要ありません。

QRCoder.NETからIronBarcodeへの移行は簡単ですか?

QRCoder.NETからIronBarcodeへの移行は、主にインスタンスベースのAPIコールをIronBarcodeの静的メソッドに置き換え、ライセンスの定型文を削除し、結果のプロパティ名を更新します。ほとんどの移行はコードを追加するのではなく、コードを削減します。

IronBarcodeはロゴ入りQRコードを生成できますか?

はい。QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")は、設定可能なエラー修正機能付きで、ブランド画像をネイティブにQRコードに埋め込みます。カラーQRコードもChangeBarCodeColor()でサポートされています。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね