c# - 从 ByteString 识别光栅(jpg、png 等)或 svg 文件格式

标签 c# wpf svg

在 C#(.NET FW 4.5)中,有没有办法了解字节串是否包含 .svg 文件或任何光栅文件?我使用这个例程:

[...]
byte[] img = System.Convert.FromBase64String(res);
ctrlImage = new BitmapImage();
ctrlImage.BeginInit();
MemoryStream ms = new MemoryStream(img);                                        
ctrlImage.StreamSource = ms;
ctrlImage.EndInit();

将流转换为 BitmpatImage,但现在我需要验证 res 是否包含 svg 文件而不是光栅文件。

谢谢。

最佳答案

SVG 文件格式基于 XML。因此,您可以尝试从图像缓冲区中解码文本字符串并检查它是否以 <?xml 开头。或 <svg :

bool isSvg = false;

try
{
    var text = Encoding.UTF8.GetString(img);
    isSvg = text.StartsWith("<?xml ") || text.StartsWith("<svg ");
}
catch
{
}

或者您可能只是检查缓冲区中的第一个字节是否为 < ,因为光栅图像格式不以该字符开头:

bool isSvg = img[0] == '<';

关于c# - 从 ByteString 识别光栅(jpg、png 等)或 svg 文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24774453/

相关文章:

javascript - d3js 树布局中的对 Angular 线路径看起来不正确

c# - 从内存中的多个文件创建 zip

c# - netTiers 如何传递数据?

c# - 创建具有不同边缘/侧面的边框

wpf - 如何在不知道进度动画的完成度的情况下显示进度动画?

c# - 如何在 WPF 中将标签文本居中?

javascript - D3.js 右键单击​​打开弹出窗口但弹出窗口关闭时不影响源 svg

c# - 如何使 EF 通过 GroupJoin 急切加载集合导航属性?

C# FiddlerCore API 捕获数据

javascript - 如何将 d3.xml 加载的 svg 附加到 svg 中