关于Quartz 2D、核心图形、核心动画、核心图像的混淆

31

我正在开发一个需要进行一些图像处理的项目,之前询问了相关问题并得到了很好的解决方案,这是链接create whole new image in iOS by selecting different properties

现在我想更详细地学习这个内容,但是我不确定应该从哪里开始学习Quartz 2D、Core Animation、Core Graphics还是Core Image。

苹果文档关于Quartz 2D的说法:

Quartz 2D API是Core Graphics框架的一部分,因此您可能会看到Quartz被称为Core Graphics或简称CG。

而苹果文档则说:

Core Graphics框架是基于Quartz先进绘图引擎的C语言API。

这让人感到困惑,它们两者间的关系是什么...

现在Core Animation包含了所有坐标、边界、框架等与绘制图像所需的概念。

而Core Image是在iOS 5中引入的。

我应该从哪里开始学习或以什么顺序学习这些内容。

2个回答

61

Quartz和Core Graphics可以视为同义词。我倾向于避免使用"Quartz"这个术语,因为该术语很容易引起混淆(实际上,包含Core Animation的框架是"QuartzCore",更加令人困惑)。

我的建议是:

  • 如果需要高性能矢量绘图(如线条、矩形、圆形、文本等),或与简单修改的位图/光栅图形相互交织(如缩放、旋转、边框等),请学习Core Graphics(CoreGraphics.framework)。对于更高级的位图操作(如色彩校正),Core Graphics不太适用。它可以在位图/光栅操作方面做很多事情,但并不总是明显或直观。总之,Core Graphics最适合"Illustrator/Freehand/OmniGraffle"类型的应用。

  • 如果需要动画内容,请学习Core Animation(位于QuartzCore.framework内部)。基本动画(如将视图移动到屏幕上)可以完全使用基本UIView功能完成,但如果您想要进行更高级的动画,则Core Animation是您的好帮手。有点不符合直觉的是,Core Animation也是CALayer类族的家园,除了可动画化之外,还可以完成一些更有趣的事情,如快速(但性能较差)视图阴影和3D变换(提供所谓的"穷人的OpenGL")。但主要用于动画内容(或内容属性,如颜色和不透明度)。

  • 如果需要高性能、像素精确的图像处理,可以学习 Core Image(在 QuartzCore.framework 中)。这包括从色彩校正到镜头光斑再到模糊等各种处理。苹果发布了一个滤镜参考文档,列举了各种可用的预构建 Core Image 滤镜。您也可以编写自己的滤镜,但这并不是适合所有人的。简而言之,如果需要实现类似于"[选择您喜欢的照片编辑器]滤镜"这样的功能,那么 Core Image 就是您的首选。

  • 这样清楚吗?


    1
    非常感谢您的回答,它非常有用。请再帮我解决一个问题,我正在尝试在我的iOS应用程序中实现以下功能:用户可以从库或相机中选择图像,然后允许用户应用边框和文本,最后将其保存为全新的图像。对于边框,我已经在PS中创建了几个不同颜色的边框,但我想要通过编程方式创建边框,并且还可以设置方形或圆角样式以及所有颜色。我应该先学习什么? - supera
    1
    我建议使用核心图形(Core Graphics)。提示:学习剪切路径(clipping paths)。你可以用它们来实现圆角。 - Conrad Shultz
    7
    好的,我会尽力进行翻译。请注意,为保持原意不变,我的翻译可能比较长。还有一件事:我鼓励你在以后更加注意大写和标点符号。过长的句子难以阅读,会让某些回答者失去兴趣。 - Conrad Shultz
    非常感谢您的帮助,这是一条非常有用的回复。我会尽力进行大写和标点符号的使用。保重。 - supera
    我喜欢分享另一个有用的资源,它将在阅读完这个答案后帮助更多人。这是链接:https://developer.apple.com/library/mac/#referencelibrary/GettingStarted/GS_GraphicsImaging/_index.html - supera
    1
    @ConradShultz:你提到了“Core Image(在QuartzCore.framework内部)”,但是CoreImage本身是一个不同的框架: https://developer.apple.com/documentation/coreimage#overview - aksani56

    8

    核心动画是一种技术,它更多地依赖于OpenGL,这意味着它受限于GPU。

    而另一方面,核心图形使用CPU进行渲染。它比核心动画更加精确(以像素为单位),但会使用你的CPU。


    如果您使用带有非常复杂路径的CAShapeLayer,则该路径也会在CPU上进行处理/渲染,这并不简单。 - Nils
    3
    我不相信这个答案是正确的。 - Andrew Paul Simmons

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接