Можно ли найти расширение файла UIImage?

Я нашел приведенный ниже код в разделе Поиск типа изображения из NSData или UIImage, который помогает проверить четыре разных типа изображения UIimage

     (NSString *)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";
    }
    return nil;
}

Я хочу знать, как узнать, является ли файл растровым изображением или нет, что он имеет расширение .bmp. может кто-нибудь, пожалуйста, помогите мне с этим. Либо измените приведенный выше код, чтобы найти bmp, либо предоставьте мне решение с некоторым кодом.

заранее спасибо


person sher17    schedule 24.07.2013    source источник
comment
Почему за это проголосовали?   -  person imns    schedule 15.06.2014
comment
Я не знаю, почему некоторые люди проголосовали против.   -  person sher17    schedule 16.06.2014


Ответы (2)


Вы можете изменить изображение на NSData, используя метод
UIImageJPEGRepresentation(<#UIImage *image#>, <#CGFloat compressionQuality#>)
ИЛИ
UIImagePNGRepresentation(<#UIImage *image#>)
. Назовите это следующим образом:

- (void) yourMethod{
    NSData *imageData = UIImagePNGRepresentation(yourImage);
    NSString *str = [self contentTypeForImageData:imageData];

}

- (NSString *)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:
            break;
        case 0x42:
            return @"image/bmp";
        case 0x4D:
            return @"image/tiff";
    }
    return nil;
}
person rptwsthi    schedule 24.07.2013
comment
Привет, спасибо за ответ, но я слышал, что этот подход не будет работать с UIImage, потому что преобразование изображения в UIImage скрывает все его базовые данные и создает его как растровое изображение. iphonedevsdk.com/discussion/comment/471725#Comment_471725 может быть причиной вышеописанного подхода (именно это я пробовал несколько часов назад) всегда возвращать bmp в качестве результата для любого изображения. Итак, я исправил функцию, чтобы получить URL-адрес изображения, а не использовать его в качестве UIImage. - person sher17; 24.07.2013
comment
как вы получаете изображение? - person rptwsthi; 25.07.2013
comment
Это приложение phoneGap, поэтому я использую его метод getPhoto(source), где метод onPhotoURISuccess(imageURI) предоставляет URI изображения. Проверьте это stackoverflow.com/questions/17873816/ FILE_URI всегда возвращал мне изображение в формате jpeg. Если вместо FILE_URI используется NATIVE_URI, базовые данные изображения не будут потеряны. на самом деле, если я передал NATIVE_URI показанной выше функции contentTypeForImageData(), где я напрямую конвертирую URI в NSData, функция возвращает правильный результат! - person sher17; 28.07.2013
comment
Если вы использовали UIImagePNGRepresentation, вы уже знаете, что это PNG. - person Aaron Zinman; 23.10.2014

Согласно википедии, BMP-файл, отличный от OS/2, начинается с 0x42 0x4D (BM в ascii) .

case 0x42:
    return @"image/bmp";
person Matthias Bauch    schedule 24.07.2013
comment
Привет, спасибо за ответ. Вики говорит, что 0x42 или 0x4D оба bmp? но случай 0x4D: return @image/tiff; уже распознает его как TIFF, верно? Итак, правильно ли мне проверять только 0x4D для BMP? Извините, я понятия не имею об этом. поправьте меня пожалуйста. - person sher17; 24.07.2013
comment
Кто-нибудь знает, как UIimage следует преобразовать в NSdata перед отправкой в ​​этот метод. Я использовал NSData *imageData=UIimageJPEGRepresentatio(image, 1.0); и даже использовал PNGRepresentation. но он всегда возвращает его как bmp - person sher17; 24.07.2013