0

我正在尝试对图像应用过滤器。应用滤镜效果很好,但它会垂直镜像图像。

最下面一行图片在init之后调用了filter函数。

顶部的主图像,在按下底部的一个后应用过滤器

ciFilterCIFilter.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
    }

在应用两次过滤器后,新图像会被放大。

这是一些屏幕截图。 开始 应用过滤器后 第二次应用过滤器后

4

1 回答 1

0

你不需要使用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
    }
于 2021-03-31T07:11:28.127 回答