qrcoder是c#生成二维码最轻量稳定的选择,无需sdk或系统组件,nuget一行安装、5行代码出图;它封装了编码规则与掩码逻辑,全平台兼容,避免system.drawing跨平台限制。

用 QRCoder 是目前 C# 生成二维码最轻量、最稳定的选择,不需要安装庞大 SDK 或调用系统组件,NuGet 一行就能装好,5 行代码就能出图。
为什么不用 System.Drawing 自己画?
自己用 Graphics 绘制二维码需要处理编码规则(如 Reed-Solomon)、掩码选择、版本与纠错等级映射——这些逻辑已由成熟库封装。硬写不仅容易出错,还可能生成扫码失败的码图。尤其在 .NET 6+ 中,System.Drawing 在 Linux/macOS 上默认不可用,而 QRCoder 全平台兼容。
QRCoder 安装与基础用法
在项目中执行:
dotnet add package QRCoder或通过 NuGet 包管理器安装
QRCoder 4.x+ 版本(注意:5.x 开始仅支持 .NET 6+,老项目选 4.1.0)。生成 PNG 的典型代码:
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.Q);
var qrCode = new PngByteQRCode(qrData);
byte[] qrBytes = qrCode.GetGraphic(20); // 20 = 每个模块像素数
-
GetGraphic(20)第二个参数是缩放因子,不是分辨率;值太小(如 1)会导致二维码无法识别 - 若需透明背景,改用
PngByteQRCode构造时传入new Color() { A = 0 }作为背景色 - 中文内容必须确保输入字符串编码为 UTF-8(
QRCoder内部自动处理,无需额外转码)
常见报错和绕过方式
错误信息 QRCode data too large for specified version and error correction level 表示内容超长。这不是 bug,是 QR 标准限制:
- 版本 1(21×21 模块)在 L 级纠错下最多存 25 个汉字(UTF-8 编码后约 75 字节)
- 解决方法:降低纠错等级(
ECCLevel.L),或升级版本(QRCodeGenerator.ECCLevel.M→L可多存约 20%) - 更稳妥的方式是先调用
qrGenerator.TryCreateQrCode判断是否可生成,避免运行时异常
高并发场景下别复用 QRCodeGenerator 实例——它无状态,但频繁创建 PngByteQRCode 会触发 GC 压力;建议把 QRCodeGenerator 声明为 static readonly,每次生成新 QRCodeData 即可。











