I'm currently porting bits of code from CoreImage to GPUImage and having a problem saving processed file to disk. While this worked with CoreImage:
guard
let blurFilter = CIFilter(name: "CIGaussianBlur"),
let imageURL = Bundle.main.url(forResource: "my-image", withExtension: "png"),
let ciImage = CIImage(contentsOf: imageURL)
else {
return
}
blurFilter.setValue(ciImage, forKey: kCIInputImageKey)
blurFilter.setValue(100, forKey: kCIInputRadiusKey)
guard
let result = blurFilter.outputImage,
let cgImage = context.createCGImage(result, from: result.extent)
else {
return
}
let destinationURL = desktopURL.appendingPathComponent("output.png")
let nsImage = NSImage(cgImage: cgImage, size: ciImage.extent.size)
The following code ported to GPUImage:
let testImage = NSImage(named:"my-image.png")!
let blurFilter = GaussianBlur()
let filteredImage = testImage.filterWithOperation(blurFilter)
let desktopURL = FileManager.default.urls(for: .desktopDirectory, in: .userDomainMask).first!
let destinationURL = desktopURL.appendingPathComponent("output.png")
let nsImage = NSImage(nsImage: filteredImage, size: filteredImage.extent.size)
Gives the following error message pertaining to the last line:
Value type of 'NSImage' has no member 'extent'
filteredImage
is an NSImage. In your Core Image code, ciImage
is a, well, CIImage. CIImage has an extent
property, NSImage does not.
There's no need to create nsImage
in your second code, filteredImage
is already an NSImage. You're done.