【问题标题】:Xcode built-in png compression effectsXcode 内置 png 压缩效果
【发布时间】:2015-05-04 12:59:29
【问题描述】:

我有一个关于 png-8 与 png-24 使用与 Xcode 内置 "image compressor" 的问题。

一些转换成 png-8 的图像可以这样保存,因为 png-24 版本之间的差异不容易被发现。但是有些图像必须存储为 png-24 以便质量保持在高水平......当像 png-8 一样保存时,相同的图像大约小 3 倍,所以我想在使用 png- 时内存消耗会有一些好处8 与 png-24。但我不确定的是:

  • iOS“喜欢”更多 png-24 吗?
  • 在 iOS 中使用 png-8 而不是 png-24 有什么问题吗?首选的选择是什么?
  • 当 Xcode 中的 COMPRESS_PNG_FILES 设置为 YES 时,优化 PS(或诸如 TexturePacker 之类的程序)中的图像有什么好处,因为我认为 Xcode 以某种方式覆盖了我们在 PS 中完成的优化?
  • Xcode 在优化图像时实际上做了什么?

我知道让 Xcode 去做它应该做的事情可能已经绰绰有余了,尤其是对于具有足够内存和 cpu 能力的新设备,但我很好奇“幕后”正在发生什么,这是在浪费时间吗在 Photoshop 中进行优化?

【问题讨论】:

    标签: ios xcode sprite-kit compression png


    【解决方案1】:
    • iOS 是否“喜欢”更多 png-24?

    iOS 当然喜欢它的图像接近它自己的硬件格式(见下文)。但是,它可能不会假定某种格式,或者随意转换图像。这意味着默认的后处理可以将图像从调色板(8 位)转换为真彩色图像,如果应用程序希望其图像包含调色板,那将是破坏性。调色图像有很多好的和适当的用途。

    • 在 iOS 中使用 png-8 而不是 png-24 有什么问题吗?首选的选择是什么?

    颜色深度 - 越高越好,对于某些类型的图像(但不是全部)。尺寸 - 越小越好(决定何时,你自己)。除了 Sangony 状态,PNG 规范足够慷慨,即使在索引模式下也允许超过一个位的 alpha。也就是说,通常的 RGB 调色板也可能是 RGBA,包括 alpha。我不知道更常见的 PNG 格式存在任何“问题”,甚至不常见的格式。

    • 当 Xcode 中的 COMPRESS_PNG_FILES 设置为 YES 时,优化 PS(或诸如 TexturePacker 之类的程序)中的图像有什么好处,因为我认为 Xcode 以某种方式覆盖了我们在 PS 中完成的优化?

    Photoshop 非常不擅长优化 PNG,但话又说回来,它肯定不是最差的之一。 pngcrush(原版)是专门为尝试从 PNG 中挤出最后一个字节而编写的——但在最高设置下,这样做确实需要一段时间。我可能在不知不觉中使用了苹果修改后的pngcrush,因为它默认是“开启”的;我在编译代码的时候没有发现这么大的延迟,所以苹果的默认可能不是最高的可能设置。这表明手动运行pngcrush 可能值得花时间,在这种情况下,您绝对不希望 XCode 撤消它。

    • Xcode 在优化图像时实际上做了什么?

    最明显的“优化”是:将存储顺序从 RGB 切换到 BGR,并通过将 Alpha 通道与颜色通道进行预乘来丢弃它。另见my earlier answer

    对于默认目标设备(iPad、iPhone)来说,存储顺序大概是最佳的。预乘 alpha 是一种常用的优化方法,因为这样实时显示图像所需的计算量更少。 (它也有一些缺点。)

    在没有任何精确测量的情况下,只能推测这些优化在现代硬件上是否真的很重要。所有到“显示”格式的内部转换都可以尽快缓存。

    【讨论】:

    • 感谢您的精彩回答...我会再次仔细阅读以了解所有细节。
    【解决方案2】:

    Xcode 在幕后使用PngCrush 来优化 .png 文件。 Here 也是一篇很好的博文,可以解答你的问题。

    【讨论】:

    • 在这些链接中,我发现使用 png-8 肯定是可能的,但不建议这样做。这是链接:bjango.com/articles/pngcompression 但是没有解释为什么会这样?你有什么想法,为什么会这样?
    【解决方案3】:

    除了 PNG8 和 PNG 24 之间的可用颜色外,主要区别在于透明度方面。

    PNG8 alpha 的外观有时会有些锯齿状,而 PNG24 则要平滑得多。如果你不关心 alpha 并且图像看起来足够好,那么 PNG8 可能是要走的路。

    PNG8 阿尔法

    PNG24 阿尔法

    【讨论】:

    • 是的,在这种情况下我不打扰 alpha。只是尝试将背景图像保存为 png-24 和 png-8,对于这种特殊情况,仔细观察两者并没有明显的区别。但大小有明显差异,即 800kb 与 300kb。所以,我很好奇 iOS/Spritekit 更喜欢什么……
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2013-03-24
    • 2017-01-28
    • 2019-02-22
    • 2011-11-19
    • 1970-01-01
    • 2015-09-02
    相关资源
    最近更新 更多