我想使用Swift对UIImage
或UIImageview
进行像素化和取消像素化,但我不知道如何才能这样做。
也许使用效果,图层或类似的东西?
答案 0 :(得分:10)
在iOS上这是一项非常简单的任务。
您可以使用CIPixellate核心图片Filter。
func pixellated(image: UIImage) -> UIImage? {
guard let
ciImage = CIImage(image: image),
filter = CIFilter(name: "CIPixellate") else { return nil }
filter.setValue(ciImage, forKey: "inputImage")
guard let output = filter.outputImage else { return nil }
return UIImage(CIImage: output)
}
结果
默认inputScale
值为8
。但是,您可以手动设置参数来增加或减少效果。
filter.setValue(8, forKey: "inputScale")
// ^
// change this
您还可以定义以下扩展名
extension UIImage {
func pixellated(scale: Int = 8) -> UIImage? {
guard let
ciImage = UIKit.CIImage(image: self),
filter = CIFilter(name: "CIPixellate") else { return nil }
filter.setValue(ciImage, forKey: "inputImage")
filter.setValue(scale, forKey: "inputScale")
guard let output = filter.outputImage else { return nil }
return UIImage(CIImage: output)
}
}
机制完全相同,您只需要使用不同的过滤器。您可以找到过滤器here的完整列表(但请查看每个过滤器可用/需要哪些参数)。我认为CIGaussianBlur可以胜任。
当然,不要期望能够输入低分辨率的超像素图像并获得高清晰度图像。此技术仅适用于X-Files:D
蘑菇图片取自here。