在 Xcode 6 中使用 PDF 切图
从 iOS 8 开始,Xcode 6 中就开始支持使用矢量切图,支持的格式为 .pdf,这个支持出自 2014 年,却一直比较少听到关于使用 PDF 切图的使用情况,多听闻的是关于 @1x,@2x,@3x 的 PNG 的输出流程。最近又从别的地方听说了这个方法,以下是关于 PDF 切图的一些实践和结论:
初步搜索
- 在站酷上搜索,只找到这样一篇文章,其中文章中的几点都是错误的:
因为切图成 PDF 并且是 @1x 的时候占用空间非常小,并且省去了一整套 @2x 和 @3x 的切图所占用的空间,喔呵呵呵呵呵想到 app 一下子减少了那么多大小,真是睡觉都笑出声呢。
PDF 切图的大小在正常高质量输出的情况下,大小要比 PNG 大得多。在保持最小的文件大小输出时(文章并没有指明这一点,而事实上这项选择与否跟输出大小有很大关系),大小略比单张的 PNG 要小一些。看上去似乎是这样,但是经过这样压缩的 PDF 是否还符合可用标准呢?下面再作探讨。
PDF 切图的原理
虽然是矢量文件,但是最终依然是由 .pdf 文件来生成不同倍率的 PNG 文件来供使用。由此又得出一个疑问,如果上述的压缩 PDF 文件可用,文件大小比单个 PNG 要小,但是事实上程序内还是会依据 PDF 生成不同的大小的 PNG,那么程序的占用空间是不是并没有减少,反而还增多了?
PDF 是否达到可用的程度呢?
这篇文章中阐述了一些作者不使用 PDF 的原因,翻译一下大概以下一些原因:
- 对于一些样式(如阴影)是作为 1x 的位图来存储数据的,并不是矢量,当拉伸时,矢量图形会拉伸而这些样式不会;
- 一些使用了蒙版的地方会出现锯齿;
- 没有特定的大小调整,1px 的线;
- 不明。Rendered by Quartz;
- Web 和 Android 不能用;
- 不支持专色;
同时还有其他一些限制:不支持 AppIcon(见 http://ericasadun.com/2014/06/09/that-vector-thing-xcode-6-pdf-assets-and-unfortunate-outcomes/)
关于第一点,我做了一些测试。 A:PS 输出的低质量 PDF; B:PS 输出的高质量 PDF; C:Sketch 输出的 PDF。
分别查看了下这三个文件在 Win 系统及 OSX 下的情况。 A 在两个系统中的阴影均是分层的; B 在 OSX 系统中的阴影是不分层的,在 Win 系统中是分层的; C 在两个系统中均是不分层的;
由这几个文件可见,怎么定夺 PDF 的质量和可用性是一个很严肃的问题。
怎么使用
站酷的文章里也有说明:
- 如果你不已经有一个 XCAsset 文件,然后创建一个;否则,打开一个你已经在你的项目中。
- 从编辑菜单中的“新建映像集”。
- 在出现新的图像集,选择空白图像集,然后显示在工具面板。
- 选择属性检查器。
- 根据类型下拉菜单中选择“矢量”。
- 图像设置将变成只有一个放置点,标有“全部 - 通用”。
- 拖放上面创建到落点的矢量 PDF 文件。
很可惜描述得很粗糙而且很外行。第一点错误是 Xcode 错误的写成了 xconde(这里没贴出)。第二点是这段话明显是从某个地方直接翻译过来的,因为界面的功能都被翻译成了中文。一般的描述说明是不可能把英文界面的功能特意翻译成中文。(除非作者坚果中文版的 Xcode)
具体的用法可以参考:http://blog.csdn.net/cuibo1123/article/details/39486197/ 其中贴出和上述描述一样的部分:
- 如果你没有 XCAsset 文件,创建一个。如果你已经有一个 XCAsset,那么打开它。
- 从编辑菜单(右键)中选择“New Image Set”。
- 在新出现的图像集合中,选择空白的图像集合,然后打开 Utilities(右侧)面板。
- 选择属性检查器(右侧面板中)。
- 在类型的下拉菜单中,选择“Vectors”。
- 这是图像设置的位置将变成一个空位,标有 “All - Universal”。
- 拖放 PDF 文件到上面。
明显可见,这段和上面一段是从同一个地方(http://martiancraft.com/blog/2014/09/vector-images-xcode6/)翻译过来的。翻译得孰优孰劣,一看便知。 补充一个链接:http://beforweb.com/node/633 翻译的同样是同一篇文章,个人认为这篇翻译是最好的。
实际的试用情况是如何呢?
http://stackoverflow.com/questions/24149785/xcode-6-allows-vector-image-assets-any-idea-how-to-use-them 在这里可以看到一些人的使用情况,有空的时候会翻译一些贴出。
还有什么矢量替代方案?
根据以上的资料可以暂时有两个:
- 第三方库支持 SVG;
- PDF 转 UIImageView。
关于矢量
矢量文件可以是 PDF 格式,但是 PDF 却并不一定是矢量文件。这就带给我一个新的疑问,究竟怎样的输出才算是一个矢量的 PDF 文件呢。关于这件事会继续查找一些资料。
适合的场合
PDF 切图在实际输出的时候极为痛苦。 Windows 下 PSCC 开始的版本,提供了如 Sketch 一样快捷的输出的功能,唯独缺少 PDF 格式,所以设计图配合上 PDF 输出切图将会是一个很繁琐的流程。 OSX 下使用 PS 同理,使用 Sketch 时输出 PNG 与 PDF 的流程一致,也并没有特别使用 PDF 的必要性。
当然,有一些适用的场景使用 PDF 文件是很方便的:
- 单色无阴影的图标;
- 开发 OSX App(官方说在此情况下就是完全的矢量支持)。
题外
有人说别的公司都在使用 Zeplin 啦不用切图不用标注啦我们公司还用 PDF 切图这么落后的方式,哎。
在此我表达几个观点:
- PDF 切图的方式并不落后,它只是 Apple 给你提供的一种新的方法,与 PNG 也并无冲突。看完这篇文章至少你可以知道什么时候情况 PDF 将会是很好的应用(在 OSX App 开发商应该是很有益处的,尽管我没有实践过);
- 工具是为了节约时间提高效率而生的,但是有时候对于设计师原始的手工标注和切图也是一种必要的历练,尤其对于一动手就做 750x1344 的设计师来说;
- 流程是需要不同部门不同情况磨合的,单是我的话就可以提出多套设计稿到切图输出的整个流程,但是对于一个特定项目是否适用还需要考虑,所以说听风就是雨这很不要得;
- 如果非要以工具论:相比于 Zeplin,现在更新后的 Measure 简直不知高到哪里去了;
- 能正常的好好讨论,有独立思想的人实在少之又少啊。