如何使用 Swift select 图像的一部分、裁剪和保存?
How to select a portion of an image, crop, and save it using Swift?
我正在尝试使用 Swift 创建一个 iOS 应用程序来捕获图像并让用户保存图像的选定部分。在许多基于摄像头的应用程序中,我注意到提供了一个矩形框来让用户选择所需的部分。这涉及滑动矩形的边缘或移动角以适合所需区域。
能否请您指导我如何实现可移动矩形以及如何只保存那部分图像?
https://github.com/myang-git/iOS-Image-Crop-View 做的事情与您正在寻找的一样..
希望对您有所帮助。
找到另一种解决方案。这次是在Swift。该解决方案看起来很优雅,并且相对于其他此类解决方案的代码编写的行数更少。
在这里..
https://github.com/DuncanMC/CropImg
感谢 Duncan Champney 在 github.
上提供他的作品
使用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属性定义了'crop rectangle'图像内部将被裁剪的区域。
如果您在裁剪图像后遇到旋转 90 度之类的问题,请试试这个。
存储原始图像比例和方向 属性 供以后使用
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!)
渲染图像需要上下文(这是一个繁重的过程,如果你多次这样做,请检查 https://developer.apple.com/documentation/coreimage/cicontext)使用这个你可以设置我们在第一行创建的比例和方向,这样图像就不会旋转 90
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)并且非常容易使用。请记得查看存储库中包含的演示示例应用程序。
我正在尝试使用 Swift 创建一个 iOS 应用程序来捕获图像并让用户保存图像的选定部分。在许多基于摄像头的应用程序中,我注意到提供了一个矩形框来让用户选择所需的部分。这涉及滑动矩形的边缘或移动角以适合所需区域。
能否请您指导我如何实现可移动矩形以及如何只保存那部分图像?
https://github.com/myang-git/iOS-Image-Crop-View 做的事情与您正在寻找的一样..
希望对您有所帮助。
找到另一种解决方案。这次是在Swift。该解决方案看起来很优雅,并且相对于其他此类解决方案的代码编写的行数更少。
在这里.. https://github.com/DuncanMC/CropImg 感谢 Duncan Champney 在 github.
上提供他的作品使用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属性定义了'crop rectangle'图像内部将被裁剪的区域。
如果您在裁剪图像后遇到旋转 90 度之类的问题,请试试这个。
存储原始图像比例和方向 属性 供以后使用
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!)
渲染图像需要上下文(这是一个繁重的过程,如果你多次这样做,请检查 https://developer.apple.com/documentation/coreimage/cicontext)使用这个你可以设置我们在第一行创建的比例和方向,这样图像就不会旋转 90
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)并且非常容易使用。请记得查看存储库中包含的演示示例应用程序。