Было бы проще выполнить sh то, что вы хотите, удалив насыщенность изображения и увеличив его яркость и контрастность. Вам нужно поиграть с этими значениями, чтобы точно настроить результат в соответствии с вашими потребностями:
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.25, 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()
}