求助:无需System.Drawing.Common的C#二维码生成方案(含Gdip异常)
可行的C#二维码生成方案(无System.Drawing.Common依赖)
下面是几个不依赖System.Drawing.Common的.NET二维码生成方案,适配你的API返回base64编码需求:
方案1:ZXing.Net.Bindings.ImageSharp
ZXing.Net提供了基于ImageSharp的绑定,ImageSharp是跨平台的图像处理库,可完全替代System.Drawing.Common。
- 安装NuGet包:
Install-Package ZXing.Net.Bindings.ImageSharp.V2
- 生成二维码并转为base64的代码示例:
using ZXing; using ZXing.ImageSharp; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; using System.IO; public string GenerateQrCodeBase64(string content, int width = 300, int height = 300) { var writer = new BarcodeWriterPixelData { Format = BarcodeFormat.QR_CODE, Options = new QrCodeEncodingOptions { Width = width, Height = height, Margin = 1 } }; // 生成二维码像素数据 var pixelData = writer.Write(content); // 转换为ImageSharp图像对象 using var image = Image.LoadPixelData<Rgba32>(pixelData.Pixels, pixelData.Width, pixelData.Height); // 将图像转为PNG字节流 using var ms = new MemoryStream(); image.SaveAsPng(ms); // 转为base64字符串返回 return Convert.ToBase64String(ms.ToArray()); }
方案2:QRCoder + ImageSharp扩展
QRCoder是轻量型二维码生成库,搭配其ImageSharp扩展包可彻底摆脱System.Drawing依赖。
- 安装NuGet包:
Install-Package QRCoder Install-Package QRCoder.ImageSharp
- 代码示例:
using QRCoder; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; using System.IO; public string GenerateQrCodeBase64(string content, int size = 300) { using var qrGenerator = new QRCodeGenerator(); using var qrCodeData = qrGenerator.CreateQrCode(content, QRCodeGenerator.ECCLevel.Q); using var qrCode = new ImageSharpQRCode(qrCodeData); // 生成ImageSharp格式的二维码图像 using var image = qrCode.GetGraphic(size, Color.Black, Color.White, null); // 转为PNG字节流后生成base64 using var ms = new MemoryStream(); image.SaveAsPng(ms); return Convert.ToBase64String(ms.ToArray()); }
方案3:生成SVG格式二维码(无图像处理库依赖)
如果前端支持SVG渲染,可直接生成SVG字符串再转为base64,完全不需要任何图像处理库,轻量化程度拉满。
借助ZXing.Net.SVG实现:
- 安装NuGet包:
Install-Package ZXing.Net.SVG
- 代码示例:
using ZXing; using ZXing.Svg; using System.Text; public string GenerateQrCodeSvgBase64(string content, int width = 300, int height = 300) { var writer = new BarcodeWriterSvg { Format = BarcodeFormat.QR_CODE, Options = new QrCodeEncodingOptions { Width = width, Height = height, Margin = 1 } }; // 生成SVG格式的二维码字符串 var svgContent = writer.Write(content); // 将SVG字符串转为base64 var svgBytes = Encoding.UTF8.GetBytes(svgContent); return Convert.ToBase64String(svgBytes); }
前端可通过data:image/svg+xml;base64,{生成的base64字符串}直接渲染二维码。
内容的提问来源于stack exchange,提问作者user2344219
相关产品推荐
相关产品推荐

