如何像素化和取消UIImage或UIImageview的像素化?

时间:2015-12-05 12:33:52

标签: ios swift uiimageview uiimage

我想使用Swift对UIImageUIImageview进行像素化和取消像素化,但我不知道如何才能这样做。

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

1 个答案:

答案 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)
}

结果

enter image description here

默认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)
    }
}

enter image description here

Unpixelation

机制完全相同,您只需要使用不同的过滤器。您可以找到过滤器here的完整列表(但请查看每个过滤器可用/需要哪些参数)。我认为CIGaussianBlur可以胜任。

当然,不要期望能够输入低分辨率的超像素图像并获得高清晰度图像。此技术仅适用于X-Files:D

蘑菇图片取自here