Я пытаюсь добиться этого результата:
Я создаю градиентное изображение с соотношением сторон 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: $0.1, color: $0.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
, так как позже моему проекту понадобятся дополнительные фильтры и хорошая производительность.