ImageFilter hold 一个全局的图片处理注册器,可以注册一些图片处理函数。然后ImageFilter数据结构包装一个要处理的图片的信息,通过这个包装方便的对一个图片应用某个filter处理器。
import Foundation
#if os(iOS)
import UIKit
#else
public struct UIImage {}
#endif
public struct ImageFilter {
public typealias Processor = (CGSize, UIImage?) -> UIImage?
public static var globalProcessors = [String: Processor]()
fileprivate var name: String = ""
fileprivate var size: CGSize = .zero
init(name: String, size: CGSize) {
self.name = name
self.size = size
}
}
extension ImageFilter {
public static func registerProcessor(_ name: String, _ processor: @escaping ImageFilter.Processor) {
ImageFilter.globalProcessors[name] = processor
}
public static func getProcessor(_ name: String) -> ImageFilter.Processor? {
return ImageFilter.globalProcessors[name]
}
public func process(image: UIImage?) -> UIImage? {
guard self.name != "" else {
return nil
}
guard let image = image else {
return nil
}
guard self.size.width != 0 && self.size.height != 0 else {
return nil
}
let processor: ImageFilter.Processor? = ImageFilter.getProcessor(self.name)
return processor?(self.size, image) ?? nil
}
}
ImageFilter.registerProcessor("circle", { (_, _) -> UIImage? in
return UIImage()
})
ImageFilter.registerProcessor("scale", { (_, _) -> UIImage? in
return UIImage()
})
let filter = ImageFilter(name: "circle", size: CGSize(width: 10, height: 10))
let image = filter.process(image: UIImage())
print(image ?? "")