iOS10 beta3上的图像屏蔽失败

时间:2016-07-22 12:22:07

标签: ios swift uiimage ios10

一段时间以来,我们使用以下代码来屏蔽灰度图像而不对彩色图像透明。

在Apple发布iOS 10 beta 3之前,这种情况一直很好。突然之后,不再应用蒙版,导致只返回一个带有特定颜色的方框。

这背后的逻辑可以在 https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_images/dq_images.html

标题使用图像蒙版屏蔽图像

此代码的逻辑: *拍摄没有alpha的灰度图像 *使用给定颜色创建实心图像 *从给定图像创建蒙版 *使用创建的蒙版遮罩实体图像 *输出是一个蒙面图像,同时也要考虑它们之间的颜色(灰色可能是浅红色,即。)。

有谁知道如何修复此功能? 如果您有XCode 8 beta 3,您可以运行此代码并在低于iOS 10的模拟器上运行正确,在iOS 10上它只会创建一个方框

示例图片: Example image

    public static func image(maskedWith color: UIColor, imageNamed imageName: String) -> UIImage? {

    guard let image = UIImage(named: imageName)?.withRenderingMode(.alwaysOriginal) else {
        return nil
    }

    guard image.size != CGSize.zero else {
        return nil
    }

    guard
        let maskRef = image.cgImage,
        let colorImage = self.image(with: color, size: image.size),
        let cgColorImage = colorImage.cgImage,
        let dataProvider = maskRef.dataProvider
        else {
        return nil
    }

    guard
        let mask = CGImage(maskWidth: maskRef.width, height: maskRef.height, bitsPerComponent: maskRef.bitsPerComponent, bitsPerPixel: maskRef.bitsPerPixel, bytesPerRow: maskRef.bytesPerRow, provider: dataProvider, decode: nil, shouldInterpolate: true),
        let masked = cgColorImage.masking(mask)
        else {
        return nil
    }

    let result = UIImage(cgImage: masked, scale: UIScreen.main().scale, orientation: image.imageOrientation)

    return result
}

public static func image(with color: UIColor, size: CGSize) -> UIImage? {

    guard size != CGSize.zero else {
        return nil
    }

    let rect = CGRect(origin: CGPoint.zero, size: size)

    UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.main().scale)

    defer {
        UIGraphicsEndImageContext()
    }

    guard let context = UIGraphicsGetCurrentContext() else {
        return nil
    }

    context.setFillColor(color.cgColor)
    context.fill(rect)

    let image = UIGraphicsGetImageFromCurrentImageContext()

    return image;
}

1 个答案:

答案 0 :(得分:0)

此问题已在iOS10 beta 4中解决。