根據(jù)文件識(shí)別頭信息獲取圖片文件的類型

一、概述

有時(shí)候單單獲取圖片的后綴名是無(wú)法判斷該圖片的類型,因此我們需要一種更準(zhǔn)確的識(shí)別方式:讀取圖片數(shù)據(jù)的文件識(shí)別頭。(每一個(gè)圖片都由識(shí)別頭+data組成)

二、一些已知的圖片文件頭標(biāo)識(shí)

  1. JPEG
    文件頭標(biāo)識(shí) (2 bytes): 0xff, 0xd8 (SOI) (JPEG 文件標(biāo)識(shí))
    文件結(jié)束標(biāo)識(shí) (2 bytes): 0xff, 0xd9 (EOI)

  2. TGA
    未壓縮的前5字節(jié) 00 00 02 00 00
    RLE壓縮的前5字節(jié) 00 00 10 00 00

  3. PNG
    文件頭標(biāo)識(shí) (8 bytes) 89 50 4E 47 0D 0A 1A 0A

  4. GIF
    文件頭標(biāo)識(shí) (6 bytes) 47 49 46 38 39(37) 61 (G I F 8 9 (7) a)

  5. BMP
    文件頭標(biāo)識(shí) (2 bytes) 42 4D (B M)

  6. PCX
    文件頭標(biāo)識(shí) (1 bytes) 0A

  7. TIFF
    文件頭標(biāo)識(shí) (2 bytes) 4D 4D 或 49 49

  8. ICO
    文件頭標(biāo)識(shí) (8 bytes) 00 00 01 00 01 00 20 20

  9. CUR
    文件頭標(biāo)識(shí) (8 bytes) 00 00 02 00 01 00 20 20

  10. IFF
    文件頭標(biāo)識(shí) (4 bytes) 46 4F 52 4D (F O R M)

  11. ANI
    文件頭標(biāo)識(shí) (4 bytes) 52 49 46 46(R I F F)

三、代碼判斷

+ (NSString *)sd_contentTypeForImageData:(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 0x0A:
            return @"image/pca";
        case 0x52:
            // R as RIFF for WEBP
            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 @"image/webp";
            }
            
            return nil;
    }
    return nil;
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 12,425評(píng)論 6 13
  • 溫故而知新, 記錄下 Settings Bundle 在Xcode上command+n, 選擇創(chuàng)建Settings...
    hello老文閱讀 4,151評(píng)論 0 1
  • 拍攝地點(diǎn):鄉(xiāng)間河邊。 拍攝器材:手機(jī)。 圖片版權(quán)歸本人所有,圖片授權(quán)于簡(jiǎn)書用于設(shè)置為app開屏圖,一切版權(quán)糾紛與...
    木綰閱讀 193評(píng)論 0 0
  • “哇!好美的海棠花??!怪不得你每天這么癡迷地看!”坐在里面的她驚喜地嘆道。其實(shí)我根本不知道窗外的花叫海棠花...
    路重坡閱讀 376評(píng)論 0 0
  • (一) 有人愛 能被人愛著是一件幸運(yùn)又幸福的事情,在愛的光環(huán)照耀下,每個(gè)人都是絕美的天使。孩子被人愛著,...
    鹿鳴閣主閱讀 441評(píng)論 1 3

友情鏈接更多精彩內(nèi)容