最近在做一个3D模型换脸功能,用户用手机自拍,然后将3D人物模型的脸换成自己的。
在这过程中,android端可以用美图秀秀的美颜库去美白,但是ios端就没有类似的东东,百度一下,会发现在github上有一个叫BeautifyFaceDemo的开源项目,可以实现实时美颜相机,可想而知实现美颜一张照片肯定没问题。然后开始研究,最后用上之后,效果还可以。
下面记录一下调用过程:
Step 1,从下载GPUImage工程,从下载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:
为了节约时间,直接上老外的代码^_^:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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,使用美颜滤镜美颜一张照片:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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