如何快速在照片库或相机中裁剪4 * 3图像

我想在使用相机后裁剪图像或从photoLibrary中select。

现在,我只能裁剪方形图像,我不知道如何裁剪4 * 3的图像。

这是我的代码的一部分

let imagePicker : UIImagePickerController = UIImagePickerController() imagePicker.delegate = self imagePicker.sourceType = .PhotoLibrary imagePicker.allowsEditing = true 

在这里输入图像说明

我不知道链接是不允许的答案。 这里我会试着回答这个问题。

目标:以预定义的比例裁剪图像。 做法:

  • 在视图控制器中 – 我们需要添加一个滚动视图 – 这样我们可以把图像放在那里,如果需要的话可以放大或缩小。
  • 为滚动视图高度和视图高度比设置一个约束(可能为0.8) – 留下20%的视图来放置button。
  • 设置滚动视图的高度和宽度比例(在这种情况下为4:3)的约束条件编程添加ImageView(设置所选图像的高度和宽度的大小)
  • 设置滚动视图的最小和最大缩放比例,以适合滚动视图中的较小和较大的图像。
  • 同时显示图像,我们将确保imageview或者适合的高度或宽度。

现在运行应用程序,看看我们是否只能以4:3的比例滚动查看图像。

对于保存选项,只需要映射滚动视图的坐标,并从图像视图中获取图像(这里我们需要使用缩放比例)

码:

 var imgview: UIImageView! var imagepicked:UIImage! var minZoomScale:CGFloat! let picker = UIImagePickerController() @IBOutlet weak var scrollViewSquare: UIScrollView! override func viewDidLoad() { super.viewDidLoad() picker.delegate = self scrollViewSquare.delegate = self } func imagePickerController( picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { imagepicked = (info[UIImagePickerControllerOriginalImage] as? UIImage)! ImageViewInit() dismissViewControllerAnimated(false, completion: nil) } @IBAction func Pick(sender: AnyObject) { picker.allowsEditing = false picker.sourceType = .PhotoLibrary presentViewController(picker, animated: true, completion: nil) } func ImageViewInit(){ imgview = UIImageView() imgview.frame = CGRectMake(0, 0, imagepicked.size.width, imagepicked.size.height) imgview.image = imagepicked imgview.contentMode = .ScaleAspectFit imgview.backgroundColor = UIColor.lightGrayColor() scrollViewSquare.maximumZoomScale=4; scrollViewSquare.minimumZoomScale=0.02; scrollViewSquare.bounces=true; scrollViewSquare.bouncesZoom=true; scrollViewSquare.contentMode = .ScaleAspectFit scrollViewSquare.contentSize = imagepicked.size scrollViewSquare.autoresizingMask = UIViewAutoresizing.FlexibleWidth scrollViewSquare.addSubview(imgview) setZoomScale() } //fit imageview in the scrollview func setZoomScale(){ let imageViewSize = imgview.bounds.size let scrollViewSize = scrollViewSquare.bounds.size let widthScale = scrollViewSize.width / imageViewSize.width let heightScale = scrollViewSize.height / imageViewSize.height minZoomScale = max(widthScale, heightScale) scrollViewSquare.minimumZoomScale = minZoomScale scrollViewSquare.zoomScale = minZoomScale } func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? { return imgview } //mapping the image from the scrollview to imageview to get the desired ratio @IBAction func Save(sender: AnyObject) { let offset = scrollViewSquare.contentOffset let visibleRect: CGRect = CGRectMake(offset.x, offset.y, offset.x+scrollViewSquare.frame.width, offset.y+scrollViewSquare.frame.height) let visibleImgRect: CGRect = CGRectMake(offset.x/scrollViewSquare.zoomScale, offset.y/scrollViewSquare.zoomScale, (offset.x+scrollViewSquare.frame.width)/scrollViewSquare.zoomScale, (offset.y+scrollViewSquare.frame.height)/scrollViewSquare.zoomScale) print("content offset now\(offset) and visible rect is \(visibleRect) - zoomlevel \(scrollViewSquare.zoomScale) now image \(imagepicked.size) and current visible area in image is \(visibleImgRect)") }