小问题

iOS - 如何判断图片的类型

2018-06-04  本文已影响327人  梦蕊dream

前言:图片有多种格式JPEG、PNG、JPG 等,iOS 如何判断图片的类型呢?

把图片转化为 NSData 类型,判断NSData的第一个字节即可。

SDWebImage 判断方法

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;
                }
            }
            break;
        }
    }

手动查看方法

Xcode-->某图片-->右键 Open As -->Hex

Open As-Hex

查看结果:


图片 Hex 结果

总结:可根据第一个字节来判断图片的类型,不同类型的图片内部有本质的区别,这就是为什么有时不识别改过后缀名的图片(譬如把 .jpg直接改成.png)。

上一篇下一篇

猜你喜欢

热点阅读