web-dev-qa-db-ja.com

UIImagePickerController「移動および拡大縮小」クロップボックスの寸法を設定します

「画面の移動と拡大縮小」は、クロップボックスの寸法をどのように決定しますか?

基本的に、「CropRect」の固定幅と高さを設定し、ユーザーが希望するようにそのボックスに収まるように画像を移動および拡大縮小できるようにします。

誰もこれを行う方法を知っていますか? (または、UIImagePickerControllerでも可能であれば)

ありがとう!

39
Thomas K

残念ながらUIImagePickerControllerでは不可能です。私がお勧めする解決策は、画像ピッカーの編集を無効にして、自分で処理することです。たとえば、スクロール可能なズーム可能な画像ビューに画像を配置します。画像ビューの上部には、ユーザーに表示されるクロップインジケータを描画する固定位置の「クロップガイドビュー」があります。ガイドビューに表示される四角形(保持する部分)とエッジ幅(破棄する部分)のプロパティがあると仮定すると、そのような切り取り四角形を取得できます。 IImage + 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];
37

ゲームに遅刻しますが、これはあなたが探しているものかもしれないと思います: https://github.com/gekitz/GKImagePicker

24
Yuriy

以下は、Ming Yangによる手動トリミングのソリューションです。 https://github.com/myang-git/iOS-Image-Crop-View

ユーザーがスライドまたはドラッグして長方形の画像の必要な部分に合わせることができる長方形のフレームを提供します。この解決策は、質問の逆を行うことに注意してください-長方形のサイズを変えることができますが、最終的には望ましい結果をもたらします。

Objective-Cでコーディングされています。 Swiftでコーディングするか、単にブリッジングヘッダーを構築して、Objective-CコードをSwiftコードと接続する必要があります。

4
Sriram

今では遅くなっていますが、誰かに役立つかもしれません。これは、私がSwift( Tim Oliver に感謝します):

TOCropViewController

上記のGitHubリンクのREADMEファイルで説明されているように、このライブラリを使用すると、プロファイル画像を更新するために、ユーザー定義の長方形および円形モードでトリミングされた画像を取得できます。以下はサンプルコードです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
    }
1
MFA