问题描述
我使用这个函数来检测 UIImage 是否具有透明度:
extension UIImage {
public func isTransparent() -> Bool {
guard let alpha: CGImageAlphaInfo = self.cgImage?.alphaInfo else { return false }
return alpha == .first || alpha == .last || alpha == .premultipliedFirst || alpha == .premultipliedLast
}
}
但它不起作用。我用没有透明度的 png 图像尝试过,但它仍然返回 true。
每个像素的循环不是一个好主意,因为我猜它太贵了。 知道如何检查 UIImage 是否具有透明度,如下图所示: image
解决方法
您的解决方案似乎很好,并且没有问题,但您也可以查看此解决方案:
- (BOOL)hasAlpha : (UIImage*) img
{
CGImageAlphaInfo alpha = CGImageGetAlphaInfo(img.CGImage);
return (
alpha == kCGImageAlphaFirst ||
alpha == kCGImageAlphaLast ||
alpha == kCGImageAlphaPremultipliedFirst ||
alpha == kCGImageAlphaPremultipliedLast
);
}
,
您询问了 Swift。 Menaim 给出了一个有用的答案,但在 Objective-C 中。
这是一个 Swift 版本:
extension UIImage {
var hasAlpha: Bool {
guard let alphaInfo = self.cgImage?.alphaInfo else {return false}
return alphaInfo != CGImageAlphaInfo.none &&
alphaInfo != CGImageAlphaInfo.noneSkipFirst &&
alphaInfo != CGImageAlphaInfo.noneSkipLast
}
}
我刚刚在没有 Alpha 通道的 PNG 图像上测试了上述内容,并且成功了。