¿Cómo cortar la forma de un logotipo (image png) de otra image mediante progtwigción en Swift?

Esta es la image de background

introduzca la descripción de la imagen aquí

Este es el logo

introduzca la descripción de la imagen aquí

¿Cómo podemos hacer una image como esta en Swift?

introduzca la descripción de la imagen aquí


Actualizar

Ahora consigo usar el logotipo como una máscara y get algo como esto, introduzca la descripción de la imagen aquí

¿Hay alguna forma de revertir la máscara?

Aquí está mi código

let logo = UIImage(named: "logo")! let mask = CALayer() mask.contents = logo.CGImage mask.frame = mImageView.layer.bounds mImageView.layer.mask = mask 

Puede hacerlo mediante progtwigción utilizando UIBezierPath:

 // lets create a view and an image for testing let picture = UIImage(data: try! Data(contentsOf: URL(string: "http://i.stack.imgur.com/Xs4RX.jpg")!))! // lets create a view and an image for testing let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: picture.size.width, height: picture.size.height)) imageView.image = picture // now a layer for the mask let maskLayer = CAShapeLayer() // a path for the logo let maskPath = CGMutablePath() // create your logo path (I've added this circle to represent your logo path) maskPath.addEllipse(in: CGRect(x: imageView.frame.midX - 150, y: imageView.frame.midY - 150, width: 300, height: 300)) // you will need a rectangle that covers the whole image area to intersect with your logo path maskPath.addRect(CGRect(x: 0, y: 0, width: picture.size.width, height: picture.size.height)) // add the mask to your maskLayer maskLayer.path = maskPath // choose the fill rule EvenOdd maskLayer.fillRule = kCAFillRuleEvenOdd // add your masklayer to your view imageView.layer.mask = maskLayer imageView 

Si necesita usar una image e invertir el alfa de su logotipo mediante progtwigción, puede hacer lo siguiente utilizando kCGBlendModeDestinationOut:

 import UIKit extension UIImage { func masked(with image: UIImage, position: CGPoint? = nil, inverted: Bool = false) -> UIImage? { let position = position ?? CGPoint(x: size.width.half - image.size.width.half, y: size.height.half - image.size.height.half) defer { UIGraphicsEndImageContext() } UIGraphicsBeginImageContextWithOptions(size, false, scale) draw(at: .zero) image.draw(at: position, blendMode: inverted ? .destinationOut : .destinationIn, alpha: 1) return UIGraphicsGetImageFromCurrentImageContext() } } 

 let picture = UIImage(data: try! Data(contentsOf: URL(string: "http://i.stack.imgur.com/Xs4RX.jpg")!))! let logo = UIImage(data: try! Data(contentsOf: URL(string: "https://www.dropbox.com/s/k7vk3xvcvcly1ik/chat_bubble.png?dl=1")!))! let view = UIView(frame: UIScreen.main.bounds) view.backgroundColor = .blue let iv = UIImageView(frame: UIScreen.main.bounds) iv.contentMode = .scaleAspectFill iv.image = picture.masked(with: logo, inverted: true) view.addSubview(iv) 
 let bg = UIImage(named: "bg")! let logo = UIImage(named: "logo")! let size = imageView.frame.size let rect = CGRectMake(0, 0, size.width, size.height) UIGraphicsBeginImageContext(size) bg?.drawInRect(rect) logo.drawInRect(rect, blendMode: kCGBlendModeDestinationOut, alpha: 1.0) let newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() imageView.image = newImage