我不为 Apple 工作,也没有任何内幕消息 - 但是,我确实四处闲逛并提出了一些理论。如果你使用终端,你可以 cd 进入 Xcode.app 并在那里找到 pngcrush:
$ 查找 . -name pngcrush
./Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/pngcrush
如果你随后运行:
./pngcrush -?
你会发现一些有趣的花絮:
|它是用 LLVM 4.2.1 Compatible Apple Clang 4.0 编译的
(tags/Apple/clang-420.0.12) 并由 Apple 修改,如
来源。
和
-iphone(针对 iPhone 操作系统进行优化)
因为我也看到捆绑包中的一些大 png 也比原始文件大得多(我之前自己压碎了!),所以我想看看 Xcode 如何使用 pngcrush。我使用了一个旧的 UNIX 技巧:
- 将 pngcrush 移动到 xpngcrush
- 创建一个新的可执行 shell 文件,使用相同的参数列表调用 pngcrush
- 将参数记录到 /tmp 中的文本文件中
我发现苹果称 pngcrush 为:
pngcrush -q -iphone oldFile newFile
由此可以推断,pngrush 的 Apple 特有功能是专门为 iOS 定制图像而设计的。我说的是裁缝,不是暗恋。
Apple 是否真的在乎您的 png 是否是最小的文件,以节省最大的空间?我认为,不是真的-这些设备具有相当大的文件存储空间。他们真的关心你的应用下载速度是否真的很快吗?同样,我认为不是真的,因为用户会假设时间与应用程序的大小有关,并且这是在开发人员的控制之下。
但是,用户要让 Apple 负责的是启动速度。从第一次点击到应用开始做某事——人们会相信这就是设备的全部速度(我们开发人员知道这并不完全正确)。有了新的 iPad3,一些启动图像现在非常大,那么如何才能使它们尽可能快地加载呢?
我不知道这个问题的答案,但我可以想象 Apple 会解压缩原始图像,然后使用设置重新压缩它,以尽可能快地将其加载到设备中。
PS:
1) 我刚刚禁用了 crush 选项,并观察到 Xcode 4.5 复制了我的 png 文件而不进行修改。
2) 为了缩小应用程序的大小,您是否尝试过使用具有高质量设置的 JPEG - 甚至是 1?这样的图像看起来非常好,而且要小得多。我的应用程序中的几乎所有图像都是 JPEG。您可以尝试使用 Preview 来进行转换。
编辑:我想到可能有一个优雅的解决方案。也就是说,对于真正重要的图像——你希望尽快出现的图像——然后使用带有“-iphone”标志的 pngcrush。对于其他人,请使用更多标准的 pngcrush 选项。
这样做的一种方法是创建一个新的图像目录,并编写一个 shell 文件,该文件使用真正的破碎机或 tje '-iphone' 标志预处理每个 png,将输出放在原始图像文件夹中(其中 Xcode可以得到它们)。然后关闭自动“粉碎 PNG 文件”选项。
EDIT2:我在 bugreporter.apple.com 上输入了一个错误并发布在 Xcode listserv 上 - 如果您对此书签感兴趣,请在问题更新时回来。
EDIT3:有人给了我一个链接,更详细地解释了 Apple 的“-iphone”选项ImageOptim987654321@
EDIT4:Apple 回应了我的错误报告,确认他们修改了图像以便 iOS 更容易处理,这可能会使它们变大,这是有意的。