ios判断图片格式类型


1、方式一

[objc]  view plain  copy
  1. - (NSString *)contentTypeForImageData:(NSData *)data {  
  2.     uint8_t c;  
  3.     [data getBytes:&c length:1];  
  4.       
  5.     switch (c) {  
  6.         case 0xFF:  
  7.             return @"jpeg";  
  8.         case 0x89:  
  9.             return @"png";  
  10.         case 0x47:  
  11.             return @"gif";  
  12.         case 0x49:  
  13.         case 0x4D:  
  14.             return @"tiff";  
  15.         case 0x52:  
  16.             if ([data length] < 12) {  
  17.                 return nil;  
  18.             }  
  19.               
  20.             NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(012)] encoding:NSASCIIStringEncoding];  
  21.             if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) {  
  22.                 return @"webp";  
  23.             }  
  24.             return @"未判断出来";        
  25.     }  
  26.     return @"未判断出来";  
  27.       
  28. }  


2、方式二

[objc]  view plain  copy
  1. #define _FOUR_CC(c1,c2,c3,c4) ((uint32_t)(((c4) << 24) | ((c3) << 16) | ((c2) << 8) | (c1)))  
  2. #define _TWO_CC(c1,c2) ((uint16_t)(((c2) << 8) | (c1)))  

[objc]  view plain  copy
  1. NSString* ImageDetectType(NSData* imgData) {  
  2.     CFDataRef data = ImageDetectType((__bridge CFDataRef)imgData);  
  3.     if (!data) return @"数据为空";  
  4.     uint64_t length = CFDataGetLength(data);  
  5.     if (length < 16return @"数据长度小鱼16";  
  6.       
  7.     const charchar *bytes = (charchar *)CFDataGetBytePtr(data);  
  8.       
  9.     uint32_t magic4 = *((uint32_t *)bytes);  
  10.     switch (magic4) {  
  11.         case _FOUR_CC(0x4D, 0x4D, 0x000x2A): { // big endian TIFF  
  12.             return @"big tiff";  
  13.         } break;  
  14.               
  15.         case _FOUR_CC(0x490x490x2A, 0x00): { // little endian TIFF  
  16.             return @"little tiff";  
  17.         } break;  
  18.               
  19.         case _FOUR_CC(0x000x000x010x00): { // ICO  
  20.             return @"ico";  
  21.         } break;  
  22.               
  23.         case _FOUR_CC('i''c''n''s'): { // ICNS  
  24.             return @"icns";  
  25.         } break;  
  26.               
  27.         case _FOUR_CC('G''I''F''8'): { // GIF  
  28.             return @"gif";  
  29.         } break;  
  30.               
  31.         case _FOUR_CC(0x89'P''N''G'): {  // PNG  
  32.             uint32_t tmp = *((uint32_t *)(bytes + 4));  
  33.             if (tmp == _FOUR_CC('\r''\n'0x1A, '\n')) {  
  34.                 return @"png";  
  35.             }  
  36.         } break;  
  37.               
  38.         case _FOUR_CC('R''I''F''F'): { // WebP  
  39.             uint32_t tmp = *((uint32_t *)(bytes + 8));  
  40.             if (tmp == _FOUR_CC('W''E''B''P')) {  
  41.                 return @"webp";  
  42.             }  
  43.         } break;  
  44.     }  
  45.       
  46.     uint16_t magic2 = *((uint16_t *)bytes);  
  47.     switch (magic2) {  
  48.         case _TWO_CC('B''A'):  
  49.         case _TWO_CC('B''M'):  
  50.         case _TWO_CC('I''C'):  
  51.         case _TWO_CC('P''I'):  
  52.         case _TWO_CC('C''I'):  
  53.         case _TWO_CC('C''P'): { // BMP  
  54.             return @"bmp";  
  55.         }  
  56.         case _TWO_CC(0xFF, 0x4F): { // JPEG2000  
  57.             return @"jpeg2000";  
  58.         }  
  59.     }  
  60.     if (memcmp(bytes,"\377\330\377",3) == 0return @"jpeg";  
  61.     if (memcmp(bytes + 4"\152\120\040\040\015"5) == 0return @"jpeg2000";  
  62.     return @"未知格式终止";  
  63. }  

猜你喜欢

转载自blog.csdn.net/bravegogo/article/details/80496717