iOS实时美颜滤镜是怎样炼成的
1. 背景
阿拉善盟网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站建设等网站项目制作,到程序开发,运营维护。成都创新互联从2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联。
前段时间由于项目需求,做了一个基于GPUImage的实时美颜滤镜。现在各种各样的直播、视频App层出不穷,美颜滤镜的需求也越来越多。为了回馈开源,现在我把它放到了 GitHub上面,感兴趣的朋友可以去下载。下面将主要介绍实现美颜滤镜的原理和思路。
2. GPUImage
GPUImage 是一个开源的基于GPU的图片或视频的处理框架,其本身内置了多达120多种常见的滤镜效果。有了它,添加实时的滤镜只需要简单地添加几行代码。下面的例子是以摄像头的数据为源,对其实时地进行反色的操作(类似相片底片的效果):
self.videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionFront];
self.videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
self.videoCamera.horizontallyMirrorFrontFacingCamera = YES;
GPUImageColorInvertFilter *invert = [[GPUImageColorInvertFilter alloc] init];
[self.videoCamera addTarget:invert];
self.filterView = [[GPUImageView alloc] initWithFrame:self.view.frame];
self.filterView.center = self.view.center;
[self.view addSubview:self.filterView];
[invert addTarget:self.filterView];
[self.videoCamera startCameraCapture];
其实美颜也是一样,如果有这么一个美颜的滤镜(姑且叫做GPUImageBeautifyFilter),那么只需要把上面代码中的GPUImageColorInvertFilter替换成GPUImageBeautifyFilter即可。我们只需要做一个GPUImageBeautifyFilter就能实现实时美颜了,问题来了,到底什么算是美颜呢?我的理解是,大家对于美颜比较常见的需求就是磨皮、美白。当然提高饱和度、提亮之类的就根据需求而定。本文将着重介绍磨皮的实现(实际上GPUImageBeautifyFilter也实现了美白、提亮等效果)。
3. 磨皮
磨皮的本质实际上是模糊。而在图像处理领域,模糊就是将像素点的取值与周边的像素点取值相关联。而我们常见的高斯模糊 ,它的像素点取值则是由周边像素点求加权平均所得,而权重系数则是像素间的距离的高斯函数,大致关系是距离越小、权重系数越大。下图3.1是高斯模糊效果的示例:
iOS 实现app黑白模式
2020的是被疫情覆盖的一年,在国内疫情得到控制之后,全国在4.4日举行了疫情哀悼纪念,而互联网的产物在那天也做出了很多默契的配合,比如说很多网站暂停运营一天,很多app网页的UI变成了黑白模式,那天我刷了一整天的手机看到的画面全是黑白的,第二天又调整为正常了.作为一个iOS开发,我思考如何才能更好的达到这种黑白与彩色之前的切换,想了以下几种思路:
通过查询资料,未找到方式1相关的api,iOS设备自身有个功能叫 颜色反转 ,有兴趣的可以去打开该功能看看,我在想这其实和实现黑白模式的原理是一样的,但是苹果未开放相关api
方式2看起来可行,我觉得一些app等在那天就是采用了这样的方式来实现的黑白化,因为app里的内容不是说有的都改成了黑白,只有部分图片或者页面改成了黑白模式,但是工作量有点太大了,而且不够灵活
方式3我认为是比较可靠可行的,于是我按照方式3的思路实现了UIColor及图片的黑白化
首先贴上一张没有开启黑白化的page原图,可以看到图片,color都是正常的
UIColor方法捕捉
我们注意以下这3处的颜色变化
在该方法中我们可以捕获到系统预设的systemColor,如果想知道到底有哪些systemColor,可以通过 [UIColor systemBlueColor]; 点击前往分类 @interface UIColor (UIColorSystemColors) 中,这里系统提供了许多预设的systemColor,这些方法与 initWithName:colorsByThemeKey: 中的name一致,所以我们拦截了所有的systemBlueColor方法,直接采用BlueColor返回,而BlueColor我们在前面也做过了拦截处理,这样就达到了统一处理,如果还有其他name类型的systemColor,可以采取同样的处理方式,或者我们可以将需要捕获的systemColor的name通过服务端下发,同时下发对应的r、g、b、a值,然后调用 [UIColor colorWithRed:r green:g blue:b alpha:a] 这样更加灵活
通常情况下,我们的app里的图片控件都会采用UIImageView,这里我只是正对 UIImageView 进行了 setImage 的hook,如果有其他情况,需要自己处理,掌握了此 黑白化 的技巧,其他的处理方式也差不多
图片的黑白化,我采用的是 CIFilter 滤镜实现,我们看下 黑白 和 单色 两种滤镜
效果差不多,但是在图片色彩丰富的图片上,个人认为Mono会比Noir效果好看点
至此,我们可以通过服务器来灵活配置关键参数 monochromatic ,开启或者关闭 黑白化 功能,实现app基本全面黑白化
demo参考
gpuimage怎么给摄像头实时加滤镜ios开发
全能特效摄像机 妙思摄影机 Musemage 看看有多实时: 实时漫画滤镜实现三次元到二次元降维打击 Musemage 妙思摄影机 视频实时滤镜,镜头 艺术效果 颜色滤镜 蓝幕 HDR 防抖 实时滤镜最强者
苹果11怎么调出自带的滤镜
苹果手机的相机虽然没有美颜功能,但是原相机支持滤镜功能,也可以拍出很有意境的照片,那么苹果11怎么调出自带的滤镜?下面一起来看看吧~
苹果11怎么调出自带的滤镜?
1、打开桌面上的相机图标,进入拍照界面。
2、点击屏幕顶部中心的上拉三角图标。
3、点击三个圆形状的滤镜图标,选择自己想要的滤镜即可。
注:本文适用于iPhone 11手机ios13系统。
本文以iphone11为例适用于ios13系统
名称栏目:ios开发滤镜,ios油画滤镜
URL标题:http://lswzjz.com/article/dseipho.html