【问题标题】:Png's in iOS - png's in bundle vs downloaded - png8 vs png24iOS中的PNG - 捆绑中的PNG与下载的PNG - png8与png24
【发布时间】:2014-01-08 22:37:50
【问题描述】:

我正在编写一个 iOS 应用程序,并且有一些关于使用 png 和性能的问题,但我找不到任何答案。

我的应用程序使用来自 2 个来源的 png,其中一些位于应用程序包中,而另一些则从 Internet 下载并存储在本地。应用程序包中的那些,我知道 xCode 在编译应用程序时会针对 iOS 优化它们(字节交换和预乘 Alpha)。我有以下关于从互联网上下载的 png 的问题。

1) 如果图像是在捆绑包中下载的,那么在 iOS 中使用 pngs 是否还能获得性能优势。 xCode 优化能否以某种方式应用于下载的图像?

2) 除了文件大小之外,使用 png8 和 png24 有什么优点(或缺点)吗?从本地文件扩展时它们会占用更少的内存吗?扩展它们是否需要更少的努力?动画有性能提升吗?或者是更小的文件大小和更好的下载时间的唯一好处?

提前感谢您的任何回答。

保罗

【问题讨论】:

    标签: ios performance png


    【解决方案1】:
    1. PNG 优化是由 Apple 自己的 pngcrush 版本完成的(尽管其作者声明

      [...] 2. 修改后的版本必须清楚地标明,不得误认为是原始二进制文件或源代码。 (http://optimate.dl.sourceforge.net/project/pmt/pngcrush/1.7.70/pngcrush-1.7.70-HELP.txt)

      -- 但 Apple 并不关心这些细节)。 XCode 在编译您的源代码时调用pngcrush。编译完成后,XCode 与后来下载的图像无关。但是,您可以在上传新图像之前应用 Apple 的 pngcrush 来“优化”新图像。在我看来,这是否值得努力是值得怀疑的。

    2. 视情况而定,连续四次。 (如果我没记错的话。) 8 位 PNG 比 24 位 PNG 小 3 倍。使用单个字节而不是 3 或 4(RGB、RGBA)应该更快;自然它使用更少的内存。它主要(或可能仅)取决于图像的内容。摄影图像使用 PNG 的算法压缩得很糟糕,并且在以 8 位颜色索引模式保存时会受到颜色量化的影响。典型的“计算机”图像(例如,文本编辑器的快照)具有相同颜色的大面积区域可能会非常快速地解压缩。

    如果您打算使用 8 位 PNG,则不使用 Apple 修改版本应用的“优化”。它的主要修改是重新排列 RGB(A),大概是为了与 iPhone/iPad 的显示对齐。 (它的次要目的似乎是使图像无效为有效的 PNG。)

    【讨论】:

    • 一个有趣的 pngcrush 链接,带有一个 CAUTION 块,讨论 Apple 的变化:code.google.com/p/imageoptim/source/browse/pngcrush/… 就我个人而言,我相信你对 Apple 有点苛刻 - 他们不会以任何方式分发 pngcrush 来宣传他们的版本 - 它深埋在 Xcode 中,只有 curios 开发人员才会使用它。如果他们将他们的版本放在 /usr/bin 中,是的,那么没有分歧。
    • 谢谢@Jongware,这很有帮助。如果我正确读取了数字 2,那么当 iPhone 将图像加载到内存中时,作为 png8 的图像将比与 png24 相同的图像使用更少的内存。对吗?
    • @Paul:未知。当读入活动内存时,图像可能会被翻译成a.s.a.p。到 24 位 无论如何 因为这是显示器所需要的。在这种情况下,唯一节省的内存是静态存储,并且您会受到(微小的)重新着色惩罚,当然还有全彩版本使用的内存。
    • @DavidH:我反对的不是他们对pngcrush 的修改,而是他们对“PNG”格式的私人修改!如果他们至少使用不同的文件扩展名,我会更少介意。
    • Jongware 和@David H 的回答都非常有帮助。我将此标记为正确答案,因为我觉得它在回答这两个问题时更完整。谢谢。
    【解决方案2】:

    当您将它们放入捆绑包中并在 Xcode 中打开“压缩 png”选项时,Xcode 会重新格式化 png 以使它们更快地加载(但通常比原始文件大,SO 上有很多关于此行为的线程!) .

    如果您真的很好奇,请查看应用程序的构建文件夹,并检查修改后的 png。您将看到的选项是当前适用于 iOS 的最佳选项。事实上,我隐约记得 SO 上的一个帖子讨论了您需要为某些图像转换程序(如 ImageMagik)提供哪些选项来模仿 iOS 正在做的事情(但我现在找不到它)。

    编辑:正如 Jongware(其他答案)所建议的那样,Xcode 似乎正在使用 pngcrush 的修改版本。 link 给评估这些图像选项的人。

    【讨论】:

      猜你喜欢
      • 2020-06-15
      • 1970-01-01
      • 2012-04-28
      • 2015-09-02
      • 1970-01-01
      • 2014-02-02
      • 2012-07-09
      • 1970-01-01
      • 2011-04-22
      相关资源
      最近更新 更多