【问题标题】:Svg to base64 without third party libraries c#svg 到 base64 没有第三方库 c#
【发布时间】:2020-06-30 03:13:23
【问题描述】:

我正在尝试将 svg 图像 URL 转换为 base 64,问题是我受到限制,我不能在这个项目中使用第三方库。 有没有办法做到这一点?

我已经尝试过了,但它不起作用。有人说 svg 是一个文件 不是图像,所以DownloadData 无法正常工作。

byte[] imageBytes;
string base64String = string.Empty;
using (WebClient wc = new WebClient())
{
     imageBytes = wc.DownloadData(appSuggestion?.IconUri.AbsoluteUri);
     base64String = Convert.ToBase64String(imageBytes);
}

知道我能做什么吗?

编辑: 我想在自适应卡中的数据 url "data:image/svg+xml;base64,[base64String]" 中使用它作为图像 url,起初我认为自适应卡不支持 svg,但后来我尝试在 chrome 上编写 url,它也没有显示图片。

【问题讨论】:

  • 那么什么不起作用?您的计算机崩溃或冰箱着火了吗?请具体阅读How to Ask
  • 您应该向说 SVG 文件不是图像的人询问更多信息。他们是正确的,它不是像 BMP、GIF、JPEG 和 PNG 文件那样的位图/光栅图像格式。我想真正的问题是你为什么要转换它 base64 格式?您将 base64 数据提供给的东西的格式要求是什么?
  • @TheGeneral 我添加了一个编辑。请检查一下。
  • @AlwaysLearning 我添加了一个解释我在哪里使用它的编辑。你能检查一下吗
  • 您确定 IconUri 提供的是 svg 而不是 ico?

标签: c# .net svg


【解决方案1】:

在这里使用DownloadData 是完全有效的,因为它会将服务器返回的URI 的内容作为byte[] 返回。 base64 转换也是正确的。到目前为止,您所获得的内容将为您提供任何 URI 的 base64 编码内容。我刚刚对此进行了测试,它可以正常工作。

这是我的测试代码,用于从托管在远程 Web 服务器上的 SVG 文件生成 data: URI:

public string SVGUriToDataUri(Uri src)
{
    using (var wc = new System.Net.WebClient())
    {
        var imageBytes = wc.DownloadData(src);
        var imageBase64 = Convert.ToBase64String(imageBytes);
        return "data:image/svg+xml;base64," + {imageBase64};
    }
}

将其输出放入 Chrome 的地址栏中会按预期显示图像。

这是一个从服务器获取 mime 类型的更通用的版本:

public string DownloadAsDataUri(Uri src)
{
    using (var wc = new System.Net.WebClient())
    {
        var imageBytes = wc.DownloadData(src);
        var imageBase64 = Convert.ToBase64String(imageBytes);
        var mimeType = wc.ResponseHeaders["content-type"];
        if (mimeType.Contains(';'))
            mimeType = mimeType.Split(';')[0];
        return $"data:{mimeType};base64,{imageBase64}";
    }
}

如果它是 PNG、BMP、ICO 或任何,当您放置 URI 本身时它就可以工作,那么这应该可以工作。它适用于您发布的图片链接 - SVG。

如果这不起作用,请发布输出的副本,以便我们进行调查。在这一点上,我能想到的唯一其他选择是appSuggestion?.IconUri.AbsoluteUri 没有给你正确的地址。

【讨论】:

  • 感谢您的解释。调试时我检查了appSuggestion?.IconUri.AbsoluteUri,它按预期收到了。我还在 chrome 上再次检查了数据 url,正如你所说,它呈现得很好(“看起来我之前的 url 有问题”)。根据我的认识,我认为这是我使用自适应卡的 MS Teams 的问题。因为adaptivecards支持svg图片就好了
猜你喜欢
  • 2018-01-24
  • 2013-07-12
  • 2015-10-02
  • 2017-02-15
  • 2011-07-02
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
相关资源
最近更新 更多