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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:40:27