.NET6跨平台生成1D条形码并转Base64字符串方案求助
跨平台.NET6条形码生成解决方案(适配Windows/MacOS)
问题背景
需要在MacOS的.NET6环境中,将纯数字票号转为1D条形码(UPCA类型),再生成图片/SVG并编码为Base64字符串用于接口返回。原代码使用的BarcodeLib依赖Windows专属API,在MacOS运行时抛出异常,需替换为跨平台方案。
推荐方案:使用ZXing.Net
ZXing.Net是完全开源免费的跨平台条形码库,支持.NET6及以上版本,兼容Windows、MacOS、Linux等系统,支持生成多种1D/2D条形码(包括UPCA),同时支持生成图片和SVG格式。
步骤1:安装NuGet包
在项目中安装必要的依赖包:
dotnet add package ZXing.Net dotnet add package ZXing.Net.Bindings.SkiaSharp dotnet add package ZXing.Net.Svg
步骤2:生成条形码图片并转为Base64
以下代码实现UPCA条形码生成、转为PNG图片并编码为Base64,兼容双平台:
using SkiaSharp; using ZXing; using ZXing.SkiaSharp; using System.IO; string GenerateBarcodeImageToBase64(string ticketId) { var writer = new BarcodeWriterPixelData { Format = BarcodeFormat.UPC_A, Options = new ZXing.Common.EncodingOptions { Width = 290, Height = 120, Margin = 10, ForegroundColor = SKColors.Black.ToArgb(), BackgroundColor = SKColors.White.ToArgb() } }; var pixelData = writer.Write(ticketId); // 将像素数据转为Bitmap并保存为PNG字节流 using var bitmap = new SKBitmap(pixelData.Width, pixelData.Height); using var pixmap = new SKPixmap(pixelData.ToImageInfo(), pixelData.Pixels); bitmap.WritePixels(pixmap); using var ms = new MemoryStream(); bitmap.Encode(ms, SKEncodedImageFormat.Png, 100); return Convert.ToBase64String(ms.ToArray()); } // 调用示例 var ticketId = "038000356216"; var imageBase64 = GenerateBarcodeImageToBase64(ticketId); Console.WriteLine(imageBase64);
步骤3:生成SVG格式条形码并转为Base64
若需体积更小、更适合Web场景的SVG格式,可使用以下代码:
using ZXing; using ZXing.Svg; string GenerateBarcodeSvgToBase64(string ticketId) { var writer = new BarcodeWriterSvg { Format = BarcodeFormat.UPC_A, Options = new ZXing.Common.EncodingOptions { Width = 290, Height = 120, Margin = 10 } }; var svgImage = writer.Write(ticketId); var svgBytes = System.Text.Encoding.UTF8.GetBytes(svgImage.Content); return Convert.ToBase64String(svgBytes); } // 调用示例 var svgBase64 = GenerateBarcodeSvgToBase64(ticketId); Console.WriteLine(svgBase64);
关键说明
ZXing.Net核心库负责条形码编码逻辑,无系统依赖,跨平台通用。SkiaSharp作为跨平台图形渲染库,替代了原方案中依赖Windows的System.Drawing组件,且性能更稳定。- SVG格式无需图形渲染,直接生成XML字符串,体积更小,适合接口返回或Web前端展示。
内容的提问来源于stack exchange,提问作者Thomas Volker
相关产品推荐
相关产品推荐

