Обрезка UIImagePickerControllerOriginalImage с использованием UIImagePickerControllerCropRect возвращает неправильное изображение

Я пытаюсь редактировать захваченное изображение и сохранять его в галерее. я сделал

UIImagePickerController *picker=[[UIImagePickerController alloc] init]; picker.allowsEditting=YES; 

Я хочу сохранить изображение в редактируемой квадратной части и сохранить его в галерее. Я знаю, что могу использовать [info objectForKey:@"UIImagePickerControllerEditedImage"] для сохранения измененного изображения. Но это всегда возвращает мне изображение размера 320×320 (iPad Mini), и изображение плохого качества. Поэтому я планировал обрезать исходное изображение [info objectForKey:@"UIImagePickerControllerOriginalImage"] , используя следующий код:

 CGRect rect = [[info objectForKey:@"UIImagePickerControllerCropRect"]CGRectValue]; UIImage *originalImage=[info objectForKey:@"UIImagePickerControllerOriginalImage"]; CGImageRef imageRef = CGImageCreateWithImageInRect([originalImage CGImage], rect); UIImage *result = [UIImage imageWithCGImage:imageRef scale:originalImage.scale orientation:originalImage.imageOrientation]; CGImageRelease(imageRef); 

Затем я сохранил как результат, так и отредактированное изображение ( [info objectForKey:@"UIImagePickerControllerEditedImage"] ). При сравнении обоих изображений они совпадают. Я прикрепил отредактированные и обрезанные изображения. Моя конечная цель – обрезать исходное изображение до изображения в редактируемой квадратной части и сохранить его в галерее с хорошим качеством изображения. Может кто-нибудь, пожалуйста, скажите мне, что именно не так, и помогите мне исправить эту проблему?

Заранее спасибо. Обрезанное изображение

Редактированное изображение

Я выяснил причину, по которой обрезание здесь не так. Изображение, которое возвращается UIImagePickerControllerOriginalImage, поворачивается до -90 градусов. Таким образом, обрезка на повернутом изображении вернула мне неправильное обрезанное изображение. Поэтому я повернул изображение на 90 градусов, а затем обрезал его. Наконец, я получил ожидаемое обрезанное изображение с хорошим качеством. Следующий код решил мою проблему.

  UIImage *originalImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; CGRect rect=[[info objectForKey:@"UIImagePickerControllerCropRect"]CGRectValue]; UIImage *rotatedOriginalImage=[originalImage imageRotatedByDegrees:90.0]; CGImageRef imageRef = CGImageCreateWithImageInRect([rotatedOriginalImage CGImage], rect) ; UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 

код для поворота изображения:

 - (UIImage *)imageRotatedByDegrees:(CGFloat)degrees{ // calculate the size of the rotated view's containing box for our drawing space UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.size.height, self.size.width)]; CGAffineTransform t = CGAffineTransformMakeRotation(DegreesToRadians(degrees)); rotatedViewBox.transform = t; CGSize rotatedSize = rotatedViewBox.frame.size; // Create the bitmap context UIGraphicsBeginImageContext(rotatedSize); CGContextRef bitmap = UIGraphicsGetCurrentContext(); // Move the origin to the middle of the image so we will rotate and scale around the center. CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2); // // Rotate the image context CGContextRotateCTM(bitmap, DegreesToRadians(degrees)); // Now, draw the rotated/scaled image into the context CGContextScaleCTM(bitmap, 1.0, -1.0); CGContextDrawImage(bitmap, CGRectMake(-self.size.height / 2, -self.size.width / 2, self.size.height, self.size.width), [self CGImage]); UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; } 
  • iOS - съемка после нажатия кнопки в UIImagePickerController CustomOverlayView
  • Проблема с IOS 7 StatusBar при использовании UIImagePickerController Разрешить редактирование
  • UIImagePickerController записывает видео с альбомной ориентацией
  • UIImagePickerController startVideoCapture с пользовательским наложением
  • Как определить права на изменение конфиденциальности (например, для доступа к камере)
  • Сшивайте видеоклипы вместе в одно видео, например, Vine
  • Как выбрать часть изображения, обрезать и сохранить его с помощью Swift?
  • UIImagePickerController работает на устройстве iOS, но не на iOS-симуляторе?
  • Не удалось загрузить изображение с UIImagePickerController на следующем ViewController после segue
  • Как отключить функцию копирования / скрыть в UIImagePickerController при длительном нажатии изображения ...?
  • UIImagePickerController не отображается (требуется больше времени для загрузки). Предварительный просмотр камеры в ios7
  • Interesting Posts

    Отладка параллелизма основных данных: ложно положительная

    Прокрутка UIScrollView – блокировка основного потока

    Как программный доступ к хранилищу доверенных сертификатов iPhone?

    Аббревиатура часового пояса NSDateFormatter

    Необходимо добавить интерактивную 3D-модель в другое приложение, отличное от 3D

    Приложение не может быть проверено на ios 9

    Устранение утечки памяти NSPlaceholderString с помощью ARC

    Запись голоса на iPhone с помощью Safari и HTML5

    UIApplicationShortcutItem. Можно ли использовать изображение, загруженное из Интернета, как UIApplicationShortcutIcon?

    Проблема производительности Swift Array?

    Когда я должен вызвать removeObserver: forKeyPath из закрывающего класса ViewController, который наблюдает за устойчивым классом модели?

    Работа с AutoLayout в портрете и пейзаже

    Менеджер загрузки Singleton?

    Обновление версии приложения iOS – удаляется ли содержимое Bundle?

    IOS – все управление шрифтами в одном месте

    Давайте будем гением компьютера.