Установить размеры для UIImagePickerController «переместить и масштабировать» поле кадрирования - PullRequest
38 голосов
/ 28 января 2012

Как «Экран перемещения и масштабирования» определяет размеры для его поля обрезки?

В основном я хотел бы установить фиксированную ширину и высоту для «CropRect» и позволить пользователю перемещать и масштабировать его изображение довписаться в эту коробку по желанию.

Кто-нибудь знает, как это сделать?(Или, если это возможно даже с помощью UIImagePickerController)

Спасибо!

Ответы [ 4 ]

36 голосов
/ 01 февраля 2012

К сожалению, с UIImagePickerController это невозможно.Решение, которое я рекомендую, - отключить редактирование для средства выбора изображений и обработать его самостоятельно.Например, я помещаю изображение в прокручиваемое, масштабируемое изображение.Вверху представления изображения находится фиксированное положение «вид направляющей обрезки», которое рисует индикатор обрезки, который видит пользователь.Предполагая, что у направляющего вида есть свойства для видимого прямоугольника (сохраняемая часть) и ширины ребер (отбрасываемая часть), вы можете получить прямоугольник кадрирования следующим образом.Вы можете использовать категорию UIImage + Resize для фактического кадрирования.

CGRect cropGuide = self.cropGuideView.visibleRect;
UIEdgeInsets edges = self.cropGuideView.edgeWidths;
CGPoint cropGuideOffset = self.cropScrollView.contentOffset;

CGPoint origin = CGPointMake( cropGuideOffset.x + edges.left, cropGuideOffset.y + edges.top );
CGSize size = cropGuide.size;
CGRect crop = { origin, size };

crop.origin.x = crop.origin.x / self.cropScrollView.zoomScale;
crop.origin.y = crop.origin.y / self.cropScrollView.zoomScale;
crop.size.width = crop.size.width / self.cropScrollView.zoomScale;
crop.size.height = crop.size.height / self.cropScrollView.zoomScale;

photo = [photo croppedImage:crop];
24 голосов
/ 07 января 2013

Вроде поздно к игре, но я думаю, что это может быть то, что вы ищете: https://github.com/gekitz/GKImagePicker

4 голосов
/ 07 июля 2015

Вот решение для ручной обрезки от Ming Yang. https://github.com/myang-git/iOS-Image-Crop-View

Он предлагает прямоугольную рамку, которую пользователь может перемещать или перетаскивать, чтобы разместить требуемую часть изображения в прямоугольнике. Пожалуйста, обратите внимание, что это решение делает обратное заданному вопросу - позволяет изменять размер прямоугольника, но в конечном итоге дает желаемый результат.

Кодируется в Objective-C. Возможно, вам придется либо закодировать его в Swift, либо просто создать мостовой заголовок, чтобы связать код Objective C с кодом Swift.

1 голос
/ 29 мая 2018

Сейчас позже, чем поздно, но может быть кому-то полезно.Это библиотека, которую я использовал для swift (большое спасибо Тиму Оливеру ):

TOCropViewController

, как описано в файле README в GitHubссылка выше, с помощью этой библиотеки вы можете получить обрезанные изображения в определенном пользователем прямоугольнике, а также в круговом режиме, например, для обновления изображения профиля.ниже приведен пример кода из GitHub:

func presentCropViewController {
  let image: UIImage = ... //Load an image

  let cropViewController = CropViewController(image: image)
  cropViewController.delegate = self
  present(cropViewController, animated: true, completion: nil)
}

func cropViewController(_ cropViewController: CropViewController, didCropToImage image: UIImage, withRect cropRect: CGRect, angle: Int) {
        // 'image' is the newly cropped version of the original image
    }
...