.NET 6下不依赖System.Drawing.Common生成条形码与二维码方案咨询
.NET 6 跨平台生成条形码/二维码的可行方案
完全无需依赖System.Drawing.Common,可直接在Linux Docker容器中运行,适配原有ZXing.Net的使用习惯,以下是实测可用的方案:
方案1:ZXing.Net + ImageSharp 绑定(最推荐)
这是改动成本最低的方案,直接用ZXing官方维护的ImageSharp绑定实现跨平台渲染,ImageSharp是纯C#实现的跨平台图像库,无系统依赖。
- 依赖安装:安装NuGet包
ZXing.Net、ZXing.Net.Bindings.ImageSharp.V2 - 生成二维码示例代码:
using ZXing; using ZXing.ImageSharp; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; // 初始化写入器 var qrWriter = new BarcodeWriter<Rgba32> { Format = BarcodeFormat.QR_CODE, Options = new ZXing.QrCode.QrCodeEncodingOptions { Width = 300, Height = 300, Margin = 1 } }; // 生成图像 using var qrImage = qrWriter.Write("需要编码的文本内容"); // 保存为文件 await qrImage.SaveAsPngAsync("qrcode.png"); // 如需返回字节流 using var ms = new MemoryStream(); await qrImage.SaveAsPngAsync(ms); byte[] pngBytes = ms.ToArray();
- 生成条形码示例代码,仅需修改格式参数即可:
var barcodeWriter = new BarcodeWriter<Rgba32> { Format = BarcodeFormat.CODE_128, Options = new ZXing.Common.EncodingOptions { Width = 400, Height = 100, Margin = 1, PureBarcode = false // 设为false会自动在下方渲染条码数字 } }; using var barcodeImage = barcodeWriter.Write("123456789012"); await barcodeImage.SaveAsPngAsync("barcode.png");
注意:ImageSharp从V7版本开始对商用场景收费,非商用可免费使用,如需商用免费可选择V6版本的ImageSharp,搭配对应版本的
ZXing.Net.Bindings.ImageSharp绑定包即可。
方案2:ZXing.Net + SkiaSharp 绑定
如果项目已经引入了SkiaSharp相关依赖,可选择该方案,SkiaSharp是谷歌维护的跨平台2D绘图库,无系统依赖。
- 依赖安装:安装NuGet包
ZXing.Net、ZXing.Net.Bindings.SkiaSharp - 示例代码:
using ZXing; using ZXing.SkiaSharp; using SkiaSharp; var writer = new BarcodeWriter { Format = BarcodeFormat.QR_CODE, Options = new ZXing.QrCode.QrCodeEncodingOptions { Width = 300, Height = 300 } }; using var skBitmap = writer.Write("编码内容"); using var pngData = skBitmap.Encode(SKEncodedImageFormat.Png, 100); // 保存到文件 using var fileStream = File.OpenWrite("qrcode.png"); pngData.SaveTo(fileStream);
方案3:轻量原生实现
如果不想引入额外的图像库,也可以直接读取ZXing生成的PixelData的像素数组,手动封装为PNG格式的字节流,适合极简场景使用,无需任何第三方绘图依赖。
内容的提问来源于stack exchange,提问作者ProfNimrod
相关产品推荐
相关产品推荐

