微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何应用 CIVignette 就好像 CIImage 是方形的一样?

如何解决如何应用 CIVignette 就好像 CIImage 是方形的一样?

我有一个 1080x1920 CIImage 并希望应用 CIVignette,就像图像是方形的一样(模仿相机镜头)。

我是 CoreImage 的新手,想知道如何将我的 extentCIImage 临时更改为 1920x1920。 (但我不确定是否需要这样做。)

我可以左右复制粘贴原始图像的两个窄条,然后复制粘贴 CICrop,但这似乎很麻烦。

有什么想法吗?

解决方法

您可以结合使用 clampedToExtent(这会导致图像无限重复其边界像素)和 cropped 来使图像变为方形。然后您可以应用小插图并将结果裁剪回原始范围:

// "crop" to square,placing the image in the middle
let longerSize = max(inputImage.extent.width,inputImage.extent.height)
let xOffset = (longerSize - inputImage.extent.width) / 2.0
let yOffset = (longerSize - inputImage.extent.height) / 2.0
let squared = inputImage.clampedToExtent().cropped(to: CGRect(x: -xOffset,y: -yOffset,width: longerSize,height: longerSize))

// apply vignette
let vignetteFilter = CIFilter(name: "CIVignette")!
vignetteFilter.setValue(squared,forKey: kCIInputImageKey)
vignetteFilter.setValue(1.0,forKey: kCIInputIntensityKey)
vignetteFilter.setValue(1.0,forKey: kCIInputRadiusKey)
let withVignette = vignetteFilter.outputImage!

// crop back to original extent
let output = withVignette.cropped(to: inputImage.extent)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。