c# 识别图片格式的方法
问题窥探
在有些时候,我们拿到了一张图片。这张图片的格式是JPG还是PNG?是BMP还是只有一帧的GIF?虽然在大部分情况下,你确实可以把一张PNG格式的图片保存成JPG,在电脑上也能双击打开看。但如果你要写一些程序来处理图片,那么图片的格式就至关重要了。例如GIF里面有帧信息,而JPG里面却没有,PNG图片有通道信息,而JPG也没有。如果你下载了一张JPG的图片,却尝试用处理GIF的方式去提取帧信息,显然就会导致程序报错。
解决方案
1.通过文件的扩展名来判断
这种方法比较简单,
但若是有人故意改下文件扩展名,这种方法就不起作用了。
2.通过C#自身提供的方法来进行判断(判断某种确定的图片类型)
boolisJPG=false; System.Drawing.Imageimg=System.Drawing.Image.FromFile(filesName); if(img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg)) { isJPG=true; }
3.通过读取文件内容来判断
所有的图片文件都包括:文件识别头和图象数据两部分,
其中文件识别头用来让计算机判断是哪种文件格式。
- JPEG
所有的JPEG文件以字符串“0xFFD8”开头,并以字符串“0xFFD9”结束。依此便可判别是否是JPEG文件。
- BMP
BMP文件以字符串“0x4D42”开头
- GIF
gif头六个是GIF89a或GIF87a
4.读取文件内容转换成二进制流识别,比如.jpg的是255216
示例代码
publicstaticFileExtensionCheckTextFile(stringfileName) { FileStreamfs=newFileStream(fileName,FileMode.Open,FileAccess.Read); System.IO.BinaryReaderbr=newSystem.IO.BinaryReader(fs); stringfileType=string.Empty;; try { bytedata=br.ReadByte(); fileType+=data.ToString(); data=br.ReadByte(); fileType+=data.ToString(); FileExtensionextension; try { extension=(FileExtension)Enum.Parse(typeof(FileExtension),fileType); } catch { extension=FileExtension.VALIDFILE } returnextension; } catch(Exceptionex) { throwex; } finally { if(fs!=null) { fs.Close(); br.Close(); } } } } publicenumFileExtension { JPG=255216, GIF=7173, PNG=13780, SWF=6787, RAR=8297, ZIP=8075, _7Z=55122, VALIDFILE=9999999 //255216jpg; //7173gif; //6677bmp, //13780png; //6787swf //7790exedll, //8297rar //8075zip //551227z //6063xml //6033html //239187aspx //117115cs //119105js //102100txt //255254sql }
以上就是c#识别图片格式的方法的详细内容,更多关于c#识别图片格式的资料请关注毛票票其它相关文章!