UIGraphicsImageRenderer зеркально отображает изображение после применения фильтра
Я пытаюсь применить фильтры к изображениям. Применение фильтра прекрасно работает, но оно отражает изображение по вертикали.
Нижний ряд изображений вызывает функцию фильтра после инициализации.
К основному изображению вверху применяется фильтр после нажатия на изображение внизу.
The
ciFilter
является
CIFilter.sepiaTone()
.
func applyFilter(image: UIImage) -> UIImage? {
let rect = CGRect(origin: CGPoint.zero, size: image.size)
let renderer = UIGraphicsImageRenderer(bounds: rect)
ciFilter.setValue(CIImage(image: image), forKey: kCIInputImageKey)
let image = renderer.image { context in
let ciContext = CIContext(cgContext: context.cgContext, options: nil)
if let outputImage = ciFilter.outputImage {
ciContext.draw(outputImage, in: rect, from: rect)
}
}
return image
}
И после двойного применения фильтра новое изображение увеличивается.
1 ответ
Вам не нужно использовать
UIGraphicsImageRenderer
. Вы можете напрямую получить изображение из
CIContext
.
func applyFilter(image: UIImage) -> UIImage? {
ciFilter.setValue(CIImage(image: image), forKey: kCIInputImageKey)
guard let ciImage = ciFilter.outputImage else {
return nil
}
let outputCGImage = CIContext().createCGImage(ciImage, from: ciImage.extent)
guard let _ = outputCGImage else { return nil }
let filteredImage = UIImage(cgImage: outputCGImage!, scale: image.scale, orientation: image.imageOrientation)
return filteredImage
}