之前探究过 iOS 上通过 CoreImage、OpenGLES 等技术实现 LUT 滤镜的对比 -- [iOS 针对 LUT 滤镜的实现对比](https://www.jianshu.com/p/f054464e1b40),但是其实在图形处理这块,Apple 更推崇自家公司的 Metal,这是一个和 OpenGLES 类似的面向底层的图形编程接口,最早在 2014 年的 WWDC 的时候发布,可用于从 CPU 发送指令到 GPU 驱动 GPU 进行大量并行矩阵运算。
利用category定义一段宏代码
近期在对 iOS 页面生命周期进行测速跟踪时,需要在 UIVIewController 的生命周期方法里加入打点代码,同时还需要持有打点任务对象,对 VC 类的侵入较大,且冗余代码较多。本来计划采用 hook 方法,考虑到风险并未实行,最终决定采用宏定义代码的方式实现。
iOS实现LUT滤镜的几种方式的探究
在 app 内利用各种图形算法可以对图片进行一些变换,这样的效果也称为“滤镜”,滤镜效果大致可以分为以下几类:
AVFoundation-视频与动画图层
在编辑视频的过程中,时常有场景需要对视频增添更多个性化的内容,如字幕、水印或者表情等,此时需要对视频增加一个动画叠加层,在实现上来讲就需要结合 AVFoundation 和 CoreAnimation 一同使用。
AVFoundation-混合音频
在组合媒体的过程中,需要用到 AVComposition 类,其中对于音频轨道可以使用与视频轨道一样的不重叠组合方式,同时音频轨道也可以重叠在一个时间段内,实现一种混音的效果,同时还可以设置不同轨道的音量变化。
AVFoundation-视频过渡动画
两个独立的视频拼接起来以后很有可能会出现衔接处过于生硬的问题,此时就需要给视频添加过渡效果,这一效果需要用到 AVVideoComposition 及其子类 AVMutableVideoComposition。
AVFoundation-媒体的组合和编辑
AVFoundation 能支持非线性、无损的编辑工具,并且可以在原始媒体资源不破坏的情况下无约束地编辑。
AVFoundation-读取和写入媒体
AVFoundation 提供了对底层数据的读写功能,需要用到 AVAssetReader 和 AVAssetWriter 两个核心类。
AVFoundation资源和元数据
AVAsset 是一个抽象类和不可变类,它定义了媒体资源混合呈现的方式,将媒体资源的静态属性模块化为一个整体,包括标题、时长和元数据。AVAsset 提供了基本媒体格式的层抽象,隐藏了资源的位置信息。
AVFoundation-入门
AV Foundation 是 OSX 系统和 iOS 系统中用于处理基于时间的媒体数据的高级 objectivec 框架,其设计过程高度依赖多线程机制,充分利用了多核硬件优势,大量使用 Block 和 GCD 机制。AVFoundation 能与高层级框架无缝衔接,也能提供低层级框架的功能和性能。