一、iOS相关图形框架初识

时间:2021-7-21 作者:qvyue

背景

自下而上系统的学习或了解iOS中各种图形框架。

OpenGLES → Metal → GPUImage → CoreAnimations → UIKit

CoreImage、CoreGraphics、Quartz2D

一、iOS相关图形框架初识
iOS图形层次(越上层封装程度越高,摘自网络)

OpenGL

OpenGL是一个跨语言、跨平台的应用bai程序编程接口库(API),用于绘制二维和三维矢量图形。该接口由近350个不同的函数调用组成,用于从简单的图形位绘制到复杂的三维场景。

OpenGLES

OpenGL ES(OpenGL for Embeded System)是OpenGL(Open Graphics Library)的精简子集,是以手持和嵌入式设备为目标的高级3D图形API,如现在火爆的智能手机,支持桌面系统,还是浏览器3D图形标准WebGL的基础,支持多个平台,如桌面端的Linux、Windows,移动端的Android、iOS等,无处不在

Metal

在 WWDC 2014 上,Apple为游戏开发者推出了新的平台技术 Metal,该技术能够为 3D 图像提高 10 倍的渲染性能,并支持大家熟悉的游戏引擎及公司。
Metal 是一种低层次的渲染应用程序编程接口,提供了软件所需的最低层,保证软件可以运行在不同的图形芯片上。

GPUImage

GPUImage是一个著名的图像处理开源库,它让你能够在图片、视频、相机上使用GPU加速的滤镜和其它特效。与CoreImage框架相比,可以根据GPUImage提供的接口,使用自定义的滤镜。项目地址:https://github.com/BradLarson/GPUImage

CoreAnimation

CoreAnimation如果只从字面上来理解,就会感觉这只是用来作用动画的一个类库,其实动画只是它的一部分,最重要的是它可以快速组合屏幕上不同的可视内容,这些内容被分解成独立的图层,存储在一个图层树的体系中。所有我们能在屏幕上看到的内容都和这个有关。

UIKit

UIKitk框架提供一系列的Class(类)来建立和管理iPhone OS应用程序的用户界面( UI )接口、应用程序对象、事件控制、绘图模型、窗口、视图和用于控制触摸屏等的接口。(PS1: 可以认为是操纵界面的一个API库)(PS2: UIKit框架是用在 iOS 平台上与之对应的是MAC OS X上的Application Kit,二者作用和目的没啥太大区别)

CoreImage

这是一篇比较早的关于CoreImage框架的介绍,介绍的很详细,包括如何使用CIFiter内置的几种滤镜、使用框架内置的人脸检测、固定颜色的透明度剔除、能够移轴的高斯模糊效果等等。
但是文中关于CIImage概念的介绍有一些误区。CIImage包含生成一个图片的全部数据,不过确切的讲CIImage并不同于UIImage、CGImageRef等是一个图片对象,而是这个图片的描述的抽象(引自官方原话)。
虽然使用CoreImage框架能够满足大部分日常图片滤镜处理之类的需求,而且是系统内置框架,性能上肯定是经过一番考究的,但是其API使用起来比较麻烦,尤其是基于对摄像头数据流的实时滤镜(目前大部分直播APP要求这个功能),所以如果项目中有这方面的需求,我们还是用GPUImage。

CoreGraphics

Core Graphics是Quartz 2D的一个高级绘图引擎,常用与iOS,tvOS,macOS的图形绘制应用开发。Core Graphics是对底层C语言的一个简单封装,其中提供大量的低层次,轻量级的2D渲染API。
Core GraphicsAPI简单易于使用,并且提供了强大的功能访问,如透明层,基于路径的涂层绘制,屏幕外呈现,高级色彩管理,抗锯齿已经PDF文档的生成解析操作。

Quartz2D

简单来说,Quartz2D是用C语言封装的二维绘图引擎,同时支持iOS和Mac系统,利用Quartz2D,我们可以完成以下工作:
绘制图形 : 线条三角形矩形圆弧等
绘制文字
绘制生成图片(图像)
读取生成PDF
截图裁剪图片
自定义UI控件
Quartz 2D API是Core Graphic框架的一部分,因此其中的很多数据类型和方法都是以CG开头的。会经常见到Quartz 2D(Quartz)和Core Graphics两个术语交互使用

参考资料:
OpenGL入门
iOS 图形绘制框架 ——UIBezierPath 、Core Graphics 和OpenGL
iOS图形处理概论:OpenGL ES,Metal,Core Graphics,Core Image,GPUImage,Scene Kit (3D) ,Sprite Kit (2D),OpenCV
关于iOS开发中图片处理的一些积累

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。