【问题标题】:iOS: how to reduce size of large PNG filesiOS:如何减小大型 PNG 文件的大小
【发布时间】:2012-03-26 06:30:11
【问题描述】:

我目前正在为新 iPad 优化我的 iOS 应用程序。不幸的是,通过为 iPad 视网膜显示器添加启动图像,我的 ipa 的大小从 1.2MB 增长到 5.5MB,主要是因为 1536 x 2008(纵向)和 2048 x 1496(横向)的两个 PNG 图像)。这些图像的大小分别为 1.9MB 和 1.7MB。

头像可以在这里看到:http://uploads.demaweb.dk/iPadPortrait.png

您可能会注意到,背景是固定的图案,但遗憾的是,这似乎不是很可压缩。我进一步尝试使用ImageOptim 压缩图像,但在Xcode 在存档期间压缩图像后它没有任何区别。在网上搜索我注意到,有些人劝阻在 Xcode 中关闭 PNG 压缩。

有什么我可以做的吗?将图像中的图案更改为纯色不是解决方案,因为它应该看起来像我的 iOS 视图中的背景。但奇怪的是,支持新 iPad 会增加大约 4MB 的大小。

【问题讨论】:

    标签: objective-c cocoa-touch ipad ios5 png


    【解决方案1】:

    我能够使用pngquant(64 种颜色,带有轻微抖动,在普通屏幕上几乎看不到,在 Retina 分辨率下应该完全不可见)和 ImageOptim 将其缩小到 633KB。

    是的,您需要disable Xcode's conversion 以避免 Xcode 通过将文件转换为 ARGB 来膨胀文件。

    注意:接受的答案中引用的文章对于声称的速度差异根本没有提供基准
    它还包含更正,即可以使用 ImageOptim for iOS 应用程序优化图像。

    【讨论】:

    • 在 XCode 中禁用 PNG 压缩是否安全?在 XCode 中压缩的 PNG 在 iOS 设备上的加载速度会更快(即使它的大小更大)?如果是这样,那就是性能和应用程序大小之间的权衡。
    • 这当然是安全的,因为 iOS 支持标准 PNG。我评论了较早的答案,我认为 iOS-ARGB 格式的性能优势被夸大了,因为 RGBAARGB 转换是微不足道的。 OTOH 加载和解压缩更多数据并不是那么简单,所以我想说无论格式如何,更小的文件都更快。
    【解决方案2】:

    我正在使用一个很棒的工具,叫做ImageOptim

    它包含许多工具,可以显着压缩您的 png 文件(在我的情况下,它在 25% 到 50% 之间)。

    要记住的一件事是禁用 Xcode 的 PNG 优化(如网站上所述)

    编辑: 只需将图像拖到 imageOptim 窗口,优化就会自动开始

    【讨论】:

    • ImageOptim 用于常规 GUI 元素,然后为任何大型纹理/背景添加 ImageAlpha,您将获得惊人的尺寸缩小
    【解决方案3】:

    我也为此苦苦挣扎,遗憾的是无能为力。

    为了显着提高 iOS 应用的绘图性能, Xcode 在构建时会重新压缩 PNG 文件。它预乘了 alpha channel 和 byte 将红色、绿色和蓝色通道交换为 依次排列蓝色、绿色和红色。结果针对 iOS 进行了优化 目的,但作为副作用,ImageOptim 的工作被撤消了……

    Source

    【讨论】:

    • 这与我找到的源完全相同——他们建议不要在 Xcode 中禁用压缩。也许iOS用户从现在开始应该期待应用程序的大小会急剧增加。
    • @DennisMadsen 我完全同意,既然“新 iPad”现在是视网膜显示屏,想象一下当您需要为 iPad 放入高清图形时,应用程序会变得多么大。我希望苹果意识到这一点并做出改变。
    • 我认为“渲染”部分是对问题的错误描述。 GPU 不支持调色板 8 位等格式,因此必须在渲染前完成转换(很可能是在解压缩 PNG 时),因此不会影响 渲染 速度。从 8 位/RGB/RGBA 到 ARGB 的转换很简单,并且可能以 RAM 速度 (Gb/s) 完成。 OTOH 要从磁盘读取的较大文件和要解压缩的更多数据可能会产生更大的影响。
    • 这里的基准测试表明“显着提高绘图性能”并没有发生:cocoanetics.com/2011/10/avoiding-image-decompression-sickness绘图 性能对于所有格式都是相同的,即使是 JPEG(较小的文件加载速度更快,无论格式如何)。
    最近更新 更多