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
    }
Другие вопросы по тегам