【问题标题】:How to achieve same CIFilter effect on multiple sizes of same image如何在同一图像的多个尺寸上实现相同的 CIFilter 效果
【发布时间】:2017-01-27 08:10:09
【问题描述】:

由于性能问题,我需要先过滤小图像,然后再过滤更高分辨率的图像。

我正在使用 CICrystallize 过滤器,但对于不同的图像分辨率,我无法获得相同的结果。我正在尝试这样的事情来根据图像大小更改输入半径值:

let radiusValue = image.size.width / 15.0
filter.setValue(radiusValue, forKey: kCIInputRadiusKey)

但结果无效,如图所示。

【问题讨论】:

  • 你在同一张图片上连续两次得到相同的结果吗?
  • 是的,我在同一张图片上连续两次得到完全相同的结果
  • 不知道这个效果有没有最大半径值?
  • 这个效果没有最大半径值,但是在某些时候如果半径值太大你会得到黑色的图像。

标签: ios swift cifilter


【解决方案1】:

我不知道你说的那么小是什么意思。 (调整大小?/裁剪?)

这样怎么样?如果图像和小图像是相同的方面,你可以得到一个很好的结果。

let ratio  = smallImage.size.width / originalSizeImage.size.width
let radius = 30

filter.setValue(radius * ratio, forKey: kCIInputRadiusKey)

【讨论】:

    【解决方案2】:

    你可以试试:

    let inputSizeFactor = min(inputImage.size.width, inputImage.size.height) / 1000
    let scaledRadius = radius * inputSizeFactor
    filter.setValue(scaledRadius, forKey: kCIInputRadiusKey)
    

    这是因为

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


    谢谢@FrankSchlegel

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 2023-03-06
      • 2012-03-15
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多