Определить, является ли UIImage PNG или JPEG? - PullRequest
17 голосов
/ 27 августа 2011

В настоящее время я делаю первые шаги по разработке iPhone с помощью MonoTouch, я играю с UIImage, который я читаю из библиотеки фотографий.

Чего я хочу добиться, так это получить необработанный массив байтов (byte[]) изображения.

Я знаю, что в MonoTouch есть оболочки UIImageJPEGRepresentation и UIImagePNGRepresentation.Я также знаю, как их использовать.Что я не знаю, так это:

Как мне решить, какую из этих двух функций вызвать?

Т.е. если исходное изображение является изображением JPEG, я не хочу получать его какPNG, но также как JPEG, и наоборот.

Есть ли способ сделать это, или я упускаю некоторые моменты по этому поводу?

Ответы [ 2 ]

29 голосов
/ 28 августа 2011

Если у вас есть UIImage, он может создавать JPEG или PNG с использованием UIImageJPEGRepresentation или UIImagePNGRepresentation.Формат исходного изображения важен только тогда, когда из него создается UIImage (решает, какой CFImage поставщик его загрузит).

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

Собираетесь ли вы изменить изображение с помощью UIImageView или оно останется неизменным в вашем опыте?Если он не изменился и вам просто нужен пользовательский интерфейс для выбора изображения, можете ли вы получить файл байтов?Например, если вы показывали изображения только для выбора, а затем загружаете их на сервер или что-то еще, UIImage может быть только для просмотра и выбора, и если ваша структура данных запоминает, из какого файла она пришла, вы можете получить битыотойдите от диска и загрузите.Если вы изменяете файл в представлении, то вам или пользователю необходимо решить, какие выходные данные (и, если jpeg, качество) изображения будут отображаться.

0 голосов
/ 15 июня 2016

Приготовить

typedef NS_ENUM(NSInteger, DownloadImageType) {
    DownloadImageTypePng,
    DownloadImageTypeJpg
};

@property (assign, nonatomic) DownloadImageType imageType;

DETECT

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    NSString *compareString = [[info objectForKey:UIImagePickerControllerReferenceURL] absoluteString];
    NSRange pngRange = [compareString rangeOfString:@"PNG" options:NSBackwardsSearch];
    if (pngRange.location != NSNotFound) {
        compareString = [compareString substringFromIndex:pngRange.location];
        self.imageType = DownloadImageTypePng;
        NSLog(@"%@", compareString);
    } else {
        NSLog(@"Not PNG");
    }

    NSRange jpgRange = [compareString rangeOfString:@"JPG" options:NSBackwardsSearch];
    if (jpgRange.location != NSNotFound) {
        compareString = [compareString substringFromIndex:jpgRange.location];
        self.imageType = DownloadImageTypeJpg;
        NSLog(@"%@", compareString);
    } else {
        NSLog(@"Not JPG");
    }

}

USE

if (self.imageType == DownloadImageTypePng) {

} else if (self.imageType == DownloadImageTypeJpg) {

}
...