没有第三方库的SVG到Base64 C#

时间:2020-06-30 03:13:23

标签: c# .net svg

我正在尝试将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上,但也没有显示图像。

1 个答案:

答案 0 :(得分:2)

在这里使用DownloadData是完全有效的,因为它将以byte[]的形式返回服务器返回的URI的内容。 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没有为您提供正确的地址。