如何对 UIImage 或 UIImageview 进行像素化和取消像素化?
How to pixelize and unpixelize an UIImage or UIImageview?
我想使用 Swift 对 UIImage
或 UIImageview
进行像素化和像素化,但我不知道该怎么做。
也许使用效果、图层或类似的东西?
这在 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。
我想使用 Swift 对 UIImage
或 UIImageview
进行像素化和像素化,但我不知道该怎么做。
也许使用效果、图层或类似的东西?
这在 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。