iOS7—Day by day—Day15:CoreImage Filters
来源:互联网 发布:hbase查找数据方式 编辑:程序博客网 时间:2024/05/18 13:28
这篇文章是天天品尝iOS7甜点系列的一部分,你可以查看完整的系列目录:天天品尝iOS7甜点
Introduction – 介绍
在iOS5中就引入了CoreImage
这个框架,它是用来进行图像处理的。它抽象所有低级的与图像处理有关联的方法,从用户角度提供易于使用的过滤事件链架构。i0S7中介绍了新的过滤器,其中的一些,我们将会在进行的文章中介绍,我们将会来看看一些传统的图像过滤效果,然后在查看创建具有过滤效果的生成二维码的效果。
本章的实例程序能够在github上面进行访问,访问地址:github.com/ShinobiControls/iOS7-day-by-day
Photo Effect Filters – 图像过滤效果
在移动应用程序世界里,能够应用比较酷的图片效果是一种趋势。例如instagram就十分的流行。CoreImage
添加了很多十分简单的是可以使用的过滤效果来帮助我们在应用程序中添加很多功能。
为了能够使用这些过滤器,我们需要首先为CoreImage
做点功课。CoreImage
指定它自己的图像类型-CIImage
,它可以从很多不同的源被创建,包括与CoreGraphics
等价的CGImage
:
使用过滤器十分的简单,而且你还可以把他们串联起来,但是我们的目的是指定一个简单的过滤器:
一个CoreImage
过滤器就是代表了一个CIFilter
类,它可以通过一个工厂方法来创建一个指定的过滤器对象。这些过滤器对象都是通过使用KVC的方式来指定相关的过滤参数的。所有的新图像的过滤器都是通过这些简单的属性-输入的图像,它指定使用一个字符串kCIInputImageKey
表示的key值。
然后我们可以把获得的过滤器输出的图像转换成UIImage
,然后展示在UIImageView
上面:
新的图像的效果过滤器引用的key值有下面的一些:
在今天我们需要完成的是一个示例是我们有一个collection视图,他们用来示范同一个输入的图像在新的过滤器上面的不同输出图像。
我们还需要构造CGImage
版本对应每个CIImage
过滤输出。这是因为属性outputImage
是懒加载的。为了达到目的,我们使用一个CIContext
来绘制CIImage
到CoreGraphics
的上下文中:
接下来的程序都是写在SCPhotoFiltersViewController
中的使用了自定义的cell。如果你运行程序,你可以看到下面不同的过滤效果:
QR Code Generation – 生成二维码
在iOS7中添加的图像效果过滤器中也引入了一个过滤器,它可以有能力来生成一个二维码来代表特性的数据对象。在应用程序的第二个页签(SCQRGeneratorViewController)示例中,当’Generate’按钮点击之后,文本框中的内容就会被编码到二维码中,展示出来。
生成二维码的代码也是十分的简单:
生成二维码的过滤器需要一个NSData对象,所以我们首先把NSString对象使用UTF-8的编码转换成一个NSData对象。
然后和之前我们做的一样,创建一个CIFilter
对象,使用filterWithName:
工厂方法,指定名字为CIQRCodeGenerator
,这种情况下面我们需要设置两个key,一个是设置inputMessage
,它代表我们刚刚创建的NSData对象,还有一个inputCorrectionLevel
用来指定生成二维码的等级,一共有4中等级:
- L 7%的错误弹性
- M 15%的错误弹性
- Q 25%的错误弹性
- H 30%的错误弹性
一旦我们完成了这些,然后我们可以返回一个过滤器的输出图像,它是一个1pt的最小的分辨率的CIImage
对象。
我们想要重设这个图像的大小,但是我们并不想对它进行篡改。为了达到这个目的,我们创建一个新的方法来进行图像的调整:
这个上面的例子一样,我们首先创建了一个CGImage
来代表CIImage
.然后我们创建一个核心的图像上下文来重新调节。最重要的一行是设置质量不能篡改。如果我们重新调节图像,它看来就是十分可怕的,并且形成像素化,但是这里我们就是需要像素化的二维码:
一旦我们绘制这个图像到上下文中,我们就可以抓住这个形成的UIImage
然后返回它。到此为止,我们完成的生成器就像这个样子:
这里还有一个工具的方法来用进行禁用UI的(当生成二维码过程中):
如果你运行应用程序,你就会看到可以有能力随时生成二维码,这是我们不做处理,以后我们就可以给出一个方法来阅读他们.
Conclusion
CoreImage是一个方便的框架做一些相当先进的图像处理,而不必太涉及低级图像处理。它的怪癖,但它可以是非常有用的。与新图像过滤器和QR代码生成器可能就挽救了你找到一个外部依赖项或编写自己的版本。
本文翻译自:iOS7 Day-by-Day :: Day 15 :: CoreImage Filters
- iOS7—Day by day—Day15:CoreImage Filters
- iOS7—Day by day
- iOS7—Day by day—Day18:Detecting Facial Features With CoreImage
- iOS7—Day by day—Day0:UIKit Dynamics
- iOS7—Day by day—Day1:NSURLSession
- iOS7—Day by day—Day2:Asset Catalog
- iOS7—Day by day—Day3:Background Fetch
- iOS7—Day by day—Day4:AVSpeechSynthesizer
- iOS7—Day by day—Day6:Tint Color
- iOS7—Day by day—Day9:Device Identification
- iOS7—Day by day—Day10:Custom UIViewController Transitions
- iOS7—Day by day—Day17:iBeacons
- iOS7—Day by day—Day23:Multipeer Connectivity
- iOS7—Day by day—Day22:Downloadable Fonts
- iOS7—Day by day—Day5:UIDynamics With Collection Views
- iOS7—Day by day—Day7:Taking Snapshots of UIViews
- iOS7—Day by day—Day8:Reading List With SafariServices
- iOS7—Day by day—Day11:UIView Key-frame Animations
- C# TryParse 和 Parse
- Java 泛型通配符?解惑
- 一直对自定义监听器有疑问,所以转一下,有空理解下
- 【js设计模式笔记---接口】
- 64位linux 系统运行32位程序解决方法
- iOS7—Day by day—Day15:CoreImage Filters
- Hadoop MapReduce2.0(Yarn)
- 解析Jquery取得iframe中元素的几种方法
- 尽量不要在头文件中包含另外的头文件
- SPI
- 示波器的采样率和存储深度(有改动)
- spring-framework-reference 4.x中文翻译
- 任正非:未来华为还是以硬件为主
- Android开发之可以动态刷新的显示数据的曲线图