如何对 UIImage 或 UIImageview 进行像素化和取消像素化?

How to pixelize and unpixelize an UIImage or UIImageview?

我想使用 Swift 对 UIImageUIImageview 进行像素化和像素化,但我不知道该怎么做。

也许使用效果、图层或类似的东西?

这在 iOS 上是一项非常简单的任务。

像素化

您可以使用 CIPixellate Core Image 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 (but take a look at which params are available/required for each filter). I think the CIGaussianBlur 可以完成这项工作。

当然不要指望能够输入低分辨率的超像素化图像并获得高清图像。此技术仅在 X-Files 中可用:D


蘑菇图像取自 here