I am trying to create an iOS app using Swift to capture images and let the user save a selected portion of the image. In many cam based apps, I noticed that a rectangular frame is offered to let the users choose the desired portion. This involves either sliding the edges of the rectangle or moving the corners to fit the required area.
Could you please guide me on how to implement that moveable rectangle and how to save only that piece of the image?
Using Swift 3
Image cropping can be done using CGImages from CoreGraphics.
Get the CGImage version of a UIImage like this:
// cgImage is an attribute of UIImage
let cgImage = image.cgImage
CGImage objects have a method cropping(to: CGRect) that does the cropping:
let croppedCGImage: CGImage = cgImage.cropping(to: toRect)
Finally, convert back from CGImage to UIImage:
let uiImage = UIImage(cgImage: croppedCGImage)
Example function:
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)
}
The CGRect attribute of cropping defines the 'crop rectangle' inside the image that will be cropped.