iOS 獲取圖片的原始格式
今天測試給過來一張圖片(後綴是.png)說無法在 APP 的 WebView 裏麵無法顯示,而且在 Safari 裏也是無法打開的,但在穀歌瀏覽器上是可以正常顯示。起初是知道 WebP 格式的圖片蘋果是不支持顯示的,但這個圖片的後綴是.png 的,難道還有 png 的圖片是蘋果不支持的麼?
根據個人經驗,是沒有聽說蘋果不支持 png 格式的圖片的,這時想到以前自己更改 JPG 圖片後綴的事情,是不是這張圖片也是經過別人手動改後綴的呢,帶著這個疑問,我決定手動判斷這張圖片的原始格式。
記得以前在看 SDWebImage 源碼時,源碼中是有關於判斷根據 image 來判斷圖片的實際格式的,於是從 SDWebImage 中的源碼中摳出來判斷圖片實際格式的代碼。
圖片的前8位是存儲圖片格式的,可以通過先讀取圖片的數據,拿到圖片的前8位來判斷圖片的類型
/**
*
* 根據圖片數據獲取圖片的原始類型
*
* @param data 圖片的二進製數據
* @return 圖片的實際格式
*/
- (NSString *)typeForImageData:(NSData *)data {
uint8_t c;
[data getBytes:&c length:1];
switch (c) {
case 0xFF:
return @"image/jpeg";
case 0x89:
return @"image/png";
case 0x47:
return @"image/gif";
case 0x49:
case 0x4D:
return @"image/tiff";
case 0x52: {
//R as RIFF for WEBP
if (data.length < 12) {
return nil;
}
NSString *identifierTypeStr = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
if ([identifierTypeStr hasPrefix:@"RIFF"] && [identifierTypeStr hasSuffix:@"WEBP"]) {
return @"image/webp";
}
return nil;
}
default:
break;
}
return nil;
}
That's All.
Link : iOS 獲取圖片的原始格式
最後更新:2017-08-13 22:34:40