Определить, является ли UIImage PNG или JPEG?
Выполняя свои первые шаги с развитием iPhone через MonoTouch, я играю с UIImage
, который я прочитал из библиотеки фотографий.
То, что я хочу достичь, - это получить исходный массив байтов (byte[]
) изображения.
Я знаю, что в MonoTouch есть обертки UIImageJPEGRepresentation
и UIImagePNGRepresentation
. Я также знаю, как их использовать. Я не знаю, что:
Как мне решить, какую из этих двух функций вызывать?
т.е. если исходное изображение является изображением JPEG, я не хочу получать его как PNG, а также как JPEG, и наоборот.
Есть ли способ сделать это, или я пропустил некоторые моменты на этом?
Ответы
Ответ 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) {
}