SDWebImage(5.1.0) NSData+ImageContentType(1)

2574 단어
(1)+ (SDImageFormat)sd_imageFormatForImageData:(nullable NSData *)data; 전송된 이미지 데이터 데이터를 통해 어떤 형식의 그림인지 분석합니다.

+ (SDImageFormat)sd_imageFormatForImageData:(nullable NSData *)data {
    if (!data) {
        return SDImageFormatUndefined;
    }
    
    // File signatures table: http://www.garykessler.net/library/file_sigs.html
    uint8_t c;
    [data getBytes:&c length:1];
    switch (c) {
        case 0xFF:
            return SDImageFormatJPEG;
        case 0x89:
            return SDImageFormatPNG;
        case 0x47:
            return SDImageFormatGIF;
        case 0x49:
        case 0x4D:
            return SDImageFormatTIFF;
        case 0x52: {
            if (data.length >= 12) {
                //RIFF....WEBP
                NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
                if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) {
                    return SDImageFormatWebP;
                }
            }
            break;
        }
        case 0x00: {
            if (data.length >= 12) {
                //....ftypheic ....ftypheix ....ftyphevc ....ftyphevx
                NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(4, 8)] encoding:NSASCIIStringEncoding];
                if ([testString isEqualToString:@"ftypheic"]
                    || [testString isEqualToString:@"ftypheix"]
                    || [testString isEqualToString:@"ftyphevc"]
                    || [testString isEqualToString:@"ftyphevx"]) {
                    return SDImageFormatHEIC;
                }
                //....ftypmif1 ....ftypmsf1
                if ([testString isEqualToString:@"ftypmif1"] || [testString isEqualToString:@"ftypmsf1"]) {
                    return SDImageFormatHEIF;
                }
            }
            break;
        }
    }
    return SDImageFormatUndefined;
}


4
  • 헤더 규범 JPEG(jpg), 헤더:FFD8FFE1 PNG(png), 헤더:89504E47 GIF(gif), 헤더:47494638 TIFF tif;tiff 0x49492A00 TIFF tif;tiff 0x4D4D002A WebP : 524946462A73010057454250

  • 먼저 데이터의 첫 번째 바이트의 물건을 꺼내서 어떤 유형인지 판단하세요.여기에 링크가 하나 더 있는데,http://www.garykessler.net/library/file_sigs.html파일 접두사 유형의

    다음 두 가지 방법은 매거와 문자열이 서로 변환되는 것이다

  • (nonnull CFStringRef)sd_UTTypeFromImageFormat:(SDImageFormat)format;
  • (SDImageFormat)sd_imageFormatFromUTType:(nonnull CFStringRef)uttype;
  • 좋은 웹페이지 즐겨찾기