最近在做一个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