调整CIImage的大小,使其达到准确的大小。

问题描述 投票:0回答:1

我正在寻找一种方法来调整一个 CIImage 准确的尺寸,因为我使用的是一个混合的 CIFilter 并需要两者混合 CIImage的大小是一样的。我需要用一个 CIFilter 来调整图像的大小,因为这对我来说在内存方面会更便宜,而且我不能使用Core Graphics等。

我知道有一个 CILanczosScaleTransform 过滤器可用,但它不允许调整精确的尺寸,只能缩小或放大。

有什么办法可以使 CIImage 准确尺寸,只用 Core Image?

swift scale core-image cifilter ciimage
1个回答
3
投票

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.14973958333333,长宽比为0.6195652173913043,目标输出尺寸为 (w 190 h 230).

© www.soinside.com 2019 - 2024. All rights reserved.