CILanczosScaleTransform
имеет два параметра:
scale
: коэффициент масштабирования, используемый на изображении aspectRatio
: дополнительный коэффициент горизонтального масштабирования для использования на изображении
Используя эти два параметра, вы можете достичь целевого размера изображения. Вычислите коэффициент масштабирования для вертикального размера, чтобы получить желаемую высоту, а затем вычислите результат этого масштабирования, примененного к горизонтальному размеру. Это может не соответствовать ширине цели, поэтому рассчитайте соотношение сторон, чтобы применить его к масштабированной ширине, чтобы скорректировать его до желаемой ширины цели.
import CoreImage
let context = CIContext()
let imageURL = URL(fileURLWithPath: "sample.jpg")
let sourceImage = CIImage(contentsOf: imageURL, options: nil)
let resizeFilter = CIFilter(name:"CILanczosScaleTransform")!
// Desired output size
let targetSize = NSSize(width:190, height:230)
// Compute scale and corrective aspect ratio
let scale = targetSize.height / (sourceImage?.extent.height)!
let aspectRatio = targetSize.width/((sourceImage?.extent.width)! * scale)
// Apply resizing
resizeFilter.setValue(sourceImage, forKey: kCIInputImageKey)
resizeFilter.setValue(scale, forKey: kCIInputScaleKey)
resizeFilter.setValue(aspectRatio, forKey: kCIInputAspectRatioKey)
let outputImage = resizeFilter.outputImage
Мое примерное изображение имело размеры (w 2,048 h 1,536)
. Расчетный коэффициент масштабирования составил 0,1497395833333333, а соотношение сторон 0,6195652173913043, что дает целевые выходные размеры (w 190 h 230)
.
.