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

ASP.NET C#中如何将二维码/Base64保存为图片并用于Crystal Report

实现二维码保存到应用程序路径(及Base64转图片保存)

一、直接将生成的二维码Bitmap保存到物理路径

基于你现有的代码,只需在生成二维码Bitmap后添加保存逻辑即可。关键是获取应用程序的物理路径,并确保文件夹存在、权限足够:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        TextBox6.Text = GenerateAndGetString();

        QRCodeGenerator qrGenerator = new QRCodeGenerator();
        QRCodeData qrCodeData = qrGenerator.CreateQrCode(TextBox6.Text, QRCodeGenerator.ECCLevel.Q);
        QRCode qrCode = new QRCode(qrCodeData);

        // 生成二维码Bitmap并自动释放资源
        using (Bitmap bitMap = qrCode.GetGraphic(20))
        {
            // 定义保存目录:应用程序根目录下的QRCode文件夹
            string saveDir = Server.MapPath("~/QRCode/");
            // 目录不存在则创建
            if (!Directory.Exists(saveDir))
            {
                Directory.CreateDirectory(saveDir);
            }
            // 生成唯一文件名(避免重复覆盖)
            string fileName = $"Invoice_QR_{DateTime.Now:yyyyMMddHHmmssfff}.png";
            string fullSavePath = Path.Combine(saveDir, fileName);

            // 保存二维码到物理路径
            bitMap.Save(fullSavePath, ImageFormat.Png);

            // 保留原有的前端显示逻辑
            using (MemoryStream ms = new MemoryStream())
            {
                bitMap.Save(ms, ImageFormat.Png);
                byte[] byteImage = ms.ToArray();
                img.Src = "data:image/png;base64," + Convert.ToBase64String(byteImage);
            }

            // fullSavePath即为图片的物理路径,后续Crystal Report可直接引用该路径
        }
    }
}

二、将Base64编码转换为图片并保存

如果需要单独处理Base64字符串(比如你已经有生成好的Base64编码),可以用以下方法实现保存:

/// <summary>
/// 将Base64字符串转换为图片并保存到指定路径
/// </summary>
/// <param name="base64Str">带前缀或不带前缀的Base64图片字符串</param>
/// <param name="saveFullPath">图片保存的完整物理路径(含文件名)</param>
private void SaveBase64ToImage(string base64Str, string saveFullPath)
{
    // 移除Base64字符串中的前缀(如果存在)
    if (base64Str.StartsWith("data:image/png;base64,"))
    {
        base64Str = base64Str.Substring("data:image/png;base64,".Length);
    }

    // 将Base64转换为字节数组
    byte[] imageBytes = Convert.FromBase64String(base64Str);
    // 写入文件到指定路径
    File.WriteAllBytes(saveFullPath, imageBytes);
}

注意事项

  • 权限配置:确保应用程序池的运行身份对保存目录有写入权限,否则会抛出访问拒绝异常。
  • 文件名唯一性:建议使用时间戳、发票编号等唯一标识作为文件名,避免覆盖已有图片。
  • Crystal Report引用:在报表中调用图片时,使用保存的绝对物理路径,或根据报表配置使用相对路径,确保报表能正确读取图片。

内容的提问来源于stack exchange,提问作者Raja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:50:37