组合 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
来完成。
我正在努力实现这个结果:
我创建了宽高比为 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
来完成。