组合 CIImages,使一个居中且宽度相同

Compose CIImages such that one is centered and same width above the other

我正在努力实现这个结果:

我创建了宽高比为 16:9 的渐变图像。

这是我的代码:

extension UIImage {
    func mergeWithGradient(completion: @escaping (UIImage)->()){

        let width = self.size.width

        let maxWidth = min(width, 1024.0)
        let height = maxWidth * 16.0 / 9.0
        let totalSize = CGSize(width: maxWidth, height: height)

        let colors = self.colors()

    guard
        let gradientImage = UIImage(size: totalSize, gradientPoints: [(colors.top,0), (colors.bottom,1)].map{ GradientPoint(location: [=10=].1, color: [=10=].0)}),
        let cgImage = self.rotateToImageOrientationUp().cgImage,
        let cgGradientImage = gradientImage.cgImage
            else {
        return

    }
    let context = CIContext.init(options: nil)
    var ciImage = CIImage(cgImage: cgImage)

    let ciGradientImage = CIImage(cgImage: cgGradientImage)

    let ciMerged = ciImage.composited(over: ciGradientImage)
        let cgMerged = context.createCGImage(ciMerged, from: ciMerged.extent)!
        let uiMerged = UIImage.init(cgImage: cgMerged)


        completion(uiMerged)

    }
}

但是附上的代码实际上得到了这个结果:

如何将图片移到中心? 使用 CoreGraphics 这真的很容易,但我需要使用 CoreImage 来完成,因为稍后我的项目将需要更多过滤器和良好的性能。

如果你想在叠加层居中的同时使用Core Image来合并图像,那么最直接的方法就是让你的叠加层图像与你的渐变图像大小相同,并且只是带有透明像素的信箱。在转换为 CIImage 之前,您可以使用 UIGraphicsIamgeRender 来完成。