使用C#如何测试文件是jpeg?我应该检查.jpg扩展名吗?
谢谢
几种选择:
您可以检查文件扩展名:
static bool HasJpegExtension(string filename) { // add other possible extensions here return Path.GetExtension(filename).Equals(".jpg", StringComparison.InvariantCultureIgnoreCase) || Path.GetExtension(filename).Equals(".jpeg", StringComparison.InvariantCultureIgnoreCase); }
或检查文件标题中正确的幻数:
static bool HasJpegHeader(string filename) { using (BinaryReader br = new BinaryReader(File.Open(filename, FileMode.Open, FileAccess.Read))) { UInt16 soi = br.ReadUInt16(); // Start of Image (SOI) marker (FFD8) UInt16 marker = br.ReadUInt16(); // JFIF marker (FFE0) or EXIF marker(FFE1) return soi == 0xd8ff && (marker & 0xe0ff) == 0xe0ff; } }
另一种选择是加载图像并检查正确的类型。但是,这效率较低(除非无论如何都要加载图像),但可能会为您提供最可靠的结果(请注意加载和解压缩以及可能的异常处理的额外费用):
static bool IsJpegImage(string filename) { try { using (System.Drawing.Image img = System.Drawing.Image.FromFile(filename)) { // Two image formats can be compared using the Equals method // See http://msdn.microsoft.com/en-us/library/system.drawing.imaging.imageformat.aspx // return img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg); } } catch (OutOfMemoryException) { // Image.FromFile throws an OutOfMemoryException // if the file does not have a valid image format or // GDI+ does not support the pixel format of the file. // return false; } }