判斷是否為gif/png圖片的正確姿勢
1.在能取到圖片后綴的前提下
1 2 3 4 5 6 7 8 9 | //假設這是一個網絡獲取的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圖片 ? } |
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 | //假設這是一個網絡獲取的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); |