用UIImage掩盖UIImage

时间:2017-05-17 15:58:00

标签: ios swift uiimage core-graphics mask

我试图用Swift中的另一个UIImage掩盖UIImage。 当我在xcode操场中运行代码时,实现了期望的结果,但是当我在模拟器上运行相同的代码时却没有。 Desired output as seen in xcode playground

Output as seen in simulator

这是我运行的代码:

func maskImage(image: UIImage, maskImage: UIImage) -> UIImage? {
    let size = image.size
    let rect = CGRect(origin: CGPoint.zero, size: size)

    // Begin graphics
    UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
    guard let context = UIGraphicsGetCurrentContext() else { return nil }

    context.translateBy(x: 0.0, y: image.size.height)
    context.scaleBy(x: 1.0, y: -1.0)

    let mask = maskImage.cgImage

    context.clip(to: rect, mask: mask!)
    context.draw(image.cgImage!, in: rect)

    let img =  UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return img
}

.clip(to rect: CGRect, mask: CGImage)的文档说:

  

如果mask参数是图像,则mask就像alpha蒙版一样   并与当前剪辑区域混合。

我认为这就是为什么第二张图片改为使用alpha蒙版。但是如何在第一张图片中获得所需的输出?为什么游乐场显示正确的结果而不是模拟器?

旁注:CGImage.masking(_ mask: CGImage) -> CGImage?也会产生alpha蒙版。

0 个答案:

没有答案