2008-10-07 82 views
11

是否可以将iPhone XCode项目设置为跳过'CompressResources'构建步骤?跳过XCode iPhone应用程序的'CompressResources'构建步骤

具体而言,我想跳过所有我的.png文件运行pngcrush的阶段,其中许多文件无法在我的应用可以读取的表单中体验到。

编辑:所使用的pngcrush的版本创建png文件,其中包含一个明确防止解码的非标准“强制的,私人的”块。我已经修改了我的png阅读器来处理这些文件,但是我仍然希望每个项目都跳过这一步。 pngcrush的其他副作用之一是它不保存透明像素的颜色值,所以alpha-ed纹理显示在较小的mip级别边缘。

iphone png格式在这里描述:http://modmyi.com/wiki/index.php/Iphone_PNG_images。总之,

  • 跳过CgBI块
  • 跳过zlib的头
  • 交换BGR到RGB信道阶数

编辑:似乎它也premultipliesα,所以:

  • 除以阿尔法
+5

如果有人有兴趣,为什么Xcode的尝试优化PNG以及它究竟做了什么,Jeff Lamarche写了一个很棒的解释。除了解释为什么字节交换和预乘alpha通道有帮助之外,他还谈到了除PNG以外使用其他图像格式时会发生的情况。 http://iphonedevelopment.blogspot.com/2008/10/iphone-optimized-pngs.html – 2009-05-28 19:23:27

+0

在我的测试中,我发现预加重发生在Core Graphics加载函数中。在Xcode中禁用压缩不起作用。 – Plumenator 2011-03-01 08:39:03

回答

10

您可以将“IPHONE_OPTIMIZE_OPTIONS = -skip-PNGs”添加到您的项目设置中以防止png损坏,但要小心,您可能需要分别优化图标和Default.png。

3

如果查看构建输出,您会看到CompressResources步骤运行脚本/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/iphoneos-optimize。这似乎只是一个运行pngcrush并将plists编译为二进制格式的shell脚本。你可以修改这个脚本来不运行pngcrush。

请注意,有人在this thread注意到,如果他们没有通过pngcrush运行他们的图标文件,它不会显示在手机上。

有趣的是,脚本目录中的pngcrush版本有一个-iphone参数。任何人都知道,如果这是标准的或者苹果公司只是随它们的版本一起发布的?

+0

iPhone使用非标准PNG格式,该格式针对硬件上的更快显示进行了优化。在网络上有一对脚本会“从iPhone应用程序中恢复PNG”。 – benzado 2008-10-07 19:47:02

8

iphoneos-optimize脚本可将PNG文件转换为经过优化的非标准格式,以便在iPhone上显示。该脚本将转换任何文件,并在您的应用包中找到它在png扩展名中找到的文件。

我有一个类似的问题,并通过给我的文件扩展名_png(即,前缀为下划线)来解决它。 iphoneos-optimize忽略它,并将其保留为常规的PNG文件。如果你能以这种方式处理它,它可能比构建脚本更安全。

5
  • 打开构建设置
  • 在 “包装” 选择压缩PNG文件
  • 选择 “否”