我正在尝试使用Swift创建一个iOS应用程序,用于捕捉图像并允许用户保存所选部分的图像。在许多相机应用中,我注意到提供了一个矩形框架,让用户选择所需的部分。这涉及滑动矩形的边缘或移动角落以适应所需区域。
请您指导我如何实现可移动的矩形,并如何仅保存该图像片段?
我正在尝试使用Swift创建一个iOS应用程序,用于捕捉图像并允许用户保存所选部分的图像。在许多相机应用中,我注意到提供了一个矩形框架,让用户选择所需的部分。这涉及滑动矩形的边缘或移动角落以适应所需区域。
请您指导我如何实现可移动的矩形,并如何仅保存该图像片段?
使用Swift 3
可以使用来自CoreGraphics的CGImages进行图像裁剪。
获取UIImage的CGImage版本,可以使用以下代码:
// cgImage is an attribute of UIImage
let cgImage = image.cgImage
CGImage对象有一个名为cropping(to: CGRect)的方法,用于进行裁剪:
let croppedCGImage: CGImage = cgImage.cropping(to: toRect)
最后,将CGImage转换回UIImage:
let uiImage = UIImage(cgImage: croppedCGImage)
示例函数:
func cropImage(image: UIImage, toRect: CGRect) -> UIImage? {
// Cropping is available trhough CGGraphics
let cgImage :CGImage! = image.cgImage
let croppedCGImage: CGImage! = cgImage.cropping(to: toRect)
return UIImage(cgImage: croppedCGImage)
}
CGRect 属性定义了图像内部将被裁剪的“裁剪矩形”。
找到了另一个解决方案。这次是用Swift编写的。该解决方案看起来很优雅,相对于其他类似的解决方案,代码行数更少。
在这里... https://github.com/DuncanMC/CropImg 感谢Duncan Champney将他的工作放在GitHub上供大家使用。
https://github.com/myang-git/iOS-Image-Crop-View 可以做到你所需要的功能。
希望这可以帮到你。
let imgOrientation = image?.imageOrientation
let imgScale = image?.scale
从UIImage获取CGImage:
let cgImage = image.cgImage
传递你想裁剪的cropArea(CGRect)区域(如果你正在使用imageView.image,你需要找到比例并进行数学计算来找到cgRect),如有需要,请添加以下代码
let croppedCGImage = cgImage.cropping(to: cropArea)
let coreImage = CIImage(cgImage: croppedCGImage!)
let ciContext = CIContext(options: nil)
let filteredImageRef = ciContext.createCGImage(coreImage, from: coreImage.extent)
let finalImage = UIImage(cgImage:filteredImageRef!, scale:imgScale!, orientation:imgOrientation!)
imageView.image = finalImage
我正在寻找适用于iOS 13、Swift 5的解决方案,然后发现了救星库:CropViewController。
它几乎拥有你能想到的所有功能:任意比例裁剪、图像旋转、重置为原始图像、半透明背景。而且它易于安装(Cocoapod、Carthage)和非常易于使用。记得查看他们在repo中包含的演示示例应用程序。