1
func getImageWithFilter(by filterType: MainViewModel.FilterType,
    image: CIImage) -> CIImage {

    guard filterType.filterEnabled,
        let filter = CIFilter(name: filterType.rawValue)
    else {
        return image
    }
    filter.setValue(image, forKey: kCIInputImageKey)

    return filter.outputImage ?? image
}

在此处输入图像描述 在此处输入图像描述

我有两个输出:

  • 用于预览的 AVCaptureVideoDataOutput
  • AVCapturePhotoOutput 用于在 hightResolution 中保存照片。

应用过滤器后,我得到不同的结果

请帮我解决这个问题。

4

1 回答 1

1

发生这种情况是因为内置 Core Image 过滤器的大多数参数都以像素为基础进行操作。在您的情况下,它是过滤器的inputRadius参数。CICrystallize从文档:

半径决定了使用多少像素来创建效果。半径越大,所得晶体越大。

这意味着您需要根据输入大小将参数设置为不同的值。

我通常会计算某种因子,然后乘以我的​​基本参数值。例如:

let inputSizeFactor = min(inputImage.size.width, inputImage.size.height) / 1000
let scaledRadius = radius * inputSizeFactor
filter.setValue(scaledRadius, forKey: "inputRadius")
于 2019-08-06T08:28:15.133 回答