判断是否为gif/png图片的正确姿势
1.在能取到图片后缀的前提下
| 1 2 3 4 5 6 7 8 9 | //假设这是一个网络获取的URLNSString *path = @"http://pic3.nipic.com/20090709/2893198_075124038_2.gif";// 判断是否为gifNSString *extensionName = path.pathExtension;if ([extensionName.lowercaseString isEqualToString:@"gif"]) { //是gif图片} else { //不是gif图片 } |
2.不知道时.其实就是取出图片数据的第一个字节, 就可以判断出图片的真实类型那该怎么做呢如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | //通过图片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;} |
其实图片数据的第一个字节是固定的,一种类型的图片第一个字节就是它的标识, 我们来调用一下这个方法:
| 1 2 3 4 5 6 7 | //假设这是一个网络获取的URLNSString *path = @"http://pic.rpgsky.net/images/2016/07/26/3508cde5f0d29243c7d2ecbd6b9a30f1.png";NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:path]];//调用获取图片扩展名NSString *string = [self contentTypeForImageData:data];//输出结果为 pngNSLog(@"%@",string); |