Последние пару дней я искал, как реализовать фильтр для UIImage, вручную манипулируя яркостью, контрастностью, бликами, тенями, теплом и т. д., используя UISlider?
Вот мой код, который в настоящее время используется для регулировки яркости.
let currentValue = Int(editPictureView.sliderView.value)
editPictureView.currentPropertyValue.text = String(currentValue) + " "
brightnessFilter.setValue(NSNumber(value: editPictureView.sliderView.value), forKey: "inputBrightness")
outputImage = brightnessFilter.outputImage!
//let imageRef = context.createCGImage(outputImage, from: outputImage.extent)
newUIImage = UIImage(ciImage: outputImage)
editPictureView.selectedImageToEdit.image = newUIImage;
Но я получаю сообщение об ошибке, в котором говорится, что он нашел nil при распаковке. Все, о чем я прошу вас, это поделиться тем чувством, которое вы испытали, когда впервые решили эту задачу, и если вы сможете объяснить это, вы также лучше поймете это сами или, по крайней мере, так, как гласит история. Но если честно заранее спасибо.
Ответ 1 · рейтинг 2 · Dev
func imageBrightness(imgView : UIImageView , sliderValue : CGFloat, image: UIImage){
let aCGImage = image.cgImage
aCIImage = CIImage(cgImage: aCGImage!)
context = CIContext(options: nil)
brightnessFilter = CIFilter(name: "CIColorControls")
brightnessFilter.setValue(aCIImage, forKey: "inputImage")
brightnessFilter.setValue(sliderValue, forKey: "inputBrightness")
outputImage = brightnessFilter.outputImage!
let cgimg = context.createCGImage(outputImage, from: outputImage.extent)
newUIImage = UIImage(cgImage: cgimg!)
imgView.image = newUIImage
print("brightness")
}
Вызовите этот метод и передайте значение ползунка и изображение следующим образом: imageBrightnessEdit(imgView: self.imgView, sliderValue: CGFloat(value), image: imgSelected)
Для контраста:
func imageContrast(imgView : UIImageView , sliderValue : CGFloat, image: UIImage){
let aUIImage = image
let aCGImage = aUIImage.cgImage
aCIImage = CIImage(cgImage: aCGImage!)
context = CIContext(options: nil)
contrastFilter = CIFilter(name: "CIColorControls")
contrastFilter.setValue(aCIImage, forKey: "inputImage")
aCIImage = CIImage(cgImage: aCGImage!)
context = CIContext(options: nil)
contrastFilter = CIFilter(name: "CIColorControls")
contrastFilter.setValue(aCIImage, forKey: "inputImage")
contrastFilter.setValue(sliderValue, forKey: "inputContrast")
outputImage = contrastFilter.outputImage!
let cgimg = context.createCGImage(outputImage, from: outputImage.extent)
newUIImage = UIImage(cgImage: cgimg!)
imgView.image = newUIImage
print("contrast")
}