小编典典

在C#中验证文件中的图像

c#

我正在从文件加载图像,并且我想知道如何在从文件中完全读取图像之前对其进行验证。

string filePath = "image.jpg";
Image newImage = Image.FromFile(filePath);

当image.jpg并不是真正的jpg时,就会出现问题。例如,如果我创建一个空的文本文件并将其重命名为image.jpg,则在加载image.jpg时将引发OutOfMemory异常。

我正在寻找一个函数,该函数将根据给定的图像流或文件路径来验证图像。

示例函数原型

bool IsValidImage(string fileName);
bool IsValidImage(Stream imageStream);

阅读 256

收藏
2020-05-19

共1个答案

小编典典

JPEG没有正式的标头定义,但是它们确实有少量可使用的元数据。

  • 偏移量0(两个字节):JPEG SOI标记(十六进制FFD8)
  • 偏移2(两个字节):图像宽度(以像素为单位)
  • 偏移量4(两个字节):图像高度(以像素为单位)
  • 偏移量6(字节):分量数(1 =灰度,3 = RGB)

在那之后还有其他几件事,但是那并不重要。

您可以使用二进制流打开文件,并读取此初始数据,并确保OffSet 0为0,OffSet 6为1,2或3。

这至少会给您带来更高的精度。

或者,您可以捕获异常并继续前进,但是我认为您想要挑战:)

2020-05-19