GPUImage
来源:互联网 发布:cpk软件 编辑:程序博客网 时间:2024/05/01 07:48
GPUImage是Brad Larson在github托管的开源项目。
GPUImage是一个基于GPU图像和视频处理的开源iOS框架,提供各种各样的图像处理滤镜,并且支持照相机和摄像机的实时滤镜; 基于GPU的图像加速,因此可以加速对实时摄像头视频、电影以及image的滤镜和其它效果处理,并且能够自定义图像滤镜。另外, GPUImage支持ARC。
使用GPUImage处理图片比Core Image更简单,只需要将过滤器赋给图片对象即可,不用考虑context或者设备等其他问题。GPUImage提供了除高斯模糊外的其他几种不同效果的模糊,虽然Core Image也提供了几种模糊效果,但目前在iOS上能用的就只有高斯模糊,而GPUImage可用的有FastBlur, GaussianBlur, GaussianSelectiveBlur 和 BoxBlur。此外,作为开源框架的GPUImage还支持自定义的过滤器。
GPUImage是一个活跃的iOS上基于GPU的图像处理库。它在这个网站中的十佳iOS库中赢得了一席之地!
GPUImage隐藏了在iOS中所有需要使用OpenGL ES的复杂的代码,并用极其简单的接口以很快的速度处理图像。GPUImage的性能甚至在很多时候击败了Core Image,但是Core Image仍然在很多函数中有优势。
在开始学习GPUImage之前,你需要把它包含到你的项目中。这可以使用Cocoapods在项目中生成静态库或直接嵌入源码来完成。
项目应用已经包含一个建立在外部的静态框架。你可以根据下面的步骤简单的把它复制到项目中:
说明:
在命令行中运行build.sh。生成的库和头文件将会被放在build/Release-iphone。
你也可以通过修改build.sh中的IOSSDK_VER变量来修改iOS SDK的版本(你可以通过使用xcodebuild -showsdks来查看所有可用的版本)。
你可以通过下面来自Github仓库的说明把源代码嵌入你的项目:
说明:
拖拽GPUImage.xcodeproj文件到你Xcode项目中来把框架嵌入到你的项目中。
然后,到应用程序的target添加GPUImage为一个target依赖。
从GPUImage框架新产品文件夹中拖拽libGPUImage.a库到你应用程序target中的Link Binary With Librariesbuild phase。
GPUImage需要链接一些其他框架到你的应用程序,所以你需要添加如下的相关库到你的应用程序target:
CoreMedia
CoreVideo
OpenGLES
AVFoundation
QuartzCore
然后你需要找到框架的头文件。在你项目的build设置中,设置Header Search Paths的相对路径为你应用程序中框架/子文件夹中的GPUImage源文件目录。使Header Search Paths是递归的。
添加GPUImage到你的项目中后,一定要在ImageProcessor.m中包含头文件。
如果你想包含静态的框架,使用#import GPUImage/GPUImage.h。如果你想直接在项目中包含它,使用#import “GPUImage.h”。
添加新的处理函数到ImageProcessor.m中:
- (UIImage *)processUsingGPUImage:(UIImage*)input {
// 1. Create the GPUImagePictures
GPUImagePicture * inputGPUImage = [[GPUImagePicture alloc] initWithImage:input];
UIImage * ghostImage = [self createPaddedGhostImageWithSize:input.size];
GPUImagePicture * ghostGPUImage = [[GPUImagePicture alloc] initWithImage:ghostImage];
// 2. Set up the filter chain
GPUImageAlphaBlendFilter * alphaBlendFilter = [[GPUImageAlphaBlendFilter alloc] init];
alphaBlendFilter.mix = 0.5;
[inputGPUImage addTarget:alphaBlendFilter atTextureLocation:0];
[ghostGPUImage addTarget:alphaBlendFilter atTextureLocation:1];
GPUImageGrayscaleFilter * grayscaleFilter = [[GPUImageGrayscaleFilter alloc] init];
[alphaBlendFilter addTarget:grayscaleFilter];
// 3. Process & grab output image
[grayscaleFilter useNextFrameForImageCapture];
[inputGPUImage processImage];
[ghostGPUImage processImage];
UIImage * output = [grayscaleFilter imageFromCurrentFramebuffer];
return
output;
}
嘿!它看来很明确。这是它的具体内容:
创建GPUImagePicture对象;再次使用-createPaddedGhostImageWithSize:为一个工具。这时GPUImage会把图像纹理上传到GPU内存。
创建和链接你将要使用的滤镜。这种链接与Core Image中的滤镜链接不同,它类似于管道。在你完成后,它看起来是这样的:
GPUImageAlphaBlendFilter接受两个输入,在这种情况下为顶部和底部的图像,纹理的位置很重要。-addTarget:atTextureLocation: 设置纹理为正确的输入(位置)。
在链中的最后一个滤镜调用-useNextFrameForImageCapture然后对两个输入调用-processImage 。这可以确保滤镜知道你想要从中抓取图像然后持有它。
最后,替换processImage的第一行代码: 来调用新的函数:
UIImage * outputImage = [self processUsingGPUImage:inputImage];
就是这样。生成并运行。幽灵看起来和往常一样好!
正如你看到的,GPUImage很容易操作。你也可以在GLSL里制作你自己的着色器并创建你自己的滤镜。查看这里的GPUImage文档来更多的学习如何使用本框架。
在这里下载本节项目中的所有代码。
下一步?
- GPUImage
- GPUImage
- GPUImage
- GPUImage
- GPUImage
- GPUImage
- GPUImage
- GPUImage
- GPUimage
- GPUImage
- GPUImage
- GPUIMAGE说明
- GPUIMAGE说明
- GPUImage说明
- GPUImage滤镜
- GPUIMAGE说明
- GPUImage使用
- GPUImage相关
- 依赖倒置原则
- 阐述二维码的原理以及使用google api和PHP QR Code来生成二维码
- EasyUI DataGrid中loadFilter 属性的用法
- 表格提交中出现的中文乱码问题
- 第一次使用Android Studio时你应该知道的一切配置
- GPUImage
- Codeforces 570D Tree Requests 题解&代码
- XAudio2学习一之平台搭建
- 关于java反序列化漏洞(java deserialization vulnerability)
- [Leetcode]Count of Smaller Numbers After Self
- ARM汇编编程基础(一) -- ARM CPU寄存器
- Android软件开发之获取通讯录联系人信息 + android联系人信息的存储结构 + Android联系人读取操作笔记
- 关闭端口
- HTTP协议分析中几种常见的中文编码及其解码