You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:06:04