c# 识别图片格式的方法

问题窥探

在有些时候,我们拿到了一张图片。这张图片的格式是 JPG 还是 PNG?是 BMP 还是只有一帧的 GIF?虽然在大部分情况下,你确实可以把一张 PNG 格式的图片保存成 JPG,在电脑上也能双击打开看。但如果你要写一些程序来处理图片,那么图片的格式就至关重要了。例如 GIF 里面有帧信息,而JPG 里面却没有,PNG 图片有通道信息,而 JPG 也没有。如果你下载了一张JPG 的图片,却尝试用处理 GIF 的方式去提取帧信息,显然就会导致程序报错。

解决方案

1.通过文件的扩展名来判断

这种方法比较简单, 

但若是有人故意改下文件扩展名,这种方法就不起作用了。

2.通过C#自身提供的方法来进行判断(判断某种确定的图片类型)

bool isJPG = false;

System.Drawing.Image img = 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

示例代码

public static FileExtension CheckTextFile(string fileName)

        {

            FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);

            System.IO.BinaryReader br = new System.IO.BinaryReader(fs);

            string fileType = string.Empty; ;

            try

            {

                byte data = br.ReadByte();

                fileType += data.ToString();

                data = br.ReadByte();

                fileType += data.ToString();

                FileExtension extension;

                try

                {

                    extension = (FileExtension)Enum.Parse(typeof(FileExtension), fileType);

                }

                catch

                {

                    extension=FileExtension.VALIDFILE

                }

                return extension;

            }

            catch (Exception ex)

            {

                throw ex;

            }

            finally

            {

                if (fs != null)

                {

                    fs.Close();

                    br.Close();

                }

            }

        }

    }

    public enum FileExtension

    {

        JPG = 255216,

        GIF = 7173,

        PNG = 13780,

        SWF = 6787,

        RAR = 8297,

        ZIP = 8075,

        _7Z = 55122,

        VALIDFILE=9999999

        // 255216 jpg; 

        // 7173 gif; 

        // 6677 bmp, 

        // 13780 png; 

        // 6787 swf 

        // 7790 exe dll, 

        // 8297 rar 

        // 8075 zip 

        // 55122 7z 

        // 6063 xml 

        // 6033 html 

        // 239187 aspx 

        // 117115 cs 

        // 119105 js 

        // 102100 txt 

        // 255254 sql  

    } 

以上是 c# 识别图片格式的方法 的全部内容, 来源链接: utcz.com/z/317571.html

回到顶部