swift 如何在照片库或相机中裁剪 4*3 图像
How to crop a 4*3 image in photoLibrary or camera in swift
我想在使用相机或从 photoLibrary select 后裁剪图像。
目前只能裁剪正方形图片,不知道如何裁剪4*3的图片
这是我的部分代码
let imagePicker : UIImagePickerController = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .PhotoLibrary
imagePicker.allowsEditing = true
我不知道不允许链接作为答案。在这里,我将尝试回答这个问题。
目的:以预定义的比例裁剪图像。
方法:
- 在 viewcontroller - 我们需要添加一个滚动视图 - 这样我们就可以
将图像放在那里并根据需要缩放或平移。
- 设置滚动视图高度和视图高度比例的约束(可能
为 0.8) - 留出 20% 的视图来放置按钮。
- 设置scrollview的高宽比约束(在此
case 4:3) 以编程方式添加 Imageview(设置所选的大小
图片的高度和宽度)
- 设置 scrollview 最小和最大缩放比例以适应更小和
滚动视图中的大图像正确。
- 在显示图像时,我们将确保 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)")
}
我想在使用相机或从 photoLibrary select 后裁剪图像。
目前只能裁剪正方形图片,不知道如何裁剪4*3的图片
这是我的部分代码
let imagePicker : UIImagePickerController = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .PhotoLibrary
imagePicker.allowsEditing = true
我不知道不允许链接作为答案。在这里,我将尝试回答这个问题。
目的:以预定义的比例裁剪图像。 方法:
- 在 viewcontroller - 我们需要添加一个滚动视图 - 这样我们就可以 将图像放在那里并根据需要缩放或平移。
- 设置滚动视图高度和视图高度比例的约束(可能 为 0.8) - 留出 20% 的视图来放置按钮。
- 设置scrollview的高宽比约束(在此 case 4:3) 以编程方式添加 Imageview(设置所选的大小 图片的高度和宽度)
- 设置 scrollview 最小和最大缩放比例以适应更小和 滚动视图中的大图像正确。
- 在显示图像时,我们将确保 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)")
}