Skip to content

Instantly share code, notes, and snippets.

@hsiaoer
Created June 24, 2019 15:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hsiaoer/d849eae4f2879cb2d227ee9c0d6841e6 to your computer and use it in GitHub Desktop.
Save hsiaoer/d849eae4f2879cb2d227ee9c0d6841e6 to your computer and use it in GitHub Desktop.
/// Remove background of input image based on an alpha mask.
///
/// - Parameters:
/// - image: Image to mask
/// - mask: Input mask. Reduces pixel opacity by mask alpha value. For instance
/// an alpha value of 255 will be completely opaque, 0 will be completely transparent
/// and a value of 125 will be partially transparent.
/// - Returns: Image mask with background removed.
func createMask(of image: UIImage, fromMask mask: UIImage, withBackground background: UIImage? = nil) -> UIImage? {
guard let imageCG = image.cgImage, let maskCG = mask.cgImage else { return nil }
let imageCI = CIImage(cgImage: imageCG)
let maskCI = CIImage(cgImage: maskCG)
let background = background?.cgImage != nil ? CIImage(cgImage: background!.cgImage!) : CIImage.empty()
guard let filter = CIFilter(name: "CIBlendWithAlphaMask") else { return nil }
filter.setValue(imageCI, forKey: "inputImage")
filter.setValue(maskCI, forKey: "inputMaskImage")
filter.setValue(background, forKey: "inputBackgroundImage")
guard let maskedImage = context.createCGImage(filter.outputImage!, from: maskCI.extent) else {
return nil
}
return UIImage(cgImage: maskedImage)
}
func createSticker(_ image: UIImage) {
/// Create the mask ...
/// Use mask to create image of transparent sky.
guard let skyRemoved = createMask(of: image, fromMask: mask) else { return }
DispatchQueue.main.async {
self.imageView.image = skyRemoved
}
}
}
@jarakys
Copy link

jarakys commented Jun 27, 2023

Thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment