it-swarm.com.ru

Определить, является ли UIImage PNG или JPEG?

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

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

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

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

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

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

17
Uwe Keim

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

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

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

29
bryanmac

ПОДГОТОВИТЬ

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

@property (assign, nonatomic) DownloadImageType imageType;

ОБНАРУЖЕНИЕ

- (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");
    }

}

ИСПОЛЬЗОВАНИЕ

if (self.imageType == DownloadImageTypePng) {

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

}
0
iAleksandr