特定的 PNG 压缩类型是否与 macOS Cocoa 应用程序不兼容?

Are specific PNG compression types incompatible with macOS Cocoa apps?

我们最近遇到了一些资产图像问题,其中 Retina @2x 版本被用于非 Retina 设备。存在资产的 Retina 和非 Retina 版本。我们已经将问题追溯到压缩,所以我们现在可以避免它,但如果有人有其他见解,我很乐意听取他们的意见。

左侧的图标显示了它们在 运行 应用程序中的呈现方式。 Retina 资产正在非 Retina 屏幕上使用,因此它们被缩小到 50%,这导致了一些模糊的边缘。

右边的图标是原始资源。

这只发生在某些资产上。大多数应用程序都可以。我们一直在使用 ImageOptim 来压缩应用程序中使用的 PNG。 ImageOptim 正在对资产使用各种压缩组合。这些是常见的最佳结果:

有问题的资产似乎都在使用 PNGOUT+Zopfli,但并非所有使用 PNGOUT+Zopfli 的资产都是坏的。不过,我对这个诊断不是 100% 有信心。

鉴于问题并不总是很容易发现,而且我也不知道到底出了什么问题,很遗憾,我们决定不压缩 Mac 应用中使用的新 PNG。真可惜,因为 space 节省的钱很好。

我们尝试了几种不同的 Xcode 项目设置,包括打开和关闭 Combine High Resolution Artwork

我想要一些答案,但我也在这里发帖,所以有些信息可能会帮助其他人解决这个问题,即使我只有部分解决方案。


你以前见过这个问题吗?

如果你看到了,有解决办法吗?

可在此处找到有关此错误的更多信息:

OS X doesn't like mixed types of PNGs.

Retina version of an image always used on non-retina display

看起来没有解决办法,只能对 PNG 对强制使用相同的 color_type

默认情况下,使用颜色类型和分辨率 [1] 选择 NSImage 表示。对于 PNG 文件,在某些情况下,更通用的颜色类型会生成更小的文件。这就是导致表示之间混合颜色类型的原因。

您需要将 prefersColorMatch 设置为 NO。有 用户定义的运行时属性 可以在不离开 Interface Builder 的情况下完成。这将解决问题。

How to set prefersColorMatch in Interface Builder