Giter Site home page Giter Site logo

icifilter's Introduction

ICIFilter

封装 Core Image 的 API - 延展方式
封装 Core Image 的 API - 高阶函数方式

下面介绍的是延展方式,高阶函数方式可点击👆链接查看

Content

Why

  • Core Image 是一个强大的图像处理框架,但是它的 API 有时可能略显笨拙。
  • Core Image 的 API 是弱类型的 —— 我们通过键值编码 (KVC) 来配置图像滤镜 (filter)。
  • 在使用参数的类型或名字时,我们都使用字符串来进行表示,这十分容易出错,极有可能导致运行时错误。

Methods&Advantage

Methods

对 CIImage 延展开发新的 API

Advantage

避免这些运行时错误,最终得到一组类型安全的 API

Usage

效果图

效果图

调用代码
if let url = URL(string: "https://via.placeholder.com/300x180/62abe4/ffffff?text=Core+Image"), let image = CIImage(contentsOf: url) {
    
    // 原图
    coreImageViews[0].image = UIImage(ciImage: image)
    
    // 高斯模糊滤镜
    coreImageViews[1].image = UIImage(ciImage: image.blurred(radius: 2))
    
    // 颜色生成滤镜
    let color = UIColor.orange.withAlphaComponent(0.4)
    coreImageViews[2].image = UIImage(ciImage: image.generated(color: color))
    
    // 图像覆盖合成滤镜(自己实现)
    coreImageViews[3].image = UIImage(ciImage: image.generated(color: color).compositeSource(over: image))
    
    // 图像覆盖合成滤镜(系统自带)
    coreImageViews[4].image = UIImage(ciImage: image.generated(color: color).composited(over: image))
    
    // 颜色叠层滤镜
    let yellow = UIColor.yellow.withAlphaComponent(0.4)
    coreImageViews[5].image = UIImage(ciImage: image.overlaid(color: yellow))
}

Implementation

1、高斯模糊滤镜(CIGaussianBlur)
// 1.高斯模糊滤镜(CIGaussianBlur)
public func blurred(radius: Double) -> CIImage {
    let parameters: [String: Any] = [
        kCIInputRadiusKey: radius,
        kCIInputImageKey: self
    ]
    guard let filter = CIFilter(name: "CIGaussianBlur", parameters: parameters) else {
        fatalError("CIGaussianBlur filter creation failed!")
    }
    guard let outputImage = filter.outputImage else {
        fatalError("CIGaussianBlur outputImage generation failed!")
    }
    return outputImage
}
2、颜色生成滤镜(CIConstantColorGenerator)
public func generated(color: UIColor) -> CIImage {
    let parameters: [String: Any] = [
        kCIInputColorKey: CIColor(cgColor: color.cgColor)
    ]
    guard let filter = CIFilter(name: "CIConstantColorGenerator", parameters: parameters) else {
        fatalError("CIConstantColorGenerator filter creation failed!")
    }
    guard let outputImage = filter.outputImage else {
        fatalError("CIConstantColorGenerator outputImage generation failed!")
    }
    return outputImage.cropped(to: extent)
}
3、图像覆盖合成滤镜(CISourceOverCompositing)
// 3.图像覆盖合成滤镜(CISourceOverCompositing)
// iOS8.0开始 <func composited(over dest: CIImage) -> CIImage> 的实现原理
public func compositeSource(over dest: CIImage) -> CIImage {
    let parameters: [String: Any] = [
        kCIInputBackgroundImageKey: dest,
        kCIInputImageKey: self
    ]
    guard let filter = CIFilter(name: "CISourceOverCompositing", parameters: parameters) else {
        fatalError("CISourceOverCompositing filter creation failed!")
    }
    guard let outputImage = filter.outputImage else {
        fatalError("CISourceOverCompositing outputImage generation failed!")
    }
    return outputImage.cropped(to: extent)
}
4、颜色叠层滤镜
// 4.颜色叠层滤镜
public func overlaid(color: UIColor) -> CIImage {
    let overlay = generated(color: color)
    return overlay.compositeSource(over: self)
}

Contact

QQ: 2256472253
Email: [email protected]

License

ICycleView is released under the MIT license. See LICENSE for details.

icifilter's People

Contributors

ixialuo avatar

Stargazers

 avatar xiaolouxinyue avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.