美文网首页iOS进阶指南iOS-swiftiOS 开发
iOS开发 - CoreImage 初出茅庐

iOS开发 - CoreImage 初出茅庐

作者: 小黑Swift | 来源:发表于2016-09-08 11:23 被阅读275次

组合滤镜

熟悉下函数式编程思想

下面BFilter里面代码参考自functional-swift一书

Simulator Screen Shot 2016年9月8日.png

BFilter.swift

import UIKit

// MARK: - 组合滤镜 - 事例
typealias Filter = CIImage -> CIImage //构建了Filter 类型
struct BFilter {
    // 模糊 - 高斯模糊
    func blur(radius: Double) -> Filter {
        return { image in
            let parameters = [
                kCIInputRadiusKey: radius,
                kCIInputImageKey: image
            ]
            guard let filter = CIFilter(name: "CIGaussianBlur", withInputParameters: parameters) else {
                fatalError()
            }
            guard let outputImage = filter.outputImage else {
                fatalError()
            }
            return outputImage
        }
    }
    
    //生成固定颜色的滤镜
    func colorGenerator(color: UIColor) -> Filter {
        return { _ in
            let c = CIColor(color: color)
            let parameters = [kCIInputColorKey: c]
            guard let filter = CIFilter(name: "CIConstantColorGenerator", withInputParameters: parameters) else {
                fatalError()
            }
            guard let outputImage = filter.outputImage else {
                fatalError()
            }
            return outputImage
        }
    }
    
    func compositeSourceOver(overlay: CIImage) -> Filter {
        return { image in
            let parameters = [
                kCIInputBackgroundImageKey: image,
                kCIInputImageKey: overlay
            ]
            guard let filter = CIFilter(name: "CISourceOverCompositing",    withInputParameters: parameters) else {
                fatalError()
            }
            guard let outputImage = filter.outputImage else {
                fatalError()
            }
            let cropRect = image.extent
            return outputImage.imageByCroppingToRect(cropRect)
        }
    }
    
    func colorOverlay(color: UIColor) -> Filter {
        return { image in
            let overlay = self.colorGenerator(color)(image)
            return self.compositeSourceOver(overlay)(image)
        }
    }
    
    func composeFilters(filter1: Filter, _ filter2: Filter) -> Filter {
        return { image in
            filter2(filter1(image))
        }
    }
}

//自定义运算符
infix operator +++ { associativity left }

func +++ (filter1: Filter, filter2: Filter) -> Filter {
    return { image in filter2(filter1(image)) }
}

extension CIImage {
    //扩展下方便点语法使用
    func filters(myFilter: Filter) -> CIImage {
        return myFilter(self)
    }
}

使用ViewController.swift

import UIKit

class SecondViewController: UIViewController {
    
    
    @IBOutlet var colorButtonCollection: [UIButton]! {
        didSet {
            colorButtonCollection.forEach {
                $0.layer.cornerRadius = $0.frame.width/2
            }
        }
    }
    
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var blurSlider: UISlider!
    
    lazy var originalImage:UIImage = {
        return UIImage(named: "beauty2")
        }()!
    
    lazy var overlayColor:UIColor = {
       return UIColor.purpleColor().colorWithAlphaComponent(0.2)
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

    }
    
    @IBAction func sliderClick(sender: UISlider) {
        let inputImage = CIImage(image: originalImage)!
        let Filter = BFilter()
        let myFilter = Filter.blur(Double(sender.value)) +++ Filter.colorOverlay(overlayColor)
        let outputImage = inputImage.filters(myFilter)
        imageView.image = UIImage(CIImage: outputImage)
    }
    
    @IBAction func colorButtonClick(sender: UIButton) {
        let btnText = sender.titleLabel?.text
        var selectColor:UIColor!
        switch btnText! {
        case "黑":
            selectColor = UIColor.redColor()
        case "橙":
            selectColor = UIColor.orangeColor()
        case "紫":
            selectColor = UIColor.purpleColor()
        case "红":
            selectColor = UIColor.redColor()
        case "蓝":
            selectColor = UIColor.blueColor()
        case "绿":
            selectColor = UIColor.greenColor()
        default:
            break
        }
        overlayColor = selectColor.colorWithAlphaComponent(0.2)
        sliderClick(blurSlider)
    }
}

相关文章

  • iOS开发 - CoreImage 初出茅庐

    组合滤镜 熟悉下函数式编程思想 下面BFilter里面代码参考自functional-swift一书 BFilte...

  • iOS开发 - CoreImage 头像检测

    CoreImage 头像检测 Detection.swift 参考来源:iOS8 Core Image In Swift

  • CoreImage(一)简单介绍

    CoreImage(一)简单介绍 CoreImage框架是iOS处理图像的框架,主要用处可以给图片添加滤镜效果和图...

  • iOS模糊效果

    iOS 7 以前 使用 CoreImage 使用 GPUImage 使用 vImage iOS 8 及以后 使用U...

  • iOS开发 - CoreImage 小试牛刀

    CoreImage 小试牛刀,这里只有?,没有什么渔 CIImage+Ex.swift 就不上传到github了,...

  • GPUImage与CoreImage

    GPUImage 与 CoreImage 对比 GPUImage 最低支持iOS4.0,iOS5.0之后就支持自定...

  • CoreImage 滤镜

    1、CoreImage介绍 coreImage是IOS5中新加入的一个Objective-c的框架,提供了强大高效...

  • CoreImage使用

    CoreImage是苹果公司为了简化图片处理的难度而开发出来的类库。 随着iOS版本升级以及硬件性能的不断提升,C...

  • iOS效果---模糊效果汇总

    第一部分CoreImage效果 CoreImage是iOS5中新加入的Objective-C的框架,提供了强大高效...

  • iOS开发之CoreImage框架使用(上)

    CoreImage框架是一个专门用来对图片进行处理的框架,其中提供了许多高级功能,可以帮助开发者完成UIKit或者...

网友评论

    本文标题:iOS开发 - CoreImage 初出茅庐

    本文链接:https://www.haomeiwen.com/subject/fglsettx.html