一段时间以来,我们使用以下代码来屏蔽灰度图像而不对彩色图像透明。
在Apple发布iOS 10 beta 3之前,这种情况一直很好。突然之后,不再应用蒙版,导致只返回一个带有特定颜色的方框。
标题使用图像蒙版屏蔽图像
此代码的逻辑: *拍摄没有alpha的灰度图像 *使用给定颜色创建实心图像 *从给定图像创建蒙版 *使用创建的蒙版遮罩实体图像 *输出是一个蒙面图像,同时也要考虑它们之间的颜色(灰色可能是浅红色,即。)。
有谁知道如何修复此功能? 如果您有XCode 8 beta 3,您可以运行此代码并在低于iOS 10的模拟器上运行正确,在iOS 10上它只会创建一个方框
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;
}
答案 0 :(得分:0)
此问题已在iOS10 beta 4中解决。