首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIGraphicsImageRenderer在应用滤镜后镜像

UIGraphicsImageRenderer在应用滤镜后镜像
EN

Stack Overflow用户
提问于 2021-03-31 14:38:34
回答 1查看 54关注 0票数 0

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

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

顶部的主图像,在按下底部的一个后获得应用的滤镜

ciFilterCIFilter.sepiaTone()

代码语言:javascript
复制
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
    }

在应用滤镜两次后,新图像被放大。

这里有一些截图。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-31 15:11:28

您不需要使用UIGraphicsImageRenderer。您可以直接从CIContext获取镜像。

代码语言:javascript
复制
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
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66882835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档