閱讀599 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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.

Code

Link : iOS 獲取圖片的原始格式

最後更新:2017-08-13 22:34:40

  上一篇:go  XCode 8.0 下 NSLog 打印不完全
  下一篇:go  MySQL8.0新特性隨筆: NOWAIT以及SKIP LOCKED