2013-07-24 3 views
4

Я нашел следующий код в Finding image type from NSData or UIImage, который помогает проверить четыре различные типа изображений из 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, либо, пожалуйста, предоставьте мне решение с некоторым кодом.

спасибо adnvance

+0

Почему это проголосовали? – imns

+1

Я не знаю, почему некоторые люди проголосовали за него. – sher17

ответ

5

Вы можете, изменить изображение 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; 
} 
+1

Привет, спасибо за ответ, но я слышал, что этот подход не будет работать с UIImage, потому что преобразование изображения в UIImage скрывает все его базовые данные и создает его как растровое изображение. http://iphonedevsdk.com/discussion/comment/471725#Comment_471725 может быть поэтому, что вышеупомянутый подход (именно это я и пробовал несколько часов назад) всегда возвращал BMP в качестве результата для любого изображения. Итак, я исправил функцию, чтобы получить url изображения, а не принимать как UIImage. – sher17

+0

как вы получаете изображение? – rptwsthi

+0

Это приложение phoneGap, поэтому я использую метод getPhoto (source), где метод onPhotoURISuccess (imageURI) предоставляет URI изображения. Проверьте это http://stackoverflow.com/questions/17873816/how-to-get-image-metadata-from-native-uri-in-ios. FILE_URI всегда возвращал мне изображение jpeg. Если используется NATIVE_URI вместо FILE_URI, изображение базовые данные не будут потеряны. на самом деле, если я передал NATIVE_URI указанной выше функции contentTypeForImageData(), где я напрямую конвертирую URI в NSData, функция возвращает правильный вывод! – sher17

1

Согласно wikipedia не-OS стартовый файл/2 БМП с 0x42 0x4D (БМ в ASCII).

case 0x42: 
    return @"image/bmp"; 
+0

Привет, спасибо за ответ. Говорит ли Wiki 0x42 или 0x4D как bmp? но случай 0x4D: return @ "image/tiff"; уже признает это как tiff, не так ли? так, правильно ли мне проверять только 0x4D для BMP? Извините, я об этом не имею. исправьте меня пожалуйста. – sher17

+0

Кто-нибудь знает, как UIimage должен быть преобразован в NSdata перед отправкой этому методу. Я использовал NSData * imageData = UIimageJPEGRepresentatio (изображение, 1.0); и даже использовал PNGRпредставление. но он всегда возвращает его как bmp – sher17

Смежные вопросы