Particular shape image on uiimageview

后端 未结 5 1975
栀梦
栀梦 2020-12-28 10:42

Can we set below shape on image with UIImageView.

Any idea!

Thanks

\"enter

5条回答
  •  一个人的身影
    2020-12-28 10:52

    Mask UIImageView

    You can use mask property of imageView's CALayer:

    CALayer *mask = [CALayer layer];
    mask.contents = (id)[[UIImage imageNamed:@"mask.png"] CGImage];
    mask.frame = CGRectMake(0, 0, imageView.image.size.width, imageView.image.size.height);
    imageView.layer.mask = mask;
    imageView.layer.masksToBounds = YES;
    

    Apply Core Graphics mask to UIImage

    This will apply to ImageView only, so if you want to change UIImage directly - you should use Core Graphics mask:

    - (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;
    }
    

    Core Graphics image composition with blending

    Swift 5.

    let image = UIImage(named: "Lenna.png")!
    let mask = UIImage(named: "mask-image.png")! // background is transparent
    let size = image.size
    
    let renderer = UIGraphicsImageRenderer(size: size)
    let newImage = renderer.image { context in
        image.draw(in: CGRect(origin: .zero, size: size), blendMode: .normal, alpha: 1)
        mask.draw(in: CGRect(origin: .zero, size: size), blendMode: .destinationIn, alpha: 1)
    }
    

    Playground:

提交回复
热议问题