根据文件头判断图片格式

测试代码

byte[] imgb;
            using (FileStream fs = new FileStream(@"D:\favicon.ico", FileMode.Open))
            {
                imgb = new byte[fs.Length];
                fs.Read(imgb, 0, (int)fs.Length);
            }
            string imgtype = imgb.GetImageType();

扩展方法实现

 public static string GetImageType(this byte[] imgb)
        {
            //JPEG/JPG - 文件头标识 (2 bytes): $ff, $d8 (SOI) (JPEG 文件标识) - 文件结束标识 (2 bytes): $ff, $d9 (EOI)
            if (imgb[0]== 0xff && imgb[1] == 0xd8 && imgb[imgb.Length-2] == 0xff && imgb[imgb.Length - 1] == 0xd9 )
            {
                return "JPEG/JPG";
            }
            //TGA - 未压缩的前5字节   00 00 02 00 00 - RLE压缩的前5字节   00 00 10 00 00
            if ((imgb[0] == 0 && imgb[1] == 0 && imgb[2] ==  2 && imgb[3] == 0 && imgb[4] == 0) ||
                (imgb[0] == 0 && imgb[1] == 0 && imgb[2] == 10 && imgb[3] == 0 && imgb[4] == 0))
            {
                return "TGA";
            }
            //PNG - 文件头标识 (8 bytes)   89 50 4E 47 0D 0A 1A 0A
            if (imgb[0] == 0x89 && imgb[1] == 0x50 && imgb[2] == 0x4e && imgb[3] == 0x47 &&
                imgb[4] == 0x0d && imgb[5] == 0x0a && imgb[6] == 0x1a && imgb[7] == 0x0a)
            {
                return "PNG";
            }
            //GIF - 文件头标识 (6 bytes)   47 49 46 38 39(37) 61                         G  I  F  8  9 (7)  a
            if (imgb[0] == 0x47 && imgb[1] == 0x49 && imgb[2] == 0x46 && imgb[3] == 0x38 &&
                (imgb[4] ==0x39 || imgb[4] == 0x37) && imgb[5] == 0x61)
            {
                return "GIF";
            }
            //BMP - 文件头标识 (2 bytes)   42 4D                         B  M
            if (imgb[0] == 0x42 && imgb[1] == 0x4d )
            {
                return "BMP";
            }
            //PCX - 文件头标识 (1 bytes)   0A
            if (imgb[0] == 0x0a)
            {
                return "PCX";
            }
            ///TIFF - 文件头标识 (2 bytes)  4D 4D 或 49 49
            if ((imgb[0] == 0x4d && imgb[1] == 0x4d)|| (imgb[0] == 0x49 && imgb[1] == 0x49))
            {
                return "TIFF";
            }
            //ICO - 文件头标识 (8 bytes)   00 00 01 00 01 00 30 30 
            if (imgb[0] == 0x00 && imgb[1] == 0x00 && imgb[2] == 0x01 && imgb[3] == 0x00 &&
                imgb[4] == 0x01 && imgb[5] == 0x00 && imgb[6] == 0x30 && imgb[7] == 0x30)
            {
                return "ICO";
            }
            //CUR - 文件头标识 (8 bytes)   00 00 02 00 01 00 20 20
            if (imgb[0] == 0x00 && imgb[1] == 0x00 && imgb[2] == 0x02 && imgb[3] == 0x00 &&
               imgb[4] == 0x01 && imgb[5] == 0x00 && imgb[6] == 0x20 && imgb[7] == 0x20)
            {
                return "CUR";
            }
            ///IFF - 文件头标识 (4 bytes)   46 4F 52 4D                        F  O  R  M
            if (imgb[0] == 0x46 && imgb[1] == 0x4f && imgb[2] == 0x52 && imgb[3] == 0x4d)
            {
                return "IFF";
            }
            //ANI - 文件头标识 (4 bytes)   52 49 46 46                         R  I  F  F
            if (imgb[0] == 0x52 && imgb[1] == 0x49 && imgb[2] == 0x46 && imgb[3] == 0x46)
            {
                return "IFF";
            }
            return string.Empty;

        }

 

转载于:https://www.cnblogs.com/sharpmap/p/6182755.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值