Search code examples
iosswiftimageuiimageviewswift5

Auto enhance UIImageView with no rotation


I have been at this for two days now and hopefully, you can help me out. I am trying to auto-enhance an image from UIImageView. The following code is rotating and resizing images SOMETIMES and I'm having a hard time determining when or why. From the lack of posts on the topic, I feel like I must be missing something super simple. Thank you ALL!

// my UIImageView is self.imgOut 

var enhanceImg = CIImage(image: self.imgOut.image!)

let filters = enhanceImg!.autoAdjustmentFilters(options: nil)

for filter: CIFilter in filters {
  filter.setValue(enhanceImg, forKey: kCIInputImageKey)
  enhanceImg = filter.outputImage!
}

let enhancedImg = UIImage(ciImage: enhanceImg!, scale: self.imgOut.image!.scale, orientation: self.imgOut.image!.imageOrientation)
self.imgOut.image = enhancedImg

Solution

  • If anyone comes across this - the fix is to use a cgImage:

        let coreImage = CIImage(image: self.imgOut.image!)
        var enhanceImg = CIImage()
        let ciContext = CIContext(options: nil)
    
        let filters = coreImage!.autoAdjustmentFilters(options: [.enhance: true])
    
        for filter: CIFilter in filters {
            filter.setValue(coreImage, forKey: kCIInputImageKey)
            enhanceImg = filter.outputImage!
        }
    
        let filteredImageRef2 = ciContext.createCGImage(enhanceImg, from: enhanceImg.extent)
        self.imgOut.image = UIImage(cgImage: filteredImageRef2!, scale: self.imgOut.image!.scale, orientation: self.imgOut.image!.imageOrientation)