UIGraphicsImageRenderer 在应用过滤器后镜像图像
UIGraphicsImageRenderer mirrors image after applying filter
我正在尝试对图像应用滤镜。
应用滤镜效果很好,但它会垂直镜像图像。
最后一行图片在初始化后调用滤镜函数
顶部的主图像,按下底部的图像后应用滤镜
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
}
应用滤镜两次后,新图像被放大。
这里是一些截图。
您不需要使用 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
}
我正在尝试对图像应用滤镜。 应用滤镜效果很好,但它会垂直镜像图像。
最后一行图片在初始化后调用滤镜函数
顶部的主图像,按下底部的图像后应用滤镜
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
}
应用滤镜两次后,新图像被放大。
这里是一些截图。
您不需要使用 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
}