扫描UIImage的外观(再现CIEdgeWork)

问题描述 投票:-2回答:1

我目前正在努力重现图像的扫描外观

发现很多工作-CIFilter CIEdgeWork-是最好的(但不足以满足我的需要)。

original image

current result

expected image

非常乐意提供帮助。

ios swift core-image cifilter
1个回答
0
投票

完成删除图像饱和度并增加其亮度和对比度的操作会更容易。您将需要使用这些值来将结果微调到您的需求:

extension String {
    static let colorControls = "CIColorControls"
}

extension UIImage {
    var coreImage: CIImage? { CIImage(image: self) }
}

extension CIImage {

    var image: UIImage? { UIImage(ciImage: self) }

    func applying(brightness: Float, contrast: Float, saturation: Float) -> CIImage? {
        applyingFilter(.colorControls,
                       parameters: [kCIInputBrightnessKey: brightness,
                                    kCIInputContrastKey: contrast,
                                    kCIInputSaturationKey: saturation])
    }

    func renderedImage() -> UIImage? {
        guard let image = image else { return nil }
        return UIGraphicsImageRenderer(size: image.size,
                                       format: image.imageRendererFormat).image { _ in
            image.draw(in: CGRect(origin: .zero, size: image.size))
        }
    }
}

游乐场测试

let image = UIImage(data: try! Data(contentsOf: URL(string: "https://i.stack.imgur.com/KEZE6.jpg")!))!
if let coreImage = image.coreImage,
    let filteredImage = coreImage.applying(brightness: 0.5, contrast: 1.75, saturation: 0) {
    // use your filtered core image here
    // filteredImage
    // or get an UIImage from it
    // filteredImage.image
    // if you need to convert it to JPEG or PNG you would need to render your core image 
    // filteredImage.renderedImage()

}
© www.soinside.com 2019 - 2024. All rights reserved.