在ios中屏蔽UIImage

时间:2013-10-22 21:01:45

标签: ios objective-c uiimage

我正在尝试使用ios中的蒙版创建具有自定义形状图案的个人资料图片图像。这是我用来创建蒙面图像的内容:

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

    CGImageRef maskRef = maskImage.CGImage;

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
                                        CGImageGetHeight(maskRef),
                                        CGImageGetBitsPerComponent(maskRef),
                                        CGImageGetBitsPerPixel(maskRef),
                                        CGImageGetBytesPerRow(maskRef),
                                        CGImageGetDataProvider(maskRef), NULL, false);

    CGImageRef maskedImageRef = CGImageCreateWithMask([image CGImage], mask);
    UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef];

    CGImageRelease(mask);
    CGImageRelease(maskedImageRef);

    // returns new image with mask applied
    return maskedImage;
}

实现实例后,我调用:*(_ profileImage是全局UIImage)

UIImage *maskImage = [UIImage imageNamed:@"maskProfilePicture.png"];

UIImage *maskedImage = [self maskImage:_profileImage withMask:maskImage];

和结果(图像应该添加在面具的子视图中。但看起来,需要屏蔽的图像上的掩模图像重叠):

masked image

掩码图像:(我在photoshop中创建的掩码图像属性可能是错误的:)

Mask Image

2 个答案:

答案 0 :(得分:4)

核心图形调用看起来是正确的。

将遮罩图像更改为希望图像显示的黑色,以及其他处的白色。

mask image

答案 1 :(得分:0)

您可以使用CALayer的mask属性来实现结果。

CALayer Apple Documentation

在要剪切图像的地方,您的遮罩层应该是透明的。