swift学习之coreImage篇

coreImage就是一个强大的框架,用这个框架我们可以通过调用简单的API使用框架所带的各种滤镜对图像进行处理,而不需要关心CPU/GPU等底层是如何对图像进行处理的。

coreImage的三个核心类:CIFilter 滤镜;CIContext:创建上下文;CIImage:构建图像数据的模型对象

CIFilter:CIFilter是对图像数据进行处理的核心部分,我的理解是对指定的输入图像经过设置的参数进行一系列计算,然后组合成一个经过处理的输出图像数据,到目前(xcode6.0.2-beat 版,IOS8.0.2)为止,IOS自己带的有20个类型kCICategory,总计650种滤镜。只是指定滤镜类型而没有设置参数时,我们可以用setDefauts设置默认参数,滤镜就会根据默认参数对图像进行过滤处理。

CIContext:Core Image通过CIContext来渲染CIFilter产生的对象。滤镜的输入inputImage输出outputImage图像数据都是CIImage,CIImage图像数据不能直接渲染在CPU上,只有当真正将要显示的时候,才会通过第三个对象去渲染。这个对象就是CIContext;CIContext在初始化的时候需要一个字典,可以通过kCIContextUseSoftwareRenderer创建一个基于CPU的CIContext对象,默认是创建基于GPU的CIContext对象,不同之处在于GPU的CIContext对象处理起来会更快但是不能后台处理,如果需要保存到相册的话,一般建议使用CPU处理,以保证图像处理过程中退出后台也能正常处理完,而基于CPU的CIContext对象除了支持更大的图像以外,还能在后台处理。

CIImage:CIImage是一个模型对象,它保存能构建图像的数据,可以是图像的Data,可以是一个文件,也可以是CIFilter输出的对象。

下面是核心代码:

var beginImage = CIImage(image: image))//由UIImage创建一个CIImage;CIImage的创建方式有多种:CIImage(contenttsOfURL),CIImage(data:),CIImage(CGImage:),CIIMage(bitmapData:bytesPerRow:size:format:colorSpace:)等等。

var filter:CIFilter = CIFilter(name: "CISepiaTone")//CIFilter的构造方法中包括了这个过滤器(CISepiaTone)的名字,还有一对用来描述过滤器的键值字典。每一个过滤器都有它自己的唯一键和值

filter.setValue(beginImage, forKey: kCIInputImageKey)//设置过滤器的图片

filter.setValue(0.5, forKey: kCIInputIntensityKey)//设置过滤器的图片透明度?

//        self.changedImageview?.image = UIImage(CIImage:self.filter!.outputImage)//利用过滤器的outputImage属性导出经过过虑处理的图片 用CIImage直接转换成UIImage其实也使用了CIContext做转换,只不过是把我们手动处理的东西都封装起来了,但是每次都要新创建一个CIContext,而CIContext的创建是一个比较低效率的,而且比较耗内存,所以考虑到性能问题,我们直接用CIContext(CIContext可以重用,以提高性能)的createCGImage创建CGImage图像

self.context = CIContext(options:[kCIContextUseSoftwareRenderer: true])//self.context = CIContext(options:nil)//options为空时 默认为GPU处理,options为[kCIContextUseSoftwareRenderer: true]时 创建一个CPU处理的CIContext上下文对象

let cgimg = self.context!.createCGImage(filter.outputImage, fromRect: filter.outputImage.extent())//createCGImage返回一个CGImage对象

self.oriImgview!.image = UIImage(CGImage:cgimg!)

时间: 2024-10-25 15:44:43

swift学习之coreImage篇的相关文章

汇集了很多swift 学习指南

https://github.com/ipader/SwiftGuide 1,059   Unstar7,294 Fork1,966 ipader/SwiftGuide CodeIssues 0Pull requests 0WikiPulseGraphs 这份指南汇集了Swift语言主流学习资源,并以开发者的视角整理编排.http://dev.swiftguide.cn 376 commits 3 branches 0 releases 12 contributors Swift 100.0%

[转]swift 学习资源 大集合

