判断网络图片的正确格式

之前我们可能会根据图片的后缀名去判断图片的类型,如下:

//假设这是一个网络获取的URL
NSString *path = @"http://pic3.nipic.com/20090709/2893198_075124038_2.gif";
// 判断是否为gif
NSString *extensionName = path.pathExtension;
if ([extensionName.lowercaseString isEqualToString:@"gif"]) {
    //是gif图片
} else {
    //不是gif图片
 }

以上判断看似是可以的,但是这不严谨的, 在不知道图片扩展名的情况下, 如何知道图片的真实类型 ? 其实就是取出图片数据的第一个字节, 就可以判断出图片的真实类型那该怎么做呢如下

//通过图片Data数据第一个字节 来获取图片扩展名
- (NSString *)contentTypeForImageData:(NSData *)data {
    uint8_t c;
    [data getBytes:&c length:1];
    switch (c) {
        case 0xFF:
            return @"jpeg";
        case 0x89:
            return @"png";
        case 0x47:
            return @"gif";
        case 0x49:
        case 0x4D:
            return @"tiff";
        case 0x52:
            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 @"webp";
            }
            return nil;
    }
    return nil;
}

其实图片数据的第一个字节是固定的,一种类型的图片第一个字节就是它的标识, 我们来调用一下这个方法:

//假设这是一个网络获取的URL
NSString *path = @"http://pic.rpgsky.net/images/2016/07/26/3508cde5f0d29243c7d2ecbd6b9a30f1.png";
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:path]];
//调用获取图片扩展名
NSString *string = [self contentTypeForImageData:data];
//输出结果为 png
NSLog(@"%@",string);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 暮色比叹息浓,紧紧地把我罩住。伸手想抓住点什么,——除了空寂,什么也没有。我便蜷缩在孤独里,任凭丝丝酸涩,把心侵蚀...
    溪流娟娟阅读 1,202评论 0 2
  • 很多毕业生希望能投入到运营岗中,认为这个岗位成长性好,未来的选择多。 然而我今天却是劝你远离运营的。作为一个老运营...
    奔跑的汤盆儿阅读 2,784评论 0 0
  • 6.28.我是一名HR招聘者,正式踏入社会的第一步。 25岁,一无所有。 为了一个内心完全没有把握的人,来到一个除...
    baby米拉阅读 1,508评论 0 0
  • 倔强的伫立在 城市的角落 骄阳似火 风如刀割 一群又一群人 无视地走过 他们只关注 娇艳的花朵 爱它的艳丽 怜悯它...
    月照清溪水阅读 2,642评论 4 7