У меня есть функция, которая должна масштабировать изображение, используя фильтры Core Image.Он принимает NSImage и номер измерения в качестве аргументов и возвращает масштабированный NSImage.Я использовал: Обработка изображения с использованием встроенных фильтров в качестве ссылки.Код, кажется, обрезает изображение вместо изменения его размера.Я клянусь, у меня это работало в одной точке, так где я ошибся?
func imageCIScale(_ image: NSImage, dimension: CGFloat) -> NSImage? {
guard let data = image.tiffRepresentation,
let scaleFilter = CIFilter(name: "CILanczosScaleTransform"),
let ciImage = CIImage(data: data)
else {
print("Failure! Abject failure! Couldn't even get started")
return nil
}
let scaleFactor = dimension / image.size.height
scaleFilter.setValue(ciImage, forKey: kCIInputImageKey)
scaleFilter.setValue(scaleFactor, forKey: kCIInputScaleKey)
scaleFilter.setValue(1.0, forKey: kCIInputAspectRatioKey)
let outputImage = scaleFilter.outputImage
let context = CIContext()
guard let scaledImage = context.createCGImage(ciImage, from: outputImage!.extent) else {
print("Failed to create CGImage")
return nil
}
return NSImage(cgImage: scaledImage, size: NSZeroSize)
}
Функция будет вызываться как:
let myScaledNSImage = imageCIScale(myOriginalNSImage, dimension: 32.0)
и должна привести к 32 x 32изображение