GPUImage的使用

  最近在做一个3D模型换脸功能,用户用手机自拍,然后将3D人物模型的脸换成自己的。

  在这过程中,android端可以用美图秀秀的美颜库去美白,但是ios端就没有类似的东东,百度一下,会发现在github上有一个叫BeautifyFaceDemo的开源项目,可以实现实时美颜相机,可想而知实现美颜一张照片肯定没问题。然后开始研究,最后用上之后,效果还可以。

  下面记录一下调用过程:

  Step 1,从https://github.com/BradLarson/GPUImage下载GPUImage工程,从https://github.com/Guikunzhi/BeautifyFaceDemo下载BeautifyFaceDemo工程

  Step 2,新建Single View Application工程TestBeautifyFace,

      将GPUImage工程文件夹中的framework文件夹拖到TestBeautifyFace工程文件夹,

      在新工程中新建Framework文件夹,将GPUImage.xcodeproj文件拖拽添加到xcode Framework文件夹中,

      然后添加依赖:在Build Phases-Link Binary With Libraries中点+添加下面的framework:

              CoreMedia,CoreVideo,OpenGLES,AVFoundation,QuartzCore,最后将libGPUImage.a文件也加进来,不然链接时会报错……

      在Build Settings的Header Search Paths项中配置头文件搜索路径,将包含GPUImage的framework路径添加进来,我的是放在TestBeautifyFace工程文件同一级,所以是:framework/**  (**表示包含目录及所有子目录)

  Step 3, 使用GPUImage:

       为了节约时间,直接上老外的代码^_^:

 1 GPUImageFilter *selectedFilter;
 2
 3     switch (buttonIndex) {
 4         case 0:
 5             selectedFilter = [[GPUImageGrayscaleFilter alloc] init];
 6             break;
 7         case 1:
 8             selectedFilter = [[GPUImageSepiaFilter alloc] init];
 9             break;
10         case 2:
11             selectedFilter = [[GPUImageSketchFilter alloc] init];
12             break;
13         case 3:
14             selectedFilter = [[GPUImagePixellateFilter alloc] init];
15             break;
16         case 4:
17             selectedFilter = [[GPUImageColorInvertFilter alloc] init];
18             break;
19         case 5:
20             selectedFilter = [[GPUImageToonFilter alloc] init];
21             break;
22         case 6:
23             selectedFilter = [[GPUImagePinchDistortionFilter alloc] init];
24             break;
25         case 7:
26             selectedFilter = [[GPUImageFilter alloc] init];
27             break;
28         default:
29             break;
30     }
31
32     UIImage *filteredImage = [selectedFilter imageByFilteringImage:originalImage];
33     [self.selectedImageView setImage:filteredImage];

  Step 4,使用美颜滤镜美颜一张照片:

      

1     GPUImageBeautifyFilter *beautifyFilter = [[GPUImageBeautifyFilter alloc] init];
2     UIImage *filteredImage = [beautifyFilter imageByFilteringImage:selectedImage];
3     [self.selectedImageView setImage:filteredImage];

  先写到这里,继续研究GPUImage~

  参考:http://code.tutsplus.com/tutorials/build-a-photo-app-with-gpuimage--mobile-12223

时间: 2024-11-08 03:48:28

GPUImage的使用的相关文章

GPUImage API 文档之GPUImageOutput类

GPUImageOutput类将静态图像纹理上传到OpenGL ES中,然后使用这些纹理去处理进程链中的下一个对象.它的子类可以获得滤镜处理后的图片功能.[本文讲的很少,由于有许多地方不清楚,以后会更新] 方法 - (void)setInputFramebufferForTarget:(id<GPUImageInput>)target atIndex:(NSInteger)inputTextureIndex 说明:用于设置指定纹理的输入帧缓冲区的尺寸 参数:target是具体的对象,它接受了G

iOS上用GPUImage给视频加滤镜

最近在做一个需要给已有视频加滤镜的app,不是实时滤镜,而是给已经存在的视频加滤镜. 虽然网上有很多关于GPUImage的博客,但大多都是给图片加上滤镜或者是直接在摄像头上加上的实时滤镜,找了很久之后..... 发现在github上本来就有..... 但是在网上找,却没有说很多人给出这样的滤镜教程,这里简单给分享一下下. 1. 首先,什么是GPUImage?详细请度娘之,简单点来说,就是一个用GPU来处理图片和视频的第三方库. 2. 给图像加滤镜,如果是只加滤镜,那么网上有很多的教程,这里就不细

GPUImage的简单使用

GPUImage 是一个开源的图像处理库,提供了非常多的滤镜效果来加工图片.GPUImage 并不像一般的第三方库可以直接拖入到工程中使用,而是需要先在本地编译,然后将编译后的文件拖入到工程中使用.配置步骤如下: (1):首先下载GPUImage  https://github.com/BradLarson/GPUImage (2):解压后,在framework 目录下,打开 GPUImage.xcodeproj  工程 (3): 把Headers文件夹下 Project中的头文件,全部拖到 P

GPUImage

GPUImage是一个非常棒的图像处理的开源库,里面提供了非常非常多的滤镜效果来加工图片. 不过就是因为太多效果了,而且对于程序员来说,那么多效果并不清楚知道要用那一个.于是我就使用提供的默认值,加上对滤镜的命名的理解,粗略简单地对GPUImage.h里引用的各个滤镜进行简要说明.这样方便以后找到想要的滤镜效果.其中可能有理解错误,或者表达不准确的地方还请大家斧正.其中有些效果需要使用摄像头才可能有比较理想的效果. 附上注释的GPUImage.h代码: #import "GLProgram.h&

GPUImage滤镜之锐化

应用锐化工具可以快速聚焦模糊边缘,提高图像中某一部位的清晰度或者焦距程度,使图像特定区域的色彩更加鲜明. 在应用锐化工具时,若勾选器选项栏中的“对所有图层取样”复选框,则可对所有可见图层中的图像进行锐化.但一定要适度.锐化不是万能的,很容易使东西不真实. 在GPUImage中使用GPUImageSharpenFilter类来实现图像的锐化效果 片段着色 precision highp float; varying highp vec2 textureCoordinate; varying hig

GPUImage简单滤镜使用(二)

GPUImage中,提供了许多简单的的常用的滤镜.在上一篇文章讲了如何调节图像的亮度这片文章讲一下如何通过GPUImage调节图像的对比度,饱和度,曝光度,和白平衡(美图秀秀中的色温). 原图像 调整图像的对比度 GPUImageContrastFilter类提供了此功能.该类中有一个属性contrast,我们可以通过修改此属性值(最大值4.0,最小值0.0,正常值1.0)来达到修改图像对比度的目的,使用方法: GPUImageContrastFilter *filter = [[GPUImag

GPUImage API文档之GLProgram类

GLProgram是GPUImage中代表openGL ES 中的program,具有glprogram功能. 属性 @property(readwrite, nonatomic) BOOL initialized 作用:该属性用于指示program的初始化工作是否成功,成功返回YES,反之返回NO @property(readwrite, copy, nonatomic) NSString *vertexShaderLog 作用:该属性用于设置或获取顶点着色器的日志. @property(re

Android图像处理之GPUImage for Android

GPUImage 是iOS下一个开源的基于GPU的图像处理库,提供各种各样的图像处理滤镜,并且支持照相机和摄像机的实时滤镜.GPUImage for Android是它在Android下的实现,同样也是开源的,托管在Github上. 版本:android-gpuimage-1.1.1 Android模拟器上不支持OpenGL ES 2.0所以会报错,可以选用Genymotion测试,或真机上运行. 引用 Caused by: java.lang.IllegalStateException: Op

GPUImage API 文档之GPUImageFilter类

GPUImageFilter类 方法 - (id)initWithVertexShaderFromString:(NSString *)vertexShaderString fragmentShaderFromString:(NSString *)fragmentShaderString 说明:使用顶点和片段着色字符串来初始化GPUImageFilter  - (id)initWithFragmentShaderFromFile:(NSString *)fragmentShaderFilenam

GPUImage ==&gt; 一个基于GPU图像和视频处理的开源iOS框架

Logo 项目介绍: GPUImage是Brad Larson在github托管的开源项目. GPUImage是一个基于GPU图像和视频处理的开源iOS框架,提供各种各样的图像处理滤镜,并且支持照相机和摄像机的实时滤镜: 基于GPU的图像加速,因此可以加速对实时摄像头视频.电影以及image的滤镜和其它效果处理,并且能够自定义图像滤镜.另外, GPUImage支持ARC. 使用GPUImage处理图片比Core Image更简单,只需要将过滤器赋给图片对象即可,不用考虑context或者设备等其