Я тестирую свое приложение для iPhone на iPhone iOS 3.1.3. Я выбираю / снимаю изображение с помощью UIImagePickerController
:
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePicker setDelegate:self];
[self.navigationController presentModalViewController:imagePicker animated:YES];
[imagePicker release];
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
self.image = [info objectForKey:UIImagePickerControllerOriginalImage];
imageView.image = self.image;
[self.navigationController dismissModalViewControllerAnimated:YES];
submitButton.enabled = YES;
}
Затем я в какой-то момент отправляю его на свой веб-сервер, используя классы ASI:
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://example.com/myscript.php"]];
[request setDelegate:self];
[request setStringEncoding:NSUTF8StringEncoding];
[request setShouldContinueWhenAppEntersBackground:YES];
//other post keys/values
[request setFile:UIImageJPEGRepresentation(self.image, 100.0f) withFileName:[NSString stringWithFormat:@"%d.jpg", [[NSDate date] timeIntervalSinceNow]] andContentType:@"image/jpg" forKey:@"imageFile"];
[request startAsynchronous];
проблема: когда я делаю снимок с iphone, удерживая его в альбомной ориентации, изображение загружается на сервер, и оно просматривается так, как вы ожидаете. при съемке изображения с портретным изображением телефон загружается и просматривается так, как его повернули на 90 градусов.
мое приложение настроено на работу только в портретном режиме (перевернутый и обычный).
Как я могу сделать так, чтобы изображение всегда показывало правильную ориентацию после загрузки?
изображение выглядит правильно, как показано в UIImageView (непосредственно после съемки), но просмотр на сервере говорит об обратном.
Я понял гораздо проще:
Кстати: код @ Anomie не
scale
учитывает, поэтому не будет работать для 2x изображений.источник
self
его объектом UIImage.Вот версия Swift от @ an0:
Также в более общей функции:
Версия Swift 3:
источник
Решение для Swift 3.1 для определения ориентации при захвате изображения с камеры.
Я обновил решение, данное Джейком и Металлом Сердцем
UIImage расширение
Swift 2.0
Используйте это расширение UIImage в вашем коде:
let fixOrientationImage = selectedImage.fixOrientation ()
поместите это в ваши методы делегата средства выбора изображений, как это
Swift 3.1
Swift 2.0
источник
по-быстрому;)
ОБНОВЛЕНИЕ SWIFT 3.0: D
источник
Версия Swift 4.x / 5.0
@an0
:источник
Я использовал эту страницу при разработке своего приложения, которое делает снимки, и обнаружил, что следующий метод исправит ориентацию и использует меньше памяти и процессора, чем предыдущие ответы:
Это в основном просто перематывает фактические данные изображения с новой ориентацией. Я использовал код @ an0, но он создает новое изображение в памяти, которое может облагаться налогом для изображения 3264x2448, которое вы можете получить с камеры.
источник
Если вы включите редактирование, то отредактированное изображение (в отличие от оригинала) будет ориентировано так, как ожидается:
Включение редактирования позволяет пользователю изменять размер и перемещать изображение, прежде чем нажать «Использовать фото»
источник
Это то, что я нашел для решения проблемы ориентации
РЕДАКТИРОВАТЬ:
источник
Обновление для Swift 3.1, основанное на
Sourabh Sharma
ответе, с очисткой кода.Пример метода делегата выбора:
источник
Вот решение, которое не меняет цветовое пространство исходного изображения. Если вы хотите нормализовать ориентацию изображения в градациях серого, вам не повезло со всеми решениями, основанными на том,
UIGraphicsBeginImageContextWithOptions
что он создает контекст в цветовом пространстве RGB. Вместо этого вы должны создать контекст с теми же свойствами, что и исходное изображение, и нарисовать:источник
Вот расширение UIImage для swift:
Основанный на более ранней работе MetalHeart2003 ..
источник
Вот расширение UIImage в Swift 2, основанное на принятом ответе @Anomie. Это использует более ясный случай выключателя. Также учитывается необязательное значение, возвращаемое пользователем
CGBitmapContextCreateImage()
.источник
У меня возникла эта проблема с изображениями, снятыми с камеры или сохраненными в рулоне камеры, которые взяты с камеры. Изображения, загруженные в библиотеку фотографий из браузера Safari, не вращаются при загрузке.
Мне удалось решить эту проблему, сделав данные изображения в формате JPEG перед загрузкой.
Теперь мы можем использовать данные для загрузки, и изображение не будет поворачиваться после загрузки.
Надеюсь, это сработает.
источник
Я достигаю этого, написав ниже несколько строк кода
источник
Если я понимаю, что вы хотите сделать, это игнорировать ориентацию UIImage? Если так, то вы могли бы сделать это:
или в Swift: -
Это решило мою проблему обрезки .. Надеюсь, это то, что вы ищете ..
источник
Версия Swift 3 на основе @ jake1981, которая взяла его у @ MetalHeart2003
источник
источник
Вот код Swift-4.2 для автоматического исправления ориентации изображения. Возвращает UIImage
источник
Я перенес это в Xamarin:
источник