Reputation: 6228
This is my code block to invert colors of an image:
import Foundation
import UIKit
import CoreImage
extension UIImage {
static let defaultImage = UIImage(systemName: "person.circle.fill")!
func colorInverted() -> UIImage {
guard let ciImage = CIImage(image: self) else {
print("UIImage: Failed to get CIImage!")
return UIImage.defaultImage
}
guard let filter = CIFilter(name: "CIColorInvert") else {
print("UIImage: Failed to get filter!")
return UIImage.defaultImage
}
filter.setValue(ciImage, forKey: kCIInputImageKey)
guard let image = filter.outputImage else {
print("UIImage: Failed to get output image!")
return UIImage.defaultImage
}
return UIImage(ciImage: image)
}
}
This is working fine on simulator:
But on real device the result is a full blue image:
I have searched for a while but could not able to find a solution. Can anyone help?
Note: I am getting images from GitHub API:
https://avatars0.githubusercontent.com/u/1?v=4
Upvotes: 2
Views: 528
Reputation: 54
use CIContext instead of UIImage(CIImage:)
func applyFilter(){
let image = CIImage(CGImage: myimage.image?.CGImage)
let filter = CIFilter(name: "CISepiaTone")
filter.setDefaults()
filter.setValue(image, forKey: kCIInputImageKey)
let context = CIContext(options: nil)
let imageRef = context.createCGImage(filter.outputImage, fromRect: image.extent())
myimage.image = UIImage(CGImage: imageRef)
}
Upvotes: 1