如何使用CIFilter在Swift中将UIImage转换为灰度? [英] How can I convert an UIImage to grayscale in Swift using CIFilter?

查看:829
本文介绍了如何使用CIFilter在Swift中将UIImage转换为灰度?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

到目前为止,我正在为iOS应用构建一个扫描仪组件,我将结果图像以正确的视角进行裁剪。
现在我需要将彩色图像变成黑白扫描文档。

I am building a scanner component for an iOS app so far I have the result image cropped and in the correct perspective. Now I need to turn the color image into Black and white "Scanned" document.

我试图使用 - CIPhotoEffectNoir但它更灰度然后完全黑与白。我希望获得100%黑色和100%白色的完整对比图像。

I tried to use - "CIPhotoEffectNoir" but it more grayscale then totally black and white. I wish to get a full contrast image with 100% black and 100% white.

我如何实现这一目标?
谢谢

How can I achieve that? Thanks

推荐答案

您可以使用CIColorControls并设置对比度键 kCIInputContrastKey 增加黑/白对比度如下:

You can use CIColorControls and set Contrast Key kCIInputContrastKey to increase the black/white contrast as follow:

Xcode 9•Swift 4

extension UIImage {
    func applying(contrast value: NSNumber) -> UIImage? {
        guard
            let ciImage = CIImage(image: self)?.applyingFilter("CIColorControls", parameters: [kCIInputContrastKey: value])
            else { return nil } // Swift 3 uses withInputParameters instead of parameters 
        UIGraphicsBeginImageContextWithOptions(size, false, scale)
        defer { UIGraphicsEndImageContext() }
        UIImage(ciImage: ciImage).draw(in: CGRect(origin: .zero, size: size))
        return UIGraphicsGetImageFromCurrentImageContext()
    }
}







let link = "https://i.stack.imgur.com/Xs4RX.jpg"
let image = UIImage(data: try! Data(contentsOf: URL(string: link)!))
if let contrastIncreased = image?.applying(contrast: 1.5) {
     // use  contrastIncreased image here
}






要从颜色转换为灰度,您可以设置饱和度键 kCIInputSaturationKey 为零:

extension CIImage {
    var image: UIImage? {
        let image = UIImage(ciImage: self)
        UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale)
        defer { UIGraphicsEndImageContext() }
        image.draw(in: CGRect(origin: .zero, size: image.size))
        return UIGraphicsGetImageFromCurrentImageContext()
    }
}
extension UIImage {
    func applying(saturation value: NSNumber) -> UIImage? {
        return CIImage(image: self)?
            .applyingFilter("CIColorControls", parameters: [kCIInputSaturationKey: value])
            .image
    }  // Swift 3 uses withInputParameters instead of parameters 
    var grayscale: UIImage? {
        return applying(saturation: 0)
    }
}







let link = "https://i.stack.imgur.com/Xs4RX.jpg"
let image = UIImage(data: try! Data(contentsOf: URL(string: link)!))
if let grayscale = image?.grayscale {
    // use  grayscale image here
}

这篇关于如何使用CIFilter在Swift中将UIImage转换为灰度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