SDWebImage 判断图片类型

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 .

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值