根据文件头判断图片格式

测试代码

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;

        }
时间: 2024-11-05 15:56:56

根据文件头判断图片格式的相关文章

利用文件头判断文件类型

上传文件时经常需要做文件类型判断,例如图片.文档等,普通做法是直接判断文件后缀名,而文艺青年为了防止各种攻击同时也会加上使用文件头信息判断文件类型. 原理很简单:用文件头判断,直接读取文件的前2个字节即可. 1 public class FileUtil { 2 /** 3 * byte数组转换成16进制字符串 4 * 5 * @param src 6 * @return 7 */ 8 private static String bytesToHexString(byte[] src) { 9

PHP判断图片格式的7种方法

以图片 $imgurl = "http://www.php10086.com/wp-content/themes/inove/img/readers.gif"; 为例: 思路1. 把图片名当做字符串来处理,那么判断图片格式的也就是变成了查找“.”号的字符串. 方法一:strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符. echo $ext = strrchr($imgurl,'.'); 输出: .gif 方法二:strrpos()

java 代码判断图片格式后缀名称

/** * 图片判断 */ private static String getFormatName(Object o) { try { // Create an image input stream on the image ImageInputStream iis = ImageIO.createImageInputStream(o); // Find all image readers that recognize the image format Iterator<ImageReader>

javascript判断图片格式

判断图片格式是否正确,可以在前台页面进行判断,也可以在上传的时候进行判断,一下方法是利用javascript在前台页面进行判断: 1.获取图片名称 //从路径中截取图片名[包括后缀名] var path=img.src; 2.获取图片名称(格式)有两种方法获取 (1).获取图片名称(截取方法获得) var filename; if(path.indexOf("/")>0)//如果包含有"/"号 从最后一个"/"号+1的位置开始截取字符串 {

判断图片格式

Linux/Unix下系统判断文件类型并不依据文件名,也即不会根据文件后缀来判断文件的类型.从网上下载了一个图片,没有后缀,希望能够正确判断出格式,以便于共享到其他平台,该怎么办呢? 不同文件类型的文件头部信息不同,比较流行的图片的格式有jpg,png, gif等,下面列出jpg,png,gif文件头(16进制): JPEG (jpg),文件头:FFD8FF PNG (png),文件头:89504E47 GIF (gif),文件头:47494638 有了文件头,判断文件就很容易了.读取图片文件头

【转】python通过文件头判断文件类型

刚刚看到一个好玩的程序,拉过来.原文地址:https://www.ttlsa.com/python/determine-file-type-by-the-file-header/ 侵权删. ==============================分隔线============================== 对于提供上传的服务器,需要对上传的文件进行过滤,否则各种webshell,暴库. import struct # 支持文件类型 # 用16进制字符串的目的是可以知道文件头是多少字节

【CTF杂项】常见文件文件头文件尾格式总结及各类文件头

文件头文件尾总结 JPEG (jpg), 文件头:FFD8FF 文件尾:FF D9PNG (png), 文件头:89504E47 文件尾:AE 42 60 82GIF (gif), 文件头:47494638 文件尾:00 3B ZIP Archive (zip), 文件头:504B0304 文件尾:50 4B TIFF (tif), 文件头:49492A00 文件尾:Windows Bitmap (bmp), 文件头:424D 文件尾:CAD (dwg), 文件头:41433130 文件尾:Ad

常见图片格式详解

标明原作者信息 http://www.cnblogs.com/xiangism 做了几年有关图形.图像的工作,对图片格式算是小有经验,在此写成一文章总结下.虽然一开始并不想讲很理论的东西,但写完后发现几乎全是理论,细想一下关于图片格式的知识本身就是理论的东西,囧~~ 那就力求用最简单的方式将这些"理论"讲清楚吧. 常见的图片格式有bmp, jpg(jpeg), png, gif, webp等. 图像基本数据结构 要讲图片格式还先得从图像的基本数据结构说起.在计算机中, 图像是由一个个像

常见图片格式详解(五)-----GIF

前几篇梳理了常见的几种图片格式,想必大家已经稍微摸出了一些门道.图片的组织格式一般都是分为多个数据段,每一个数据段代表着不同的信息,可能是图像宽高等信息,也可能是开始或结束的标识符,亦或是压缩的数据段.GIF格式也不例外,同样也是按照类似的方式组织,本篇简单梳理梳理. 01 文件头 GIF图片格式的文件头类似于其他的图片格式,同样也有文件标识符,"GIF",在文件中以ASCII码值表示,其后跟着版本号,表示不同的GIF标准版本号.如下图: 02 逻辑屏幕标识符紧跟文件头的是逻辑屏幕标识