美文网首页iOS点点滴滴
根据文件识别头信息获取图片文件的类型

根据文件识别头信息获取图片文件的类型

作者: phzean | 来源:发表于2016-04-05 14:52 被阅读391次

一、概述

有时候单单获取图片的后缀名是无法判断该图片的类型,因此我们需要一种更准确的识别方式:读取图片数据的文件识别头。(每一个图片都由识别头+data组成)

二、一些已知的图片文件头标识

  1. JPEG
    文件头标识 (2 bytes): 0xff, 0xd8 (SOI) (JPEG 文件标识)
    文件结束标识 (2 bytes): 0xff, 0xd9 (EOI)

  2. TGA
    未压缩的前5字节 00 00 02 00 00
    RLE压缩的前5字节 00 00 10 00 00

  3. PNG
    文件头标识 (8 bytes) 89 50 4E 47 0D 0A 1A 0A

  4. GIF
    文件头标识 (6 bytes) 47 49 46 38 39(37) 61 (G I F 8 9 (7) a)

  5. BMP
    文件头标识 (2 bytes) 42 4D (B M)

  6. PCX
    文件头标识 (1 bytes) 0A

  7. TIFF
    文件头标识 (2 bytes) 4D 4D 或 49 49

  8. ICO
    文件头标识 (8 bytes) 00 00 01 00 01 00 20 20

  9. CUR
    文件头标识 (8 bytes) 00 00 02 00 01 00 20 20

  10. IFF
    文件头标识 (4 bytes) 46 4F 52 4D (F O R M)

  11. ANI
    文件头标识 (4 bytes) 52 49 46 46(R I F F)

三、代码判断

+ (NSString *)sd_contentTypeForImageData:(NSData *)data {
    uint8_t c;
    [data getBytes:&c length:1];
    switch (c) {
        case 0xFF:
            return @"image/jpeg";
        case 0x89:
            return @"image/png";
        case 0x47:
            return @"image/gif";
        case 0x49:
        case 0x4D:
            return @"image/tiff";
        case 0x0A:
            return @"image/pca";
        case 0x52:
            // R as RIFF for WEBP
            if ([data length] < 12) {
                return nil;
            }
            
            NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
            if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) {
                return @"image/webp";
            }
            
            return nil;
    }
    return nil;
  }

相关文章

  • 根据文件识别头信息获取图片文件的类型

    一、概述 有时候单单获取图片的后缀名是无法判断该图片的类型,因此我们需要一种更准确的识别方式:读取图片数据的文件识...

  • file命令

    命令简介: 该命令用来识别文件类型,也可用来辨别一些文件的编码格式。它是通过查看文件的头部信息来获取文件类型,而不...

  • iOS捷径:文件信息

    文件信息 获取文件和图片的详细信息,同时支持文件,图片,视频输入,并支持多文件同时输入。运行后输出文件哈希值,可作...

  • 多线程网络06

    1 获取文件的MIMEType 1.1 部分文件的MIMEType 类型文件拓展名MIMEType图片pngima...

  • 设置github项目的语言

    把项目上传到github之后,github是根据项目里文件数目最多的文件类型识别项目类型。有的时候识别的不准确。我...

  • iOS 常用控件之NSString的文件路径操作

    字符串 获取文件名(带格式) 获取文件路径(不带文件) 获取文件路径(带文件不带类型) 获取文件类型

  • 获取文件夹里面某一种类型文件的数量

    有时需要获取文件夹里面图片或视频文件的个数,用到该方法. 1.获取文件夹里面的图片数量. (1).定义需要的类型,...

  • jsp中的文件操作

    一、获取文件信息 jsp中获取文件的信息主要使用file文件,用来获取的文件信息包括文件所在的目录、文件的长度、文...

  • 文件上传类型判断

    上传图片或者文件的时候需要判断文件类型,一些新手直接就根据文件后缀来判断了,这是错误的。我们应根据文件头查看文件类...

  • ffmpeg android视频解码

    解码流程: 获取文件信息,数据存储在AVFormatContext里面根据AVFormatContext获取对应的...

网友评论

    本文标题:根据文件识别头信息获取图片文件的类型

    本文链接:https://www.haomeiwen.com/subject/keyplttx.html