Sie CIColorControls und setzen Kontrast Key kCIInputContrastKey
können die Schwarz/Weiß-Kontrast wie folgt zu erhöhen:
Xcode 9 • Swift 4
extension UIImage {
func applying(contrast value: NSNumber) -> UIImage? {
guard
let ciImage = CIImage(image: self)?.applyingFilter("CIColorControls", parameters: [kCIInputContrastKey: value])
else { return nil } // Swift 3 uses withInputParameters instead of parameters
UIGraphicsBeginImageContextWithOptions(size, false, scale)
defer { UIGraphicsEndImageContext() }
UIImage(ciImage: ciImage).draw(in: CGRect(origin: .zero, size: size))
return UIGraphicsGetImageFromCurrentImageContext()
}
}
let link = "https://i.stack.imgur.com/Xs4RX.jpg"
let image = UIImage(data: try! Data(contentsOf: URL(string: link)!))
if let contrastIncreased = image?.applying(contrast: 1.5) {
// use contrastIncreased image here
}
Um zu konvertieren von Farben in Graustufen Sie die Sättigung Key kCIInputSaturationKey
auf Null setzen:
extension CIImage {
var image: UIImage? {
let image = UIImage(ciImage: self)
UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale)
defer { UIGraphicsEndImageContext() }
image.draw(in: CGRect(origin: .zero, size: image.size))
return UIGraphicsGetImageFromCurrentImageContext()
}
}
extension UIImage {
func applying(saturation value: NSNumber) -> UIImage? {
return CIImage(image: self)?
.applyingFilter("CIColorControls", parameters: [kCIInputSaturationKey: value])
.image
} // Swift 3 uses withInputParameters instead of parameters
var grayscale: UIImage? {
return applying(saturation: 0)
}
}
let link = "https://i.stack.imgur.com/Xs4RX.jpg"
let image = UIImage(data: try! Data(contentsOf: URL(string: link)!))
if let grayscale = image?.grayscale {
// use grayscale image here
}
überprüfen kann diesen Beitrag http://stackoverflow.com/questions/40178846/convert-uiimage-to-grayscale-keeping-image-quality/40182080#40182080 helfen – Joe
Ich glaube, Sie muss den Unterschied zwischen * Graustufen * und * total schwarz und weiß * erklären. @Joe gab dir grundsätzlich ** CIPhotoEffectNoir ** - das funktioniert in vielen Fällen (und ist eine sehr gute Antwort). Aber sagen Sie mit "Gescannt", dass Sie einen Schwellenwert "Klammer" Wert benötigen, der besagt, dass dieses Pixel ** entweder ** schwarz oder weiß? Es kann gemacht werden, aber nur mit (1) einem kundenspezifischen CI-Kernel, der (2) entweder einen fest codierten oder parametrisierten "Klammer" -Wert erlaubt. – dfd