Migrating from QRCoder to IronBarcode
QRCoderからIronBarcodeへの移行
このガイドは、QRCoderを使用してプロジェクトを開始し、QRコード生成以外の機能も必要とするようになった開発チーム向けに書かれています。 QRCoderは、想定される用途において適切にメンテナンスされた高品質なライブラリであり、移行はライブラリの品質を反映するものではありません。 これは、QRCoderの設計目的の範囲外である、フォーマット拡張、バーコード読み取り、PDF統合といった要件に対応するものです。 このガイドでは、QRCoderからIronBarcodeへの技術的な移行プロセス全体を網羅しています。パッケージの置き換え、名前空間の変更、一般的なパターンごとのコード変換、APIの同等性のマッピング、移行中に発生する問題への解決策などが含まれます。
QRCoderから移行する理由
QRコード以外のフォーマット要件: QRCoderはQRコードのみを生成します。 コード128ラベルを物流用に、EAN-13コードを小売製品識別用に、DataMatrixを製薬シリアライゼーション用に、またはPDF417を政府文書のコンプライアンス用に要求するようにプロジェクトが成長する場合、各追加フォーマットに対して別のライブラリを導入する必要があります。 必要なフォーマットの数が増えるにつれて、独立したパッケージ、API、および保守義務の数も増加する。
バーコード読み取り要件: QRCoderにはバーコード読み取りAPIがありません。設計上、生成専用のライブラリです。 受信画像からQRコードをデコードしたり、スキャンした文書のバーコードを検証したり、出荷ラベルを処理したりする必要のあるアプリケーションは、QRCoderに加えて専用の読み取りライブラリを追加する必要があります。 その2つ目のライブラリは、独自のAPIインターフェース、独自の更新サイクル、そして.NETのアップグレードごとに発生する独自の互換性の問題をもたらします。
マルチライブラリのメンテナンス: QRCoderベースのプロジェクトにおける現実的な蓄積パターンは、QRコード生成のためのQRCoderから、出荷ラベル用の1次元バーコードライブラリ、そしてデコードのための読み取りライブラリへと続きます。 3つか4つの独立したパッケージを管理するということは、それぞれ個別のリリースノートを追跡し、いずれかのパッケージが更新された際に発生するバージョン競合を解決し、開発チーム全体で複数のAPIに関する知識を維持する必要があることを意味します。 メンテナンスの負担は、当初の統合見積もりでは把握できない形で、時間の経過とともに増大していく。
PDFサポート: PDF文書へのバーコードの埋め込み、または受信したPDFファイルからのバーコードの抽出は、いずれもQRCoderの機能範囲外です。 文書処理パイプライン(請求書処理、PDFテンプレートからのラベル生成、コンプライアンス報告など)は、早い段階でこの境界に遭遇する。 QRCoderと並行して専用のPDFライブラリを追加するか、バーコード生成とPDF生成を別々のサブシステムで処理するアーキテクチャを構築する必要があります。
基本的な問題
QRCoderはQRコード生成を効率的に解決します。 要件がQR(品質保証)を超えた瞬間、コードベースはそれぞれのギャップを埋めるために追加のパッケージを取り込む必要がある。
//QRCoderhandles QR generation well — but no further
using QRCoder;
using System.IO;
var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("SHIP-12345", QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrCodeData);
File.WriteAllBytes("qr.png", qrCode.GetGraphic(10));
// Now the shipping team asks for Code 128 — add NetBarcode
// Now the warehouse needs to scan barcodes — add ZXing.Net
// Now a report needs a barcode in a PDF — add a PDF library
// Each addition: new namespace, new API, new maintenance cycle
//QRCoderhandles QR generation well — but no further
using QRCoder;
using System.IO;
var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("SHIP-12345", QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrCodeData);
File.WriteAllBytes("qr.png", qrCode.GetGraphic(10));
// Now the shipping team asks for Code 128 — add NetBarcode
// Now the warehouse needs to scan barcodes — add ZXing.Net
// Now a report needs a barcode in a PDF — add a PDF library
// Each addition: new namespace, new API, new maintenance cycle
Imports QRCoder
Imports System.IO
Dim generator As New QRCodeGenerator()
Dim qrCodeData = generator.CreateQrCode("SHIP-12345", QRCodeGenerator.ECCLevel.M)
Dim qrCode As New PngByteQRCode(qrCodeData)
File.WriteAllBytes("qr.png", qrCode.GetGraphic(10))
' Now the shipping team asks for Code 128 — add NetBarcode
' Now the warehouse needs to scan barcodes — add ZXing.Net
' Now a report needs a barcode in a PDF — add a PDF library
' Each addition: new namespace, new API, new maintenance cycle
IronBarcodeは、生成、読み取り、PDF統合を1つのAPIに統合します。
// IronBarcode — one library covers all of the above
using IronBarCode;
// Generate QR
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
// Generate Code 128 — same API
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
.SaveAsPng("label.png");
// Read a barcode from an image — built in
var results = BarcodeReader.Read("incoming.png");
// IronBarcode — one library covers all of the above
using IronBarCode;
// Generate QR
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
// Generate Code 128 — same API
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
.SaveAsPng("label.png");
// Read a barcode from an image — built in
var results = BarcodeReader.Read("incoming.png");
Imports IronBarCode
' Generate QR
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.QRCode) _
.SaveAsPng("qr.png")
' Generate Code 128 — same API
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128) _
.SaveAsPng("label.png")
' Read a barcode from an image — built in
Dim results = BarcodeReader.Read("incoming.png")
IronBarcodeとQRCoder:機能比較
| フィーチャー | QRCoder | IronBarcode |
|---|---|---|
| QRコード生成 | はい、素晴らしい | はい |
| マイクロQR | はい | なし |
| コード128 / コード39 | なし | はい |
| EAN-13 / UPC-A | なし | はい |
| データマトリックス | なし | はい |
| PDF417 | なし | はい |
| アステカ | なし | はい |
| 合計フォーマット数 | 1 | 50歳以上 |
| バーコード読み取り | なし | はい、自動検出です |
| PDFバーコード抽出 | なし | はい |
| PDFバーコード刻印 | なし | はい |
| ロゴ埋め込み | はい | はい |
| 色のカスタマイズ | はい | はい |
| SVG出力 | はい | はい |
| ペイロードジェネレータヘルパー | はい | いいえ — 手作業による弦の構造 |
| 外部依存関係ゼロ | はい | 自己完結型 |
| ライセンス | MIT — 制限なし | 商用 — Lite層は単一の開発者をカバーします |
クイックスタート:QRCoderからIronBarcodeへの移行
ステップ 1: NuGet パッケージを置き換える
プロジェクトからQRCoderを削除します。
dotnet remove package QRCoder
dotnet remove package QRCoder
IronBarcodeをインストールしてください:
dotnet add package IronBarcode
dotnet add package IronBarcode
プロジェクトでバーコード読み取りにQRCoderと併用してZXing .NETを使用していた場合、そのパッケージもこの段階で削除できます。
dotnet remove package ZXing.Net
dotnet remove package ZXing.Net
ステップ 2: 名前空間の更新
QRCoder名前空間のインポートをIronBarcode名前空間に置き換えてください。
// Before (QRCoder)
using QRCoder;
// After (IronBarcode)
using IronBarCode;
// Before (QRCoder)
using QRCoder;
// After (IronBarcode)
using IronBarCode;
' Before (QRCoder)
Imports QRCoder
' After (IronBarcode)
Imports IronBarCode
ステップ 3: ライセンスの初期化
ライセンス初期化をアプリケーションの起動時に追加します — Program.cs, Startup.cs、または静的コンストラクタを使用します:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
登録不要で無料トライアルキーを入手できます。 本番環境への導入には、ライセンスの購入が必要です。
コード移行の例
基本的なQRコード生成
最も一般的なQRCoderパターンでは、PngByteQRCodeのようなレンダラクラスの3つのオブジェクトを必要とします。 IronBarcodeでは、この一連の呼び出しが単一の静的呼び出しに置き換えられます。
QRCoderのアプローチ:
using QRCoder;
public class BarcodeService
{
private readonly QRCodeGenerator _generator = new QRCodeGenerator();
public byte[] GenerateQR(string content)
{
var qrCodeData = _generator.CreateQrCode(content, QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrCodeData);
return qrCode.GetGraphic(10); // 10px per module
}
}
using QRCoder;
public class BarcodeService
{
private readonly QRCodeGenerator _generator = new QRCodeGenerator();
public byte[] GenerateQR(string content)
{
var qrCodeData = _generator.CreateQrCode(content, QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrCodeData);
return qrCode.GetGraphic(10); // 10px per module
}
}
Imports QRCoder
Public Class BarcodeService
Private ReadOnly _generator As New QRCodeGenerator()
Public Function GenerateQR(content As String) As Byte()
Dim qrCodeData = _generator.CreateQrCode(content, QRCodeGenerator.ECCLevel.M)
Dim qrCode = New PngByteQRCode(qrCodeData)
Return qrCode.GetGraphic(10) ' 10px per module
End Function
End Class
IronBarcodeのアプローチ:
using IronBarCode;
public class BarcodeService
{
public byte[] GenerateQR(string content)
{
return BarcodeWriter.CreateBarcode(content, BarcodeEncoding.QRCode)
.ResizeTo(200, 200)
.ToPngBinaryData();
}
}
using IronBarCode;
public class BarcodeService
{
public byte[] GenerateQR(string content)
{
return BarcodeWriter.CreateBarcode(content, BarcodeEncoding.QRCode)
.ResizeTo(200, 200)
.ToPngBinaryData();
}
}
Imports IronBarCode
Public Class BarcodeService
Public Function GenerateQR(content As String) As Byte()
Return BarcodeWriter.CreateBarcode(content, BarcodeEncoding.QRCode) _
.ResizeTo(200, 200) _
.ToPngBinaryData()
End Function
End Class
BarcodeWriterは静的クラスです — インスタンスは必要なく、中間データオブジェクトもありません。 GetGraphicで受け入れるモジュールあたりのピクセルの整数を置き換えます。 QRCoderがモジュール数で出力サイズを決定する場所(例: GetGraphic(10)はモジュールあたり10pxの画像用)、IronBarcodeは絶対的なピクセル寸法を取ります。
QRコードをファイルに保存する
QRCoderは、最終段階でのみメモリ内のバイト列とファイル出力を分離します。レンダリングチェーンは同じです。 IronBarcodeは、同じチェーン上で異なるターミナル方式を使用します。
QRCoderのアプローチ:
using QRCoder;
using System.IO;
var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var pngBytes = new PngByteQRCode(qrCodeData).GetGraphic(10);
File.WriteAllBytes("output.png", pngBytes);
using QRCoder;
using System.IO;
var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var pngBytes = new PngByteQRCode(qrCodeData).GetGraphic(10);
File.WriteAllBytes("output.png", pngBytes);
Imports QRCoder
Imports System.IO
Dim generator As New QRCodeGenerator()
Dim qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
Dim pngBytes = New PngByteQRCode(qrCodeData).GetGraphic(10)
File.WriteAllBytes("output.png", pngBytes)
IronBarcodeのアプローチ:
using IronBarCode;
// Save directly — no intermediate byte array needed
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.ResizeTo(300, 300)
.SaveAsPng("output.png");
// Or obtain bytes for in-memory use
byte[] pngBytes = BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.ResizeTo(300, 300)
.ToPngBinaryData();
using IronBarCode;
// Save directly — no intermediate byte array needed
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.ResizeTo(300, 300)
.SaveAsPng("output.png");
// Or obtain bytes for in-memory use
byte[] pngBytes = BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.ResizeTo(300, 300)
.ToPngBinaryData();
Imports IronBarCode
' Save directly — no intermediate byte array needed
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.ResizeTo(300, 300) _
.SaveAsPng("output.png")
' Or obtain bytes for in-memory use
Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.ResizeTo(300, 300) _
.ToPngBinaryData()
SaveAsPngメソッドは、ディスクに直接書き込むターミナルです。 byte[]を返します。
SVG出力
QRCoderのアプローチ:
using QRCoder;
using System.IO;
var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("output.svg", svgContent);
using QRCoder;
using System.IO;
var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("output.svg", svgContent);
Imports QRCoder
Imports System.IO
Dim generator As New QRCodeGenerator()
Dim qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
Dim svgContent As String = New SvgQRCode(qrCodeData).GetGraphic(10)
File.WriteAllText("output.svg", svgContent)
IronBarcodeのアプローチ:
using IronBarCode;
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsImage("output.svg");
using IronBarCode;
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsImage("output.svg");
Imports IronBarCode
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.SaveAsImage("output.svg")
.svgエクステンションを渡すとSVG出力が生成されます)。
エラー訂正レベルのマッピング
QRCoderは毎QRCodeGenerator.ECCLevel列挙型を使用して明示的にECCを選択する必要があります。 IronBarcodeはQRCodeWriter.QrErrorCorrectionLevelによって明示的な制御を提供します。
QRCoderのアプローチ:
using QRCoder;
var generator = new QRCodeGenerator();
// Medium — suitable for most generation without logos
var dataMedium = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
// High — required when a logo will occlude part of the code
var dataHigh = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H);
using QRCoder;
var generator = new QRCodeGenerator();
// Medium — suitable for most generation without logos
var dataMedium = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
// High — required when a logo will occlude part of the code
var dataHigh = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H);
Imports QRCoder
Dim generator As New QRCodeGenerator()
' Medium — suitable for most generation without logos
Dim dataMedium = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
' High — required when a logo will occlude part of the code
Dim dataHigh = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H)
IronBarcodeのアプローチ:
using IronBarCode;
// Default — equivalent to Medium, applied automatically
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("default-ecc.png");
// Explicit level via QRCodeWriter
var qr = QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.SaveAsPng("high-ecc.png");
using IronBarCode;
// Default — equivalent to Medium, applied automatically
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("default-ecc.png");
// Explicit level via QRCodeWriter
var qr = QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.SaveAsPng("high-ecc.png");
Imports IronBarCode
' Default — equivalent to Medium, applied automatically
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.SaveAsPng("default-ecc.png")
' Explicit level via QRCodeWriter
Dim qr = QRCodeWriter.CreateQrCode( _
"https://example.com", _
500, _
QRCodeWriter.QrErrorCorrectionLevel.Highest _
)
qr.SaveAsPng("high-ecc.png")
レベルマッピングは次のとおりです: ECCLevel.L → Low, ECCLevel.M → Medium, ECCLevel.Q → High, ECCLevel.H → Highest。
ロゴ埋め込み
どちらのライブラリも、QRコードへのロゴ埋め込みに対応しています。 QRCoderはPngByteQRCodeではなく)を通じてこれをルーティングします。 IronBarcodeは、URLとロゴの両方のファイルパスを受け付ける専用のファクトリメソッドとしてQRCodeWriter.CreateQrCodeWithLogo()を提供します。 QRコードスタイルのカスタマイズガイドでは、ロゴのサイズ、配置、色の組み合わせオプションについて説明しています。
QRCoderのアプローチ:
using QRCoder;
using System.Drawing;
using System.Drawing.Imaging;
var generator = new QRCodeGenerator();
// ECCLevel.H is required — the logo occludes part of the code
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H);
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", ImageFormat.Png);
using QRCoder;
using System.Drawing;
using System.Drawing.Imaging;
var generator = new QRCodeGenerator();
// ECCLevel.H is required — the logo occludes part of the code
var qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H);
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", ImageFormat.Png);
Imports QRCoder
Imports System.Drawing
Imports System.Drawing.Imaging
Dim generator As New QRCodeGenerator()
' ECCLevel.H is required — the logo occludes part of the code
Dim qrCodeData = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H)
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", ImageFormat.Png)
IronBarcodeのアプローチ:
using IronBarCode;
QRCodeWriter.CreateQrCodeWithLogo("https://example.com", "logo.png", 500)
.SaveAsPng("qr-logo.png");
using IronBarCode;
QRCodeWriter.CreateQrCodeWithLogo("https://example.com", "logo.png", 500)
.SaveAsPng("qr-logo.png");
Imports IronBarCode
QRCodeWriter.CreateQrCodeWithLogo("https://example.com", "logo.png", 500) _
.SaveAsPng("qr-logo.png")
CreateQrCodeWithLogoはコンテンツとロゴ画像の両方に対するファイルパス文字列を受け入れます。 ロゴ埋め込みに必要なレベルまでエラー訂正が自動的に設定されます; 明確なECC構成は不要です。
ペイロードジェネレーター.WiFi移行
QRCoderのPayloadGenerator.WiFiは、標準のWiFi QRペイロード文字列をフォーマットします。 出力フォーマットはQRコード仕様で定義されたパブリックスタンダード(WIFI:T:{auth};S:{ssid};P:{password};;)です。 移行時には、これらの文字列を直接構築できます。
QRCoderのアプローチ:
using QRCoder;
var wifi = new PayloadGenerator.WiFi(
ssid: "OfficeNetwork",
password: "SecurePass123",
authenticationMode: PayloadGenerator.WiFi.Authentication.WPA
);
// wifi.ToString() produces: WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;
var generator = new QRCodeGenerator();
var qrData = generator.CreateQrCode(wifi.ToString(), QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrData);
System.IO.File.WriteAllBytes("wifi.png", qrCode.GetGraphic(10));
using QRCoder;
var wifi = new PayloadGenerator.WiFi(
ssid: "OfficeNetwork",
password: "SecurePass123",
authenticationMode: PayloadGenerator.WiFi.Authentication.WPA
);
// wifi.ToString() produces: WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;
var generator = new QRCodeGenerator();
var qrData = generator.CreateQrCode(wifi.ToString(), QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrData);
System.IO.File.WriteAllBytes("wifi.png", qrCode.GetGraphic(10));
Imports QRCoder
Dim wifi = New PayloadGenerator.WiFi(
ssid:="OfficeNetwork",
password:="SecurePass123",
authenticationMode:=PayloadGenerator.WiFi.Authentication.WPA
)
' wifi.ToString() produces: WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;
Dim generator = New QRCodeGenerator()
Dim qrData = generator.CreateQrCode(wifi.ToString(), QRCodeGenerator.ECCLevel.M)
Dim qrCode = New PngByteQRCode(qrData)
System.IO.File.WriteAllBytes("wifi.png", qrCode.GetGraphic(10))
IronBarcodeのアプローチ:
using IronBarCode;
// Construct the standard WiFi QR string directly
string wifiPayload = "WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;";
BarcodeWriter.CreateBarcode(wifiPayload, BarcodeEncoding.QRCode)
.ResizeTo(300, 300)
.SaveAsPng("wifi.png");
using IronBarCode;
// Construct the standard WiFi QR string directly
string wifiPayload = "WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;";
BarcodeWriter.CreateBarcode(wifiPayload, BarcodeEncoding.QRCode)
.ResizeTo(300, 300)
.SaveAsPng("wifi.png");
Imports IronBarCode
' Construct the standard WiFi QR string directly
Dim wifiPayload As String = "WIFI:T:WPA;S:OfficeNetwork;P:SecurePass123;;"
BarcodeWriter.CreateBarcode(wifiPayload, BarcodeEncoding.QRCode) _
.ResizeTo(300, 300) _
.SaveAsPng("wifi.png")
多くのPayloadGeneratorタイプ(vCard、CalendarEvent、Geo、SMS)を使用するチームの場合、アプローチは同じです: 各ジェネレータが.ToString()出力を使用して生成するフォーマットされた文字列を識別した後、直接または小さな静的ヘルパーメソッドでその文字列を構築します。
QRCoderAPIとIronBarcodeのマッピングリファレンス
| QRCoder | IronBarcode | ノート |
|---|---|---|
new QRCodeGenerator() |
静的クラス - インスタンスなし | BarcodeWriterはインスタンス化を必要としません |
qrGenerator.CreateQrCode(data, ECCLevel.M) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode) |
直接交換可能 |
new PngByteQRCode(qrCodeData) |
不要 | レンダリングは流暢なチェーンの一部です |
byte[]を返します |
.ToPngBinaryData() |
.ResizeTo(w, h)でサイズを指定 |
File.WriteAllBytes(path, bytes)パターン |
.SaveAsPng(path) |
GeneratedBarcodeのターミナルメソッド |
new SvgQRCode(qrCodeData).GetGraphic(10) |
.SaveAsImage(path) |
SVG出力には.svgエクステンションを渡します |
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.High |
|
QRCodeGenerator.ECCLevel.H |
QRCodeWriter.QrErrorCorrectionLevel.Highest |
ロゴの埋め込みに必要です |
PayloadGenerator.WiFi(...).ToString() |
"WIFI:T:WPA;S:{ssid};P:{pass};;" |
標準文字列を直接構築する |
PayloadGenerator.ContactData(...).ToString() |
"BEGIN:VCARD\n..." |
vCardは公開標準です |
| 読み取りAPIはありません | BarcodeReader.Read(path) |
新機能 - 別個のライブラリは不要 |
| QRコード形式のみ | 50以上のフォーマットがBarcodeEncoding.*により可能です |
新機能 |
一般的な移行の問題と解決策
問題1:ペイロードジェネレーターの文字列フォーマットの変更
QRCoder: PayloadGenerator.ContactData、および他のヘルパーはフォーマットされた文字列を自動的に生成します。 コードはヘルパーオブジェクトのCreateQrCodeに渡します。
Solution: 各PayloadGeneratorタイプが生成する文字列を特定します — その形式はQRコード仕様に文書化されており、再生成は簡単です。 WiFiの場合: WIFI:T:WPA;S:{ssid};P:{password};;。 vCardの場合: 標準的なBEGIN:VCARD / END:VCARDブロック。 複数の呼び出しサイトで同じペイロードタイプを使用する場合は、静的ヘルパーメソッドを記述してください。
public static string WifiPayload(string ssid, string password, string auth = "WPA")
=> $"WIFI:T:{auth};S:{ssid};P:{password};;";
public static string WifiPayload(string ssid, string password, string auth = "WPA")
=> $"WIFI:T:{auth};S:{ssid};P:{password};;";
Public Shared Function WifiPayload(ssid As String, password As String, Optional auth As String = "WPA") As String
Return $"WIFI:T:{auth};S:{ssid};P:{password};;"
End Function
問題2:ECCLevel列挙型マッピング
QRCoder: Hを持つネストされた列挙型です。 それは、毎CreateQrCode呼び出しに必要なパラメータです。
Solution: QRCodeWriter.QrErrorCorrectionLevel相当物にマップします。 BarcodeWriter.CreateBarcodeを使用する場合、ECCレベルは自動的にMediumにデフォルトされ、パラメータは必要ありません。 各呼び出しサイトを更新する:
//QRCoderECCLevel.H → IronBarcode QrErrorCorrectionLevel.Highest
var qr = QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);
//QRCoderECCLevel.M → IronBarcode default (no parameter needed)
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode);
//QRCoderECCLevel.H → IronBarcode QrErrorCorrectionLevel.Highest
var qr = QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);
//QRCoderECCLevel.M → IronBarcode default (no parameter needed)
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode);
Imports IronBarcode
'QRCoderECCLevel.H → IronBarcode QrErrorCorrectionLevel.Highest
Dim qr = QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
'QRCoderECCLevel.M → IronBarcode default (no parameter needed)
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
問題3:レンダラークラスの削除
QRCoder: 各出力形式には独自のレンダラクラスのインスタンス化が必要です — PngByteQRCode, SvgQRCode, AsciiQRCode, Base64QRCode, QRCode。 これらのクラスはGetGraphicを公開します。
解決策:すべてのレンダラークラスのインスタンス化を削除します。 IronBarcodeは、フォーマット出力を流暢なチェーンのターミナルメソッドに組み込みます。 new PngByteQRCode(data).GetGraphic(n)を .ToPngBinaryData() に.ResizeTo()後に置き換えます。 .svgエクステンションを渡す)に置き換えます。 QRCodeData中間オブジェクトも消える — IronBarcodeでは必要ありません。
問題4:PngByteQRCodeの削除とモジュールベースのサイズ設定
QRCoder: PngByteQRCode.GetGraphic(int pixelsPerModule)がQRモジュールごとのピクセル数で出力をサイズします。 生成される画像サイズはモジュール数に依存し、モジュール数はコンテンツの長さとECCレベルによって変化します。
Solution: モジュールベースのサイズ設定をResizeTo(int width, int height)に置き換え、絶対ピクセル寸法を使用します。 コードがモジュール数から動的に予想される出力サイズを計算していた場合は、出力要件を満たす固定のターゲットサイズに切り替えてください。
// Before: GetGraphic(20) — output size varies with content
var bytes = new PngByteQRCode(qrData).GetGraphic(20);
// After: fixed 400×400 regardless of content
byte[] bytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
.ResizeTo(400, 400)
.ToPngBinaryData();
// Before: GetGraphic(20) — output size varies with content
var bytes = new PngByteQRCode(qrData).GetGraphic(20);
// After: fixed 400×400 regardless of content
byte[] bytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
.ResizeTo(400, 400)
.ToPngBinaryData();
Imports System
' Before: GetGraphic(20) — output size varies with content
Dim bytes = New PngByteQRCode(qrData).GetGraphic(20)
' After: fixed 400×400 regardless of content
Dim bytes As Byte() = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode) _
.ResizeTo(400, 400) _
.ToPngBinaryData()
QRCoder移行チェックリスト
マイグレーション前のタスク
変更を加える前に、コードベース全体におけるQRCoderの使用状況を監査してください。
# Find allQRCodernamespace imports
grep -r "using QRCoder" --include="*.cs" .
# Find all generator and renderer instantiations
grep -r "QRCodeGenerator\|PngByteQRCode\|SvgQRCode\|AsciiQRCode\|QRCode\b" --include="*.cs" .
# Find all PayloadGenerator usages
grep -r "PayloadGenerator\." --include="*.cs" .
# Find ECCLevel references
grep -r "ECCLevel\." --include="*.cs" .
# Find ZXing.Net usage to remove at the same time
grep -r "using ZXing" --include="*.cs" .
# Find allQRCodernamespace imports
grep -r "using QRCoder" --include="*.cs" .
# Find all generator and renderer instantiations
grep -r "QRCodeGenerator\|PngByteQRCode\|SvgQRCode\|AsciiQRCode\|QRCode\b" --include="*.cs" .
# Find all PayloadGenerator usages
grep -r "PayloadGenerator\." --include="*.cs" .
# Find ECCLevel references
grep -r "ECCLevel\." --include="*.cs" .
# Find ZXing.Net usage to remove at the same time
grep -r "using ZXing" --include="*.cs" .
- 使用中のすべての
PayloadGeneratorタイプを文書化し、その文字列出力フォーマットを記録します - 使用されているすべての ECC レベルの値とその呼び出し箇所をメモする
- QRCoderとペアになっていたZXing .NETの読み取りコードを特定し、同時に置き換える。 IronBarcodeのライセンスキーを入手してください(登録不要の試用版キーも利用可能です)。
コード更新タスク
dotnet remove package QRCoderを実行します- QRCoderと共にのみ読み取りに使用された場合、
dotnet remove package ZXing.Netを実行します dotnet add package IronBarcodeを実行しますIronBarCode.License.LicenseKey = "YOUR-KEY";をアプリケーション起動時に追加します- すべての
using IronBarCode;に置き換えます - すべての
new QRCodeGenerator()インスタンス宣言を削除します —BarcodeWriterは静的です - すべての
generator.CreateQrCode(data, ECCLevel.X)+ レンダラーチェーンパターンをBarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)チェーンに置き換えます .ResizeTo(w, h)をターミナルの前に追加します.SaveAsPng(path)ターミナルメソッドに置き換えます.svgエクステンションを渡す)に置き換えますPayloadGenerator.WiFi(...)や他のヘルパーのインスタンス化を直接フォーマット文字列に置き換えます- 各
QRCodeWriter.QrErrorCorrectionLevel等価物にマップします - ZXing.Netの
BarcodeReader.Read(path)に置き換えます - ロゴ埋め込みの場合、
QRCodeWriter.CreateQrCodeWithLogo(data, logoPath, size)に置き換えます
移行後のテスト
生成されたすべてのQRコードを、少なくとも2つの独立したQRコードスキャナーアプリケーションでスキャンして、読み取り可能性を確認してください。
- ロゴ埋め込みQRコードが正しくスキャンされることを確認します — エラー訂正レベルが
Highestであることを確認します 生成されたコードの視覚的な出力を、外観の一貫性が求められる移行前のサンプルと比較する。 - すべての
PayloadGenerator置き換えをテストし、WiFi、vCard、および他のペイロード文字列がターゲットデバイス上で正しくデコードされることを確認します - ZXing.Netも削除された場合、すべてのバーコード読み取りパスが
BarcodeReader.Readを通じて機能することを確認します - クリーンな環境でアプリケーションを実行し、残留するQRCoderまたは ZXing .NET参照がバインディングエラーの原因となっていないことを確認してください。
- IronBarcodeのライセンスキーが本番環境とステージング環境で正しくロードされていることを検証します。
IronBarcodeへの移行の主なメリット
すべてのバーコード操作のための単一API: 移行後、すべてのバーコードタスク — 生成、読み取り、PDFスタンプ — はIronBarCodeネームスペースと同じエントリーポイントを使用します。 プロジェクトに参加する開発者は、3つのAPIではなく、1つのAPIを習得することになります。 バーコードサブシステム全体におけるコードレビューの一貫性が確保される。 ドキュメント検索は一元化されています。
セカンドライブラリを使わずにバーコード読み取り: BarcodeReader.Readは画像ファイル、PDFページ、ストリーム、およびインメモリビットマップを自動フォーマット検出で処理します。 従来はフォーマット仕様の要件やスレッドセーフティの考慮事項など、ZXing .NETを必要としていた読み取り機能が、単一のメソッド呼び出しで即座に利用できるようになりました。 画像からのバーコード読み取りガイドでは、複数バーコードの検出、画像の前処理、およびPDFページの走査について解説しています。
新たな依存関係なしでのフォーマット拡張: 移行後にCode 128、EAN-13、DataMatrix、PDF417または他のサポートされるフォーマットを追加するには、異なるBarcodeEncodingパラメータ値を記述するだけです。 新たにインストールするパッケージも、学習する新しいAPIも、管理するバージョン互換性の問題もありません。 新しいフォーマット要件は、新しいライブラリとの統合ではなく、たった1行の変更で済む。
単純化されたQRコードカスタマイズ: ロゴ埋め込み、色変更、クワイエットゾーン制御はQRCodeWriter結果上の名前付きメソッドとして利用可能です。 QRCoderがロゴ埋め込みに必要とするSystem.Drawing.Bitmap依存関係は、単純なファイルパス文字列に置き換えられます。 QRコードスタイルのカスタマイズガイドには、利用可能なすべてのカスタマイズオプションが記載されています。
PDF統合機能が内蔵されています:受信したPDF文書からバーコードを読み取り、PDFライブラリを追加することなく既存のPDFファイルにバーコードを挿入できます。 これまでPDFへの依存が別途必要だった文書処理ワークフローにおいて、バーコードとPDFの機能が統合されました。
長期的なメンテナンスのオーバーヘッドの削減: 3つまたは4つの独立したパッケージから1つのパッケージに移行することで、複数のリリースサイクルを追跡したり、ライブラリ間のバージョン競合を解決したり、 .NETのバージョンが進むにつれて複数のテストスイートを更新したりといった、累積的なオーバーヘッドが解消されます。 バーコードサブシステムの保守コストは、単一のパッケージへの依存にまで削減される。
よくある質問
なぜQRCoder.NETからIronBarcodeに移行する必要があるのですか?
一般的な理由としては、ライセンスの簡素化(SDK + ランタイムキーの複雑さの排除)、スループット制限の排除、ネイティブPDFサポートの獲得、Docker/CI/CDデプロイの改善、プロダクションコード内のAPI定型文の削減などが挙げられます。
QRCoderのAPIコールをIronBarcodeに置き換えるには?
インスタンスの作成とライセンスの定型文をIronBarCode.License.LicenseKey = "key "に置き換えてください。リーダー・コールをBarcodeReader.Read(path)に、ライター・コールをBarcodeWriter.CreateBarcode(data, encoding)に置き換えてください。静的メソッドはインスタンス管理を必要としません。
QRCoder.NETからIronBarcodeに移行する際、コードはどのくらい変更されますか?
ほとんどのマイグレーションでは、コード行数は少なくなります。ライセンスの定型文、インスタンス・コンストラクタ、明示的なフォーマット設定が削除されます。コアとなる読み取り/書き込み操作は、より短いIronBarcodeに対応し、よりきれいな結果オブジェクトが得られます。
移行中にQRCoder.NETとIronBarcodeの両方をインストールしておく必要がありますか?
ほとんどのマイグレーションは、並列操作ではなく、直接置き換えです。一度に1つのサービスクラスを移行し、NuGet参照を置き換え、インスタンス化とAPI呼び出しパターンを更新してから次のクラスに移行します。
IronBarcodeのNuGetパッケージ名は何ですか?
パッケージは'IronBarcode'(大文字のBとC)です。Install-Package IronBarcode'または'dotnet add package IronBarcode'でインストールしてください。コード中のusingディレクティブは'using IronBarcode;'である。
IronBarcode はQRCoder.NETと比較して、どのようにDockerデプロイを簡素化しますか?
IronBarcodeは外部SDKファイルやマウントされたライセンス設定のないNuGetパッケージです。Dockerでは、IRONBARCODE_LICENSE_KEY環境変数を設定すると、パッケージが起動時にライセンス検証を処理します。
QRCoderから移行した後、IronBarcodeはすべてのバーコードフォーマットを自動的に検出しますか?
IronBarcodeは、サポートされているすべてのフォーマットのシンボルを自動検出します。明示的なBarcodeTypesの列挙は必要ありません。フォーマットが既に知られていて、パフォーマンスが重要な場合、BarcodeReaderOptionsは最適化として検索空間を制限することができます。
IronBarcodeは別のライブラリなしでPDFからバーコードを読み取ることができますか?
BarcodeReader.Read("document.pdf")は、PDFファイルをネイティブに処理します。結果には、見つかった各バーコードの PageNumber、Format、Value、および Confidence が含まれます。外部のPDFレンダリングステップは必要ありません。
IronBarcodeはどのようにパラレルバーコード処理を行うのですか?
IronBarcodeの静的メソッドはステートレスでスレッドセーフです。Parallel.ForEachをスレッドごとのインスタンス管理なしにファイルリスト上で直接使用します。BarcodeReaderOptions.MaxParallelThreadsは内部のスレッドバジェットを制御します。
QRCoder.NETからIronBarcodeに移行すると、どのような結果プロパティが変更されますか?
一般的なリネーム:BarcodeValueはValueに、BarcodeTypeはFormatに。IronBarcodeの結果にはConfidenceとPageNumberも追加されます。ソリューション全体の検索と置換は、既存の結果処理コードで名前の変更を処理します。
CI/CDパイプラインでIronBarcodeのライセンスを設定するには?
IRONBARCODE_LICENSE_KEYをパイプラインシークレットとして保存し、アプリケーションの起動コードにIronBarCode.License.LicenseKeyを割り当てます。1つのシークレットで、開発環境、テスト環境、ステージング環境、本番環境を含むすべての環境をカバーできます。
IronBarcodeはカスタムスタイルのQRコード生成に対応していますか?
はい。QRCodeWriter.CreateQrCode()は、ChangeBarCodeColor()によるカスタムカラー、AddBrandLogo()によるロゴ埋め込み、設定可能なエラー訂正レベル、PNG、JPG、PDF、ストリームなどの複数の出力形式をサポートしています。

