如何解决如何应用 CIVignette 就好像 CIImage 是方形的一样?
我有一个 1080x1920 CIImage
并希望应用 CIVignette
,就像图像是方形的一样(模仿相机镜头)。
我是 CoreImage 的新手,想知道如何将我的 extent
的 CIImage
临时更改为 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 举报,一经查实,本站将立刻删除。