简体   繁体   中英

How to crop image view given a rect

I want to display the crop view on uiimagepickercontrollers overlayView, and then crop the image with respect to the overlayImage rect. How can I calculate crop image given the rect of overlayView?

private func CropImage( image:UIImage , cropRect:CGRect) -> UIImage
{
    UIGraphicsBeginImageContextWithOptions(cropRect.size, false, 0);
    let context = UIGraphicsGetCurrentContext();

    context?.translateBy(x: 0.0, y: image.size.height);
    context?.scaleBy(x: 1.0, y: -1.0);
    context?.draw(image.cgImage!, in: CGRect(x:0, y:0, width:image.size.width, height:image.size.height), byTiling: false);
    context?.clip(to: [cropRect]);

    let croppedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return croppedImage!;
}

You can do it by using below chunk of code.

let imageRef:CGImage = uncroppedImage.cgImage!.cropping(to: bounds)!
let croppedImage:UIImage = UIImage(cgImage: imageRef)

Here you can pass your rect according to your requirement.

Also you can do it as as per apple suggestion.

Please find Official documentatation.

func cropImage(_ inputImage: UIImage, toRect cropRect: CGRect, viewWidth: CGFloat, viewHeight: CGFloat) -> UIImage? 
{    
    let imageViewScale = max(inputImage.size.width / viewWidth,
                             inputImage.size.height / viewHeight)

    // Scale cropRect to handle images larger than shown-on-screen size
    let cropZone = CGRect(x:cropRect.origin.x * imageViewScale,
                          y:cropRect.origin.y * imageViewScale,
                          width:cropRect.size.width * imageViewScale,
                          height:cropRect.size.height * imageViewScale)

    // Perform cropping in Core Graphics
    guard let cutImageRef: CGImage = inputImage.cgImage?.cropping(to:cropZone)
    else {
        return nil
    }

    // Return image to UIImage
    let croppedImage: UIImage = UIImage(cgImage: cutImageRef)
    return croppedImage
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM