当前位置: 首页 > 面试题库 >

如何使用CIFilter在Swift中将UIImage转换为灰度?

南宫俊喆
2023-03-14
问题内容

到目前为止,我正在为iOS应用程序构建扫描仪组件,并且将结果图像裁剪为正确的角度。现在,我需要将彩色图像转换为黑白“扫描”文档。

我尝试使用-“ CIPhotoEffectNoir”,但它的灰度更高,然后完全是黑白。我希望获得100%黑色和100%白色的全对比度图像。

我该如何实现?谢谢


问题答案:

您可以使用CIColorControls并设置Contrast Key kCIInputContrastKey来增加黑白对比度,如下所示:

Xcode 9•Swift 4

extension String {
    static let colorControls = "CIColorControls"
}
extension UIImage {
    var coreImage: CIImage? { return CIImage(image: self) }
}
extension CIImage {
    var uiImage: UIImage? { return UIImage(ciImage: self) }
    func applying(contrast value: NSNumber) -> CIImage? {
        return applyingFilter(.colorControls, parameters: [kCIInputContrastKey: value])
    }
    func renderedImage() -> UIImage? {
        guard let image = uiImage else { return nil }
        return UIGraphicsImageRenderer(size: image.size,
                                       format: image.imageRendererFormat).image { _ in
            image.draw(in: CGRect(origin: .zero, size: image.size))
        }
    }
}
let url = URL(string: "https://i.stack.imgur.com/Xs4RX.jpg")!
do {
    if let coreImage = UIImage(data: try Data(contentsOf: url))?.coreImage,
        let increasedContrast = coreImage.applying(contrast: 1.5) {
        imageView.image = increasedContrast.uiImage
        // if you need to convert your image to data (JPEG/PNG) you would need to render the ciimage using renderedImage method on CIImage   
    }
} catch {
    print(error)
}

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

extension CIImage {
    func applying(saturation value: NSNumber) -> CIImage? {
        return applyingFilter(.colorControls, parameters: [kCIInputSaturationKey: value])
    }
    var grayscale: CIImage? { return applying(saturation: 0) }
}
let url = URL(string: "https://i.stack.imgur.com/Xs4RX.jpg")!
do {
    if let coreImage = UIImage(data: try Data(contentsOf: url))?.coreImage, 
        let grayscale = coreImage.grayscale {
        // use  grayscale image here
        imageView.image = grayscale.uiImage
    }
} catch { 
    print(error) 
}


 类似资料:
  • 问题内容: 我正在尝试保存到,然后在Swift中读回新的内容。要转换到我使用下面的代码: 如何将(即)转换回新的? 问题答案: 假设图像的比例为1。 在Swift 4.2中,将以下代码用于get Data()。

  • 问题内容: 我一直在尝试找出如何在Swift中将rgb像素数据数组转换为UIImage。 我将每个像素的rgb数据保持在一个简单的结构中: 我已经实现了以下功能,但是生成的图像不正确: 关于如何正确地将rgb数组转换为UIImage的任何提示或指针? 问题答案: 注意: 这是iOS创建的解决方案。有关macOS和的解决方案,请参见此答案。 唯一的问题是结构中的数据类型需要为。我在Playgroun

  • 问题内容: 进行UIImage翻转的解决方案是使用Objective-C代码: 但是,imageWithCGImage在Swift中不可用!是否有使用Swift水平翻转图像的解决方案?谢谢! 问题答案: 大多数工厂方法会迅速转换为初始化程序。只要有可用,即使class方法仍然可用,它们也是首选。您可以使用: 用法如下所示:

  • 我有一个关于将我的PNG图像更改为灰度的问题。我想做一个方法,接受byte[]图像作为参数,并作为byte[]返回新修改的灰度图像。 我发现了一些链接,使图像灰度与JPEG图像使用下面的片段。 我的参考资料在下面:我如何使用ImageJ作为单独的Java应用程序的库?https://www.mkyong.com/java/how-to-convert-byte-to-bufferedimage-i

  • 问题内容: 我想从服务器中获取JSON数据并在启动时对其进行操作。在Objective- C中,我使用此代码转换为,因为获取的数据有时可能包含null。 但是,在Swift中,可以将转换为吗?我想使用以下操作(代码是Objective-C的): 在上面的代码中,当获取的数据的键为时,则对象的属性设置为。 我使用Xcode 6 Beta 6。 问题答案: 这可能是您要寻找的:

  • 问题内容: 我从NSData的Web服务响应中接收到base64String,如何快速将base64String转换为String? 如果文件包含某些表格式/图像,则编码和解码都会给出无效的base64String,base64String的编码和解码可以很好地用于仅包含文本的文件。如何将文件转换为base64String进行编码和解码,无论文件内容如何?文件格式为doc,docx,pdf,txt