Dar*_*ryl 18 .net file-format file-type image
我不想依赖文件扩展名.我不知道它是什么类型的图像(.jpg,.png等),我只是想知道文件是否是图像.如果可能的话,我宁愿不使用任何非.NET dll.
我知道如何做到这一点的最好方法如下:
bool isImageFile;
try
{
Image.FromFile(imageFile).Dispose();
isImageFile = true;
}
catch (OutOfMemoryException)
{
isImageFile = false;
}
Run Code Online (Sandbox Code Playgroud)
如上所述:http://msdn.microsoft.com/en-us/library/stf701f5.aspx,如果文件不是有效的图像格式,则Image.FromFile()抛出一个OutOfMemoryException.使用上面给出了我想要的结果,但是由于以下原因我不想使用它:
Image.FromFile()将整个图像文件(如果是图像文件)加载到内存中.这是浪费我假设因为我只需要文件类型,并且在我的代码中此时不需要进行任何进一步的图像处理.OutOfMemoryExceptions,因为如果有一个真正的内存不足问题,我的程序吞下它并继续前进?有没有更好的方法来做到这一点?或者,我上面列出的任何/所有问题都是无根据的?
编辑:自从收到答案后,这些是我现在知道的三个解决方案:
Image.FromFile()try-catch 将整个图像加载到内存中.
(我没有看到明确的"赢家",因为我可以想象每个人都适合的情况.对于我的应用程序的目的,文件类型检查不经常发生,方法1的性能问题不是问题.)
taw*_*man 11
如果您只支持少数流行的图像格式,那么您只需读取文件的前几个字节即可根据幻数确定类型
提供的链接示例: