我希望将彩色普通图像转换为扫描图像。
如下图2所示,第一张图片是原始图片,第二张图片是调整后的图片,效果应该像第二张图片一样,页面背面的文字也应该消失:第一张图片:
第二张图片:
我想使用CoreImage和CIFilter来做到这一点。除了对比度和亮度。我认为应该像photoshop一样调整水平。但怎么能调整呢?或其他方法?
我试图在photoshop中调整它,似乎使用photoshop的关卡功能可以达到这个效果,价值如下图所示:
但我不知道如何使用CIFilter或其他方法?我不想导入第三方框架或源。因为iOS 11 Notes APP可以达到这个效果,我认为系统的方法和框架可以做到这一点。
答案 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!)
输出(从实际设备输出)
有关Core Image Filter
的更多了解,请尝试以下链接和答案。
Get UIImage from function和Convert 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
作为起点:
或者,您可能只是最终使用第三方框架,尽管您已经声明您不想使用第三方库。如果是这种情况,我建议GPUImage2
,以防万一:
最后,我发现了一个类似的问题,所以你可能想看看:
祝你好运。How can I map Photoshop's level adjustment to a Core Image filter?