-
Notifications
You must be signed in to change notification settings - Fork 272
filter
yulin6666 edited this page Apr 12, 2017
·
48 revisions
美颜是指对主播图片进行美白、磨皮、红润等效果,目前SDK内置了如下6种美颜:
Filter | 名称 | 美白 效果 |
磨皮 效果 |
红润 效果 |
是否依赖 KSYGPUResource. bundle |
---|---|---|---|---|---|
KSYGPUBeautifyExtFilter | 嫩肤 | 中 | 中 | 强 | 否 |
KSYGPUBeautifyFilter | 白肤 | 强 | 中 | 低 | 否 |
KSYGPUDnoiseFilter | 自然 | 中 | 低 | 低 | 否 |
KSYGPUBeautifyPlusFilter | 柔肤 | 中 | 中 | 中 | 否 |
KSYBeautifyFaceFilter | 白皙 | 中 | 强 | 低 | 是 |
KSYBeautifyProFilter | 粉嫩 | 中 | 强 | 中 | 是 |
效果描述是只针对默认效果,后两个滤镜的三种效果参数可独立调节,其余滤镜只能设置等级,详见接口
- v1.8.1 新增 美颜滤镜KSYBeautifyFaceFilter, 如果启用红润参数需要依赖KSYGPUResource.bundle中的资源
- v1.8.1 新增 特效滤镜KSYBuildInSpecialEffects, 其中包括6种内置特效和自定义特效接口, 需要依赖 KSYGPUResource.bundle中的资源
- v1.9.3 新增 美颜滤镜KSYBeautifyProFilter, 本次主要针对之前美颜存在肤色不自然、偏色等问题,以及针对我们的使用场景,对美颜进行了优化, 需要依赖 KSYGPUResource.bundle中的资源
特效滤镜都需要用到资源文件, 如果直接使用KSYGPUResource.bundle,可以通过 setSpecialEffectsIdx来进行设置
//初始化并指定effectIdx来创建对应效果
KSYBuildInSpecialEffects * sf = [[KSYBuildInSpecialEffects alloc] initWithIdx:1];
//指定effectIdx来切换到对应效果
[sf setSpecialEffectsIdx: effectIdx];
effectIdx | 名称及效果 | 资源文件名称 | 引入版本 |
---|---|---|---|
1 | 小清新 | 1_xiaoqingxin.png | v1.8.1 |
2 | 靓丽 | 2_liangli.png | v1.8.1 |
3 | 甜美可人 | 3_tianmeikeren.png | v1.8.1 |
4 | 怀旧 | 4_huaijiu.png | v1.8.1 |
5 | 蓝调 | 5_landiao.png | v1.8.1 |
6 | 老照片 | 6_laozhaop.png | v1.8.1 |
7 | 樱花 | 7_yinghua.png | v2.1.0 |
8 | 樱花(光线较暗) | 8_yinghua_night.png | v2.1.0 |
9 | 红润(光线较暗) | 9_hongrun_night.png | v2.1.0 |
10 | 阳光(光线较暗) | 10_yangguang_night.png | v2.1.0 |
11 | 红润 | 11_hongrun.png | v2.1.0 |
12 | 阳光 | 12_yangguang.png | v2.1.0 |
13 | 自然 | 13_ziran.png | v2.1.0 |
-
如果只需要其中的一个或几个效果(而不是全部), 可以不引入KSYGPUResource.bundle, 只需要将选中效果对应的png资源文件放到main bundle中即可.
-
美颜滤镜 KSYBeautifyFaceFilter 和 KSYBeautifyProFilter 只依赖 KSYGPUResource.bundle 中 0_ 开头的png文件, 如果只需要美颜滤镜, 也可以不引入KSYGPUResource.bundle, 只需要将0_开头的资源文件放到main bundle中即可. 比如(0_hongrun2.png, 0_meibai.png, 0_pink.png )
用户如果需要自定义滤镜,滤镜必须是继承GPUImageOutput类的,而且实现了GPUImageInput协议,使用方法参考下面的示例。
初始化滤镜
- 美颜滤镜
//初始化滤镜
_filter = [[KSYGPUBeautifyExtFilter alloc] init];
- 滤镜组合
//初始化美颜滤镜
KSYGPUBeautifyExtFilter * bf = [[KSYGPUBeautifyExtFilter alloc] init];
//初始化褐色(怀旧)滤镜
GPUImageSepiaFilter * pf =[[GPUImageSepiaFilter alloc] init];
//组装滤镜
[bf addTarget:pf];
//初始化滤镜组
GPUImageFilterGroup * fg = [[GPUImageFilterGroup alloc] init];
//将滤镜添加到滤镜组
[fg addFilter:bf];
[fg addFilter:pf];
//组装滤镜
[fg setInitialFilters:[NSArray arrayWithObject:bf]];
[fg setTerminalFilter:pf];
_filter = fg;
- 美白滤镜
//初始化美颜滤镜
_filter = [[KSYBeautifyFaceFilter alloc] init];
设置滤镜
[_kit setupFilter: _filter];
调整滤镜参数
对于美颜滤镜可以调节美颜等级
[(KSYGPUBeautifyExtFilter *)_filter setBeautylevel: level];//level 1.0 ~ 5.0
对于美白滤镜可以调节磨皮、白皙的等级
(KSYBeautifyFaceFilter *)_filter.grindRatio = level;//0.0 ~ 0.8 0.7为默认等级
(KSYBeautifyFaceFilter *)_filter.whitenRatio = level;//0.0 ~ 1.0 0.5为默认等级
取消滤镜
_filter = nil;
[_kit setupFilter: _filter];//取消滤镜只要将_filter置为nil就行
测试说明
- 温度取值摄像头下方
- 设备为iphone6s iOS 9.3
- 采集配置:分辨率360p、帧率15fps
Filter Name | 名称 | CPU占用(开启前) | CPU占用(开启后) | GPU占用(开启前) | GPU占用(开启后) | 设备温度(开启前) | 设备温度(开启10mins后) |
---|---|---|---|---|---|---|---|
KSYGPUBeautifyExtFilter | 嫩肤 | 21.85% | 26.2% | 20.4% | 21.1% | 30 | 32.4 |
KSYGPUBeautifyFilter | 白肤 | 21.85% | 27.15% | 20.4% | 22.1% | 30 | 30.1 |
KSYGPUDnoiseFilter | 自然 | 21.85% | 25.7% | 20.4% | 25.4% | 30 | 32.9 |
KSYGPUBeautifyPlusFilter | 柔肤 | 21.85% | 31.6% | 20.4% | 21.2% | 30 | 32.7 |
KSYBeautifyFaceFilter | 白皙 | 21.85% | 25.1% | 20.4% | 23.7% | 30 | 32.5 |
KSYGPUBeautifyExtFilter | KSYGPUBeautifyFilter |
---|---|
KSYGPUDnoiseFilter | KSYGPUBeautifyPlusFilter |
---|---|
KSYBeautifyFaceFilter 50% | KSYBeautifyFaceFilter 100% |
---|---|
某椒 | 某客 |
---|---|
KSYGPUBeautifyExtFilter | KSYGPUBeautifyFilter |
---|---|
KSYGPUDnoiseFilter | KSYGPUBeautifyPlusFilter |
---|---|
KSYBeautifyFaceFilter 50% | KSYBeautifyFaceFilter 100% |
---|---|
某椒 | 某客 |
---|---|