我正在尝试将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上,但也没有显示图像。
答案 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
没有为您提供正确的地址。