如何检查字节数组是否是有效图像?

Dan*_*pez 19 c# image bytearray .net-4.0

我知道没有用于检查的.Net函数,但是在我使用字节数组之前,是否存在一种算法或简单有效的方法来检查字节是否是有效图像.我需要这个,因为我正在向不断收听客户端的服务器发送不同的命令,其中一个命令是获取服务器计算机的屏幕截图.

shf*_*301 35

您可以尝试从字节数组生成图像,并检查ArgumentException它是否不是.

public static bool IsValidImage(byte[] bytes)
{
    try {
        using(MemoryStream ms = new MemoryStream(bytes))
           Image.FromStream(ms);
    }
    catch (ArgumentException) {
       return false;
    }
    return true; 
}
Run Code Online (Sandbox Code Playgroud)

  • 我不认为这符合"在使用字节数组之前检查" (11认同)

Nic*_*rey 9

如上所述,尝试将其加载到映像中是唯一的故障安全方法.您可以根据[预期]图像类型检查magick编号aka文件头.例如,*.PNG文件的前8个八位字节是十六进制:

0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A
Run Code Online (Sandbox Code Playgroud)

http://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header

大多数其他类型的图像文件具有相似的magick数字.

但检查实际上不会告诉您文件是否是有效的图像文件.你所知道的就是magick数字似乎表明它是一个X类型的文件.它仍然可能被截断或以其他方式被破坏,甚至完全是其他东西恰好恰好具有正确的八位字节序列正确的地点.