Convert image to black and white while preserving alpha channel
我想将已经具有Alpha通道(RGBA)的png图像转换为黑白图像。
我使用以下类别进行操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | func convertToGrayScale() -> UIImage { let imageRect:CGRect = CGRectMake(0, 0, self.size.width, self.size.height) let colorSpace = CGColorSpaceCreateDeviceGray() let width = self.size.width let height = self.size.height let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.None.rawValue) let context = CGBitmapContextCreate(nil, Int(width), Int(height), 8, 0, colorSpace, bitmapInfo.rawValue) CGContextDrawImage(context, imageRect, self.CGImage) let imageRef = CGBitmapContextCreateImage(context) let newImage = UIImage(CGImage: imageRef!) return newImage } |
但是,当我将
有没有办法,或者我正在尝试一些不可能的事情?
修正了使用CoreImage滤镜作为Yi.Zhang建议:)
1 2 3 4 5 6 7 | func convertToGrayScale() -> UIImage { let filter: CIFilter = CIFilter(name:"CIPhotoEffectMono")! filter.setDefaults() filter.setValue(CoreImage.CIImage(image: self)!, forKey: kCIInputImageKey) return UIImage(CGImage: CIContext(options:nil).createCGImage(filter.outputImage!, fromRect: filter.outputImage!.extent)) } |
(迅速2.0)