Подтвердить что ты не робот

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

PREPARE

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

}

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

if (self.imageType == DownloadImageTypePng) {

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

}