摘要: 本文主要记录一些Asset Catalog的相关特性及基本情况,更多介绍,麻烦查看下一篇文章,Asset catalogs:图像管理的最佳选择
1.简介
asset catalogs通常用来来组织和管理应用程序使用的不同asset类型,例如images, sprites, textures, stickers, and data等。asset catalog可以包含多种类型的asset,并且可以将asset分组到文件夹中。
大多数类型的assets是一组文件,可以有多种变体以支持不同的设备特性。
2.Asset目录结构
asset catelogs 通过命名asset与针对不同设备属性的一个或多个文件之间的映射来简化应用程序资源的访问,这些属性包括device characteristics, size classes, on-demand resources, and type-specific information。 这些属性用于为应用切片变体选择最佳文件,并在运行时为当前屏幕选择正确的图像。
下图显示了Asset Catalogs包含的不同类型元素:
在Asset Catalogs中的文件,最终会被组织成以下三部分:
Folders:目录,纯粹的group folder没有类型拓展(e.g. 目录1:t)
JSON files:配置说明文件, 属性面板上的修改最终会体现在json文件对应属性上(Contents.json)
Content files:资源文件
3.常用特性
Render As
iamge渲染模式,分别对应以下枚举值
Default: UIImageRenderingModeAutomatic
Original image : UIImageRenderingModeAlwaysOriginal
template image : UIImageRenderingModeAlwaysTemplate
image创建时,非指定情况下默认模式,在这个模式下,依据其渲染上下文自动选择对应的模式;
举例:
- navigation bars, tab babrs, toolbars, segmented controls 的foreground images自动归属于
template mode; - image views, web views 的image自动归属于
original mode;
template image是位图图像,不透明度是关键,image会忽略image的color信息,通常情况下,可以使用template iamge来表示形状;当使用template image时,指定父视图的tint color,使得template image的形状采用该颜色;要支持不同的外观,只需要更改tint color就可以;
Compression
默认继承上级目录设置的压缩选项,自身可指定压缩选项;
Lossless:无损压缩
- 默认的压缩方式,Apple Deep Pixel Image Compression
- 15-20%体积优化
- 节省20%的解码时间
Lossy:有损压缩
- Basic (heiv压缩算法)
- GPU Best Quality (4位每像素固定比特率编码)
- GPU Smallest Size (1位每像素固定比特率编码)
- 短时间使用的图像使用有损压缩(例如:启动图片,过场动画或者特效)
- 比jpeg更高的压缩比
- iOS12后,选择有损压缩,自动转化成高效图像文件格式(High Efficiency Image File Format),在拥有和JPEG同样画质的情况下:体积更小、效率更高
可使用如下命令查看cer文件中的压缩算法:
assetutil --info *.cer
输出对象中的 Compression:'***';下文会详细介绍assetutil命令
tips: 图片如果有透明度,不建议在iOS12以前使用Basic,GPU压缩,会导致图层穿透
preserve the vector
在编译时会将PDF文件拷贝到二进制文件中, 以便我们可以在运行时任意缩放图片而不会失真
tips:
- 对于iOS10及以下系统, 仍然会生成对应的@1x、@2x及@3x格式的PNG文件, 此时无法保证在运行时任意缩放图片而不会失真
- 使用pdf图片,asset编译管道会根据PDF文件自动生成设备对应的@2x和@3x格式的PNG文件,cer会同时有该资源的pdf和png
Devices
指定设备类型
Appearance
指定风格类型
High Contrast: 指定高对比度资源
Scales
- Single Scale: 不区分设备scale,显示同一张图像
- Individual Scales: 根据设备scales匹配对应图像
- Individual and Single Scales: 当两种情况都存在图像时,All Scales 图像需要指定为矢量图,如果当前没有符合设备屏幕(2x,3x)的图片,取All Scales指定图片,
Gamut
指定色彩空间
display P3的图片,默认会在asset编译管道中被转化为兼容模式(extended srgb);如果是原始的display P3图片(包括远程图片,工程中文件),GPU不支持dispaly P3格式,会导致格式转换(可以考虑提前后台线程转换iamge的图片格式及大小,避免影响滚动性能及占用主线程事件),UI debug调试中可用(color copied images)检测。
Direction
图像的水平显示方向,可根据系统书写方向决定
Width Class / Height Class
sizeclass 是一种屏幕适配方案,将不同尺寸(包括横屏和竖屏)的屏幕进行了分类,对屏幕宽度和高度的区分分为三种,compact(紧凑)、regular(正常)、any(任意);如果希望某个控件在横屏是显示,在竖屏时不显示的时候,或者横竖屏不同布局,可以考虑有sizeClass这种技术;
通过sizeclass配置,在不同类型屏幕上显示指定适配图片
Memory / Graphics
可以根据不同的设备内存或者metal版本,选择不同的资源文件
Slicing
图片中重复区域高的区域,可以使用slicing切割(减小体积),中间区域可以选择拉伸或者平铺