我不为 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 是否是最小的文件,以节省最大的空间吗?我认为,不是真的-这些设备具有相当大的文件存储空间。他们真的关心你的应用下载速度是否真的很快吗?同样,我认为不是真的,因为用户会假设时间与应用程序的大小有关,并且这是在开发人员的控制之下。
然而,用户要让苹果负责的是启动速度。从第一次点击到应用开始做某事——人们会相信这就是设备的全部速度(我们开发人员知道这并不完全正确)。在新的 iPad3 中,一些启动图像现在非常大,那么如何才能使它们尽可能快地加载呢?
我不知道这个问题的答案,但我可以想象 Apple 会解压缩原始图像,然后使用能够尽可能快地将其加载到设备中的设置重新压缩它。
PS:
1)我刚刚禁用了crush选项,并观察到Xcode 4.5在没有修改的情况下复制了我的png文件。
2)为了缩小应用程序的大小,您是否尝试过使用具有高质量设置的 JPEG - 甚至是 1?这样的图像看起来非常好,而且要小得多。我的应用程序中的几乎所有图像都是 JPEG。您可以尝试使用预览来进行转换。
编辑:我想到可能有一个优雅的解决方案。也就是说,对于非常重要的图像——您希望尽快出现的图像——然后使用带有“-iphone”标志的 pngcrush。对于其他人,使用更标准的 pngcrush 选项。
一种方法是创建一个新的图像目录,并编写一个 shell 文件,使用真正的破碎机或 tje '-iphone' 标志预处理每个 png,将输出放在原始图像文件夹中(Xcode 可以在其中获取它们)。然后关闭自动“粉碎 PNG 文件”选项。
EDIT2:我在 bugreporter.apple.com 上输入了一个错误并发布在 Xcode listserv 上 - 如果您对此书签感兴趣,请在更新时回来。
EDIT3:有人给了我一个链接,更详细地解释了 Apple 的“-iphone”选项ImageOptim的方式和原因
EDIT4:Apple 回应了我的错误报告,确认他们修改了图像以便 iOS 更容易处理,这可能会使它们更大,有意。