这是给经验丰富的 iOS 开发者的一个问题。
Core Graphics 函数CGImageMaskCreate从灰度图像创建 CG 图像蒙版。我正在使用导出为灰度的 JPG。我仔细检查了:在 Photoshop 中打开时,转到图像 > 模式 > 它显示“灰度”。
以下方法是 UIImage 类别的一部分。它需要一个遮罩 UIImage(只是一个灰度 JPG),它的目标是遮罩自己(一个 UIImage,它是一张 JPG 照片),因此生成的图像具有透明度。
它适用于所有 4 英寸设备和 iPad 4。但 CGImageMaskCreate 的输出在任何装有 iOS 6 或 iOS 7 的 3.5 英寸设备上都是无效的。也就是说,生成的图像只是 100% 透明。在 iPhone 模拟器 3.5 英寸(Xcode 5)中也是如此。我不知道为什么。有人说这是 iOS 7 的问题,但它适用于 iOS 7 的 iPhone 5 和 5S。我也尝试了 PNG-8 灰度,结果相同。
是否有来自 Apple 的已知 TN 或此错误的解决方法?
- (UIImage*)maskedImageWithMask:(UIImage *)maskImage {
CGImageRef imageRef = self.CGImage;
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, NO);
CGImageRef maskedImageRef = CGImageCreateWithMask(imageRef, mask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef scale:self.scale orientation:self.imageOrientation];
CGImageRelease(mask);
CGImageRelease(maskedImageRef);
return maskedImage;
}
编辑:
在 3.5 英寸 iPhone 模拟器和设备上 CGImageIsMask(mask) 返回 NO。在 4 英寸模拟器和设备上,它返回 YES。所以 CGImageMaskCreate 有时肯定不会创建蒙版。