ToB企服应用市场:ToB评测及商务社交产业平台

标题: Core Image:iOS图像处理技术追踪 [打印本页]

作者: 梦应逍遥    时间: 2024-6-15 00:22
标题: Core Image:iOS图像处理技术追踪

图四:断点调试时Core Image对每帧的处理流程
基于Metal构建Core Image Kernel
==============================

利用CI Kernel有诸多上风,包括上文提及的收缩runtime编译时间、高性能语言特性(如gather-reads、group-writes、半精度浮点数)、高效开发体验(如缩进查抄、缩进高光)。基于Metal构建CI Kernel有5步流程,会在下文进行逐一介绍。
 在项目中增加自定义构建规则

苹果官方保举在项目target中增加两项自定义构建规则。第一个构建规则针对以“.ci.metal”为后缀名的文件。该构建规则会创建一个以“.ci.air”为后缀名的二进制输出文件。

图五:针对“*.ci.metal”文件的构建规则
第二个构建规则针对以“.ci.air”为后缀名的文件(上一个构建规则的输出结果)。该构建规则会在app的资源文件夹内创建以“.ci.metallib”为后缀名的输出文件。

图六:针对“*.ci.air”文件的构建规则
 在项目中增加.ci.metal资源

在Xcode提供的创建面板中选择Metal File即可。开发者对Metal File进行定名时需要以“.ci”作为后缀名,这样项目中新天生的文件会以“.ci.metal”作为后缀名。
 编写Metal Kernel

便携Metal Kernel需要include CoreImage.h头文件,用来利用Metal和Core Image提供的各种类。官方提供的范例编写了一个CIColorKernel,输入参数为coreimage::samle_t对象(表示输入图片的一个像素)、time和coreimage::destination对象,返回float4像素。

图七:苹果官方提供的代码范例:Metal Kernel编写
苹果官方为开发者提供了描述CI Kernel中Metal Shader语言的文档,详情见「 Metal Shading Language for Core Image Kernels」① 。
 加载Kernel并应用于新图像(基于Swift)

Kernel会被CI滤镜的子类利用。苹果官方保举开发者在实例化滤镜的CIKernel对象时利用静态属性(static property),这种环境下加载metallib资源的工作仅会实行一次(在首次需要时)。CI滤镜的子类也必须重载输出图片的属性,Kernel将在getter中进行图像处理并创建新图像。

图八:苹果官方提供的代码范例:Kernel加载与利用
Core Image的Debug支持
======================

苹果官方在WWDC20详细介绍了Debug特性:CI_PRINT_TREE。
 什么是CI_PRINT_TREE

CI_PRINT_TREE的底子框架与Xcode提供的Core Image Quick Look支持雷同。Core Image Quick Look为开发者提供了快捷可视化的Core Image图片(详见上文图三),而CI_PRINT_TREE支持几种不同的模式和选项用来查看Core Image怎样优化和渲染图像。
 怎样启用CI_PRINT_TREE

苹果官方提供了CI_PRINT_TREE的两种启动方式。最常用的方法是编辑Xcode target scheme,在Arugments窗体下的环境变量列表中参加CI_PRINT_TREE并设置值。另一种方法是在Terminal.app中通过下令行启动CI_PRINT_TREE(需要在实行应用步伐前设定)。


图九:启用CI_PRINT_TREE的两种方式
 怎样控制CI_PRINT_TREE

CI_PRINT_TREE的字符串格式为“ ”


图十:苹果官方对graph type四个stage的描述


图十一:苹果官方提供的option

图十二:type设定为7时tmp文件夹下的文件




 怎样获得CI_PRINT_TREE文件

在macOS中,开发者只需要进入“/tmp”文件夹就能找到天生的CI_PRINT_TREE文件。需要注意的是沙盒应用会利用特有的临时存储文件夹。
在iOS中,开发者需要将Custom iOS Target Properties中的“Application supports iTunes file sharing”项设为YES(图十三)。这样天生的CI_PRINT_TREE文件可以在连接中的iOS设备上被找到并拖拽至macOS存储中。

图十三:Custom iOS Target Properties中进行设置


 怎样解释CI_PRINT_TREE文件

读CI_PRINT_TREE时,需要遵循以下规则:


图十四:绿色节点与赤色节点示例


图十五:苹果官方案例中initial tree对色彩空间的描述

假如开发者在CI_PRINT_TREE控制字符串中选择type-4并在option中设定dump-intermediates,产生的级联图片会展示中间缓存的每一次pass(除了output pass)及其耗时、像素点数目和像素点格式(用来查找耗时大、占内存大的pass)。这对render内追踪错误非常有帮助。假如树中没有展示中间图,那么说明这张图在先前渲染的时候已被缓存,因此Core Image没有渲染它的必要。

图十六:设定dump-intermediates的debug结果展示
Core Image在手淘图片库中的应用大概
==========================

手淘图片库中的CDN图片适配处理库(TBCDNImage)的焦点目标是为不同终端设备、网络环境下的图片展示提供最优解。目前思量的维度重要是终端设备硬件和网络状态,思量的参数则是图片尺寸、压缩比率、锐化等图片属性。随着苹果在Core Image、端智能(CoreML)、硬件支持(自研芯片)等方面进行技术提升,手淘的CDN图片适配处理库可以思量增加“图片内容”作为新的维度,增加亮度、对比度、滤镜、图片种类等新参数。以下为部分应用场景:

===
对Core Image技术的展望
====================

总结全文,WWDC20对Core Image技术的提升重要在三方面:

那么怎样才能正确的掌握Redis呢?

为了让大家可以或许在Redis上可以或许加深,所以这次给大家准备了一些Redis的学习资料,还有一些大厂的面试题,包括以下这些面试题

JVM常频面试:

Mysql面试题汇总(一)

Mysql面试题汇总(二)

Redis常见面试题汇总(300+题)


JVM常频面试:
[外链图片转存中…(img-CmEodzbC-1714283123216)]
Mysql面试题汇总(一)
[外链图片转存中…(img-PgZuW5j5-1714283123216)]
Mysql面试题汇总(二)
[外链图片转存中…(img-shlfVVNf-1714283123216)]
Redis常见面试题汇总(300+题)
[外链图片转存中…(img-SNl1P2DK-1714283123217)]
   本文已被CODING开源项目:【一线大厂Java面试题解析+焦点总结学习笔记+最新讲解视频+实战项目源码】收录

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4