How to get UIBezierPath of shape in UIImage or crop UIImage in a certain shape

ios, objective-c, uibezierpath, uiimage

Solution

Here is the code to mask image with image:

- (UIImage *)cerateImageFromImage:(UIImage *)image
                    withMaskImage:(UIImage *)mask {
    CGImageRef imageRef = image.CGImage;
    CGImageRef maskRef = mask.CGImage;

    CGImageRef imageMask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                             CGImageGetHeight(maskRef),
                                             CGImageGetBitsPerComponent(maskRef),
                                             CGImageGetBitsPerPixel(maskRef),
                                             CGImageGetBytesPerRow(maskRef),
                                             CGImageGetDataProvider(maskRef),
                                             NULL,
                                             YES);

    CGImageRef maskedReference = CGImageCreateWithMask(imageRef, imageMask);
    CGImageRelease(imageMask);

    UIImage *maskedImage = [UIImage imageWithCGImage:maskedReference];
    CGImageRelease(maskedReference);

    return maskedImage;
}

Usage:

UIImage *image = [UIImage imageNamed:@"Photo.png"];
UIImage *mask = [UIImage imageNamed:@"Mask.png"];
self.imageView.image = [self cerateImageFromImage:image
                                     withMaskImage:mask];

Problem

I am new in iOS, I want to know if I can get the `UIBezierPath` of a `UIImage`. I have a `UIImage` of face layout and want to get the `UIBezierPath`, which helps me in cropping the `UIImage`. Or, can any one tell me about other ways of cropping `UIImage`s?, but make sure cropping is in a custom shape (like: face, heart etc), not in a rectangle.

Original source