今天看到了一个swift的学习网站,里面收集了很多学习资源 [转自http://blog.csdn.net/sqc3375177/article/details/29206779] Swift 介绍 Swift 介绍 来自 Apple 官方 Swift 简介 (@peng_gong) 一篇不错的中文简介 [译] Swift 首席架构师 Chris Lattner 简介(黄利民) Swift 背后的男人,他的个人主页. Swift 观点 如何评价 Swift 语言?(@知乎) 已有近 5000 人

swift 学习资源 大集合

今天看到了一个swift的学习网站,里面收集了很多学习资源 Swift 介绍 Swift 介绍 来自 Apple 官方 Swift 简介 (@peng_gong) 一篇不错的中文简介 [译] Swift 首席架构师 Chris Lattner 简介(黄利民) Swift 背后的男人,他的个人主页. Swift 观点 如何评价 Swift 语言?(@知乎) 已有近 5000 人关注该问题! [译] Rust 创始人 Graydon Hoare 对 Swift 的看法 (@CSDN) 无废话 Swi

[快速学会Swift第三方库] Eureka篇

[快速学会Swift第三方库] Eureka篇 Eureka可以帮你简单优雅的实现动态table-view表单.它由rows,sections和forms组成.如果你的app包含大量表单,Eureka可以真正帮你节省时间. 目录 快速学会Swift第三方库 Eureka篇 目录 编码之前 导入 Eureka 其他操作 创建表单 基础表单 选择类型表单 Segment风格选择器 标准选择器 pickerView风格选择器 三种风格选择器效果对比 带输入框的表单 自定义Row 深入学习 编码之前 导

swift学习网址

一.网站: 0.swift学习者资源分享 1.swift苹果官网:Swift - Overview 2.Swiftist: Home - Swiftist 社区 3.swift中文指南 4.一起swift:Let's Swift - 国内首发Swift中文教程 5.swiftv课堂:SwiftV课堂 - 中国最大的Swift视频学习站 6.SwiftChina开发社区:SwiftChina-iOS专业开发社区 - 7.swift开发者门户:Hello,Swift | Swift中文开发者社区门户

Swift学习初步(一)

前几天刚刚将有关oc的教程草草的看了一遍,发现oc其实也不像传说的那么难.今天又开始马不停蹄的学习Swift因为我很好奇,到底苹果出的而且想要代替oc的编程语言应该是个什么样子呢?看了网上的一些中文教材之后,才发现原来swift真的是太灵活,相比较之前oc语言真的是有天壤之别了.随着学习的深入,我发现自己真的喜欢上了swift,鉴于网上的教程还不是太多的缘故,我就萌生了将自己的一些学习体验写成一系列博客的想法,如果有什么不全面的地方欢迎大家来拍砖. 首先我来说说自己对于swift的第一印象吧!那

Caffe学习系列——工具篇:神经网络模型结构可视化

Caffe学习系列--工具篇:神经网络模型结构可视化 在Caffe中,目前有两种可视化prototxt格式网络结构的方法: 使用Netscope在线可视化 使用Caffe提供的draw_net.py 本文将就这两种方法加以介绍 1. Netscope:支持Caffe的神经网络结构在线可视化工具 Netscope是个支持prototxt格式描述的神经网络结构的在线可视工具,网址:  http://ethereon.github.io/netscope/quickstart.html  它可以用来可

Vue学习笔记入门篇——组件的使用

本文为转载,原文:Vue学习笔记入门篇--组件的使用 组件定义 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展. 组件使用 注册 注册一个全局组件,你可以使用 Vue.component(tagName, options).组件在注册之后,便可以在父实例的模块中以自定义元素 的形式使用.

Vue学习笔记入门篇——组件的内容分发(slot)

本文为转载,原文:Vue学习笔记入门篇--组件的内容分发(slot) 介绍 为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板.这个过程被称为 内容分发 (或 "transclusion" 如果你熟悉 Angular).Vue.js 实现了一个内容分发 API,使用特殊的 'slot' 元素作为原始内容的插槽. 编译作用域 在深入内容分发 API 之前,我们先明确内容在哪个作用域里编译.假定模板为: <child-component> {{ messa