如何像扫描图像一样调整彩色图像

时间:2017-09-25 03:55:00

标签: ios objective-c swift core-image cifilter

我希望将彩色普通图像转换为扫描图像。

如下图2所示,第一张图片是原始图片,第二张图片是调整后的图片,效果应该像第二张图片一样,页面背面的文字也应该消失:

第一张图片:

original image

第二张图片:

effected image

我想使用CoreImage和CIFilter来做到这一点。除了对比度和亮度。我认为应该像photoshop一样调整水平。但怎么能调整呢?或其他方法?

我试图在photoshop中调整它,似乎使用photoshop的关卡功能可以达到这个效果,价值如下图所示:

enter image description here

但我不知道如何使用CIFilter或其他方法?我不想导入第三方框架或源。因为iOS 11 Notes APP可以达到这个效果,我认为系统的方法和框架可以做到这一点。

2 个答案:

答案 0 :(得分:1)

尝试以下代码。

func getScannedImage(inputImage: UIImage) -> UIImage? {

    let openGLContext = EAGLContext(api: .openGLES2)
    let context = CIContext(eaglContext: openGLContext!)

    let filter = CIFilter(name: "CIColorControls")
    let coreImage = CIImage(image: filterImage.image!)

    filter?.setValue(coreImage, forKey: kCIInputImageKey)
    //Key value are changable according to your need.
    filter?.setValue(7, forKey: kCIInputContrastKey) 
    filter?.setValue(1, forKey: kCIInputSaturationKey) 
    filter?.setValue(1.2, forKey: kCIInputBrightnessKey) 

    if let outputImage = filter?.value(forKey: kCIOutputImageKey) as? CIImage {
    let output = context.createCGImage(outputImage, from: outputImage.extent)
        return UIImage(cgImage: output!)
    }     
    return nil
}

你可以像下面这样调用上面的函数。

filterImage.image = getImage(inputImage: filterImage.image!)

输出(从实际设备输出)

enter image description here

有关Core Image Filter的更多了解,请尝试以下链接和答案。

Get UIImage from functionConvert UIImage to grayscale keeping image quality

Apple Doc的核心图像过滤器参考:https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html

注意:有关更具体的要求,您需要创建自己的自定义过滤器。以下链接可能有助于https://spin.atomicobject.com/2016/10/20/ios-image-filters-in-swift/

答案 1 :(得分:0)

我相信为了手动实现类似Photoshop的水平调整功能,您需要了解图像处理领域的一些核心知识。

您可能需要阅读此Core Image Programming Guide作为起点:

  

https://developer.apple.com/library/content/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_intro/ci_intro.html

或者,您可能只是最终使用第三方框架,尽管您已经声明您不想使用第三方库。如果是这种情况,我建议GPUImage2以防万一

  

https://github.com/BradLarson/GPUImage2

最后,我发现了一个类似的问题,所以你可能想看看:

  

How can I map Photoshop's level adjustment to a Core Image filter?

祝你好运。