C#でQRコードを生成する場合、 ZXing.NET と QRCoder の2つが最もよく使われます。 どちらも無料で、業務アプリ・WPF・Web・印刷など幅広く利用できます。
この記事でわかること
・ZXing.NETでQRコード生成(最も簡単)
・QRCoderで高品質QRコード生成(ロゴ合成も可)
・PNG/JPEG/SVG出力
・WPF/WinFormsでの表示
・大量QRコードのバッチ生成
・業務アプリ向けベストプラクティス
・ZXing.NETでQRコード生成(最も簡単)
・QRCoderで高品質QRコード生成(ロゴ合成も可)
・PNG/JPEG/SVG出力
・WPF/WinFormsでの表示
・大量QRコードのバッチ生成
・業務アプリ向けベストプラクティス
1. QRコード生成ライブラリ比較
| 項目 | ZXing.NET | QRCoder |
|---|---|---|
| 特徴 | 軽量・簡単・高速 | 高品質・ロゴ合成・SVG対応 |
| 画像品質 | ○ | ◎(業務向け) |
| ロゴ合成 | △(自前で合成) | ◎(標準対応) |
| 用途 | 簡易QR・大量生成 | 帳票・印刷・ブランドQR |
簡単に作りたい → ZXing 高品質・ロゴ入り → QRCoder
2. ZXing.NETでQRコード生成(最も簡単)
■ 2-1. 基本のQRコード生成
using ZXing;
using ZXing.Common;
var writer = new BarcodeWriterPixelData
{
Format = BarcodeFormat.QR_CODE,
Options = new EncodingOptions
{
Height = 300,
Width = 300,
Margin = 1
}
};
var pixelData = writer.Write("https://example.com");
// PNGとして保存
using var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height,
System.Drawing.Imaging.PixelFormat.Format32bppRgb);
var data = bitmap.LockBits(
new System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height),
System.Drawing.Imaging.ImageLockMode.WriteOnly,
System.Drawing.Imaging.PixelFormat.Format32bppRgb);
System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, data.Scan0, pixelData.Pixels.Length);
bitmap.UnlockBits(data);
bitmap.Save("qrcode_zxing.png");
最小コードでQRコードを生成できるのがZXingの強みです。
3. QRCoderで高品質QRコード生成(ロゴ合成対応)
■ 3-1. 基本のQRコード生成
using QRCoder;
var generator = new QRCodeGenerator();
var data = generator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.Q);
var qr = new QRCode(data);
using var bitmap = qr.GetGraphic(20); // 20px × モジュール数
bitmap.Save("qrcode_qrcoder.png");
QRCoderは印刷・帳票向けの高品質QRコードが作れます。
■ 3-2. ロゴ入りQRコード(ブランドQR)
using var logo = System.Drawing.Image.FromFile("logo.png");
var qrLogo = qr.GetGraphic(
20,
System.Drawing.Color.Black,
System.Drawing.Color.White,
logo,
iconSizePercent: 20,
iconBorderWidth: 2
);
qrLogo.Save("qrcode_logo.png");
ロゴ入りQRは店舗・製品・イベントなどでよく使われます。
4. SVG出力(Web・印刷向け)
■ QRCoderでSVG生成
var svg = new SvgQRCode(data);
string svgText = svg.GetGraphic(5);
File.WriteAllText("qrcode.svg", svgText);
SVGは拡大しても劣化しないため、印刷物に最適です。
5. WPF / WinFormsでQRコードを表示
■ WPFでImageコントロールに表示
var bitmap = qr.GetGraphic(20);
using var ms = new MemoryStream();
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
ms.Position = 0;
var img = new BitmapImage();
img.BeginInit();
img.StreamSource = ms;
img.CacheOption = BitmapCacheOption.OnLoad;
img.EndInit();
MyImageControl.Source = img;
WPFアプリでQRコードをプレビューする場合の定番パターンです。
6. 大量QRコードのバッチ生成(1000件〜1万件)
大量生成する場合は、 Parallel.ForEach + ZXing が最速です。
■ 6-1. 並列QRコード生成
var list = File.ReadAllLines("urls.txt");
Parallel.ForEach(list, url =>
{
var data = generator.CreateQrCode(url, QRCodeGenerator.ECCLevel.Q);
var qr = new QRCode(data);
using var bmp = qr.GetGraphic(20);
var file = $"qr_{Guid.NewGuid()}.png";
bmp.Save(Path.Combine("output", file));
});
CPUコア数をフル活用して高速に生成できます。
7. QRコードのエラー訂正レベル(ECC)
QRコードには4段階のエラー訂正レベルがあります。
| ECC | 誤り訂正率 | 用途 |
|---|---|---|
| L | 7% | データ量重視 |
| M | 15% | 一般用途 |
| Q | 25% | ロゴ入りQR向け |
| H | 30% | 印刷物・汚れに強い |
ロゴ入りQR → Q 印刷物 → H Web用途 → M
8. 業務アプリ向けベストプラクティス
- 簡単に作る → ZXing.NET
- 高品質・ロゴ入り → QRCoder
- 印刷物 → SVG出力
- 大量生成 → Parallel.ForEach + ZXing
- WPF表示 → Bitmap → BitmapImage変換
- ECCレベルは用途に応じて選ぶ(Q or Hが無難)
まとめ:C#のQRコード生成は“ZXing × QRCoder”で完結する
- ZXing → 軽量・高速・簡単
- QRCoder → 高品質・ロゴ合成・SVG対応
- 業務アプリ・帳票・印刷物に最適
「QRコードを自動生成したい」「ロゴ入りQRを作りたい」 という現場のニーズに対して、 C#のQRコード生成は非常に強力な解決策になります。 この記事をベースに、あなたのアプリに最適なQRコード生成フローを設計してみてください。