David West
David West

Reputation: 1590

CIFilter has changed UIImage Aspect Ratio - SWIFT

I have implemented a CIFilter to profileImages in my iOS app. I have added orientation to prevent pixelation but I am suffering from the aspect ratio "ScaleAspectFill" not being applied to the images. The same images in colour have the perfect aspect ratio...i.e. when I just have:

self.p1ProfilePic.image = p1Img
  1. I have specified exact height and widths for the profile images in Storyboard.
  2. I have tried adding programmatically the .contentMode as .ScaleAspectFill but with no effect whatsoever.
  3. What am I missing here? CGRect?

            let originalImageP1 = CIImage(image: p1Img!)
            let filter = CIFilter(name: "CIPhotoEffectTonal")
            filter!.setDefaults()
            filter!.setValue(originalImageP1, forKey: kCIInputImageKey)
            let outputImage = filter!.outputImage
            self.p1ProfilePic.image = UIImage(CIImage: outputImage!, scale: UIScreen.mainScreen().scale, orientation: .Up)
    

Upvotes: 6

Views: 1415

Answers (1)

Flex Monkey
Flex Monkey

Reputation: 3633

Creating a UIImage from a CIImage with your technique creates images that don't respect contentMode. Try this instead:

let ciContext = CIContext()
let cgImage = ciContext.createCGImage(filter.outputImage!,
    fromRect: filter.outputImage!.extent)

self.p1ProfilePic.image = UIImage(CGImage: cgImage)

Cheers!

Simon

Upvotes: 11

Related Questions