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#识别图片格式的资料请关注毛票票其它相关文章!