SDWebImage 判断图片类型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/stupid56862/article/details/78346059

SDWebImage 判断图片类型

判断文件类型方法基本有两种:

  1. 通过文件后缀来判断 (简单,快捷 但是不准确,之前 公司android 客户端禁止用户上传 GIF , 前端默认可以播放 GIF ,有些不老实的用户,直接更改文件后缀,上传图片).
  2. 通过文件头来判断 (将整个文件读取到内存,判断文件类型没有必要) ,图片的格式存在 图片文件的前8个字节中.

下面看下 IOS 框架 SDWebImage 中判断图片格式.

+ (SDImageFormat)sd_imageFormatForImageData:(nullable NSData *)data {
    if (!data) {
        return SDImageFormatUndefined;
    }

    uint8_t c;
    [data getBytes:&c length:1];
    switch (c) {
        case 0xFF:
            return SDImageFormatJPEG;
        case 0x89:
            return SDImageFormatPNG;
        case 0x47:
            return SDImageFormatGIF;
        case 0x49:
        case 0x4D:
            return SDImageFormatTIFF;
        case 0x52:
            // R as RIFF for WEBP
            if (data.length < 12) {
                return SDImageFormatUndefined;
            }

            NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
            if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) {
                return SDImageFormatWebP;
            }
    }
    return SDImageFormatUndefined;
}

很简单. 第一个字节 0xFF 则图片为 JPEG , 为 0x89 则为 PNG …

那么我们来验证下 SDWebImage 是否正确 .

1.Charles 抓包获取JPEG的图片 直接下方点击 hex .
第一列中的数字是文件偏移,从文件起始位置开始,至当前行第二列字节的偏移.(用十六进制表示).此外,每两位数表示一个字节.

这里写图片描述

可以看到以 ff 开头,没毛病 !

抓包看下 PNG图片

这里写图片描述

可以看到以 89 开头,没毛病 !

2.也可以通过 mac 十六进制编辑器查看文件的字节数据 : hexdump 命令 查看文件格式.

mac 命令行

hexdump  /Users/lw/Desktop/wKgBOVnPvhKAYHo1AAOzga-Bneg230.png 

这里写图片描述

看到这张 png 图片文件头第一个字节为 89 .

没有更多推荐了,返回首页