我正在编写iOS应用程序并且对使用png和性能有一些疑问,我找不到任何答案。
我的应用程序使用来自2个来源的png,其中一些来自应用程序包,其他来自互联网并从本地存储。应用程序包中的那些我有我的头,我知道xCode在编译应用程序时为iOS优化它们(Byte Swapping和Premultiplied Alpha)。关于从互联网上下载的png,我有以下问题。
1)如果图像是在捆绑中下载的,那么你是否仍然可以从iOS中使用png获得性能优势。可以以某种方式将xCode优化应用于下载的图像吗?
2)除文件大小外,使用png8 vs png24还有什么优点(或缺点)?从本地文件扩展时,它们会占用更少的内存吗?扩展它们需要花费更少的精力吗?动画是否有任何性能提升?或者是从较小的文件大小和更好的下载时间中获得的唯一收益?
提前感谢您的任何答案。
保
答案 0 :(得分:3)
当你把它们放在捆绑包中,并打开Xcode中的“compress png”选项时,Xcode会重新格式化png以使它们加载更快(但通常比原来的要大,在SO上这个行为上有很多线程!) 。
如果您真的很好奇,请查看应用的构建文件夹,并检查修改后的png。您将看到的选项是iOS当前的最佳选项。事实上,我依旧回忆起SO上的一个主题,讨论你需要为某些图像转换程序(如ImageMagik)提供哪些选项来模仿iOS正在做什么(但我现在找不到它)。
编辑:正如Jongware(其他答案)所暗示的那样,似乎Xcode正在使用pngcrush的修改版本。评估这些图像选项的人link。答案 1 :(得分:3)
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
来“优化”新图像。在我看来,这是否值得努力是值得怀疑的。
这取决于,连续四次。 (如果我正确计数。)8位PNG比24位PNG小3倍。使用单个字节而不是3或4(RGB,RGBA)应该更快;当然它使用更少的内存。它主要(或可能,仅)取决于您的图像的内容。使用PNG算法会严重压缩照片图像,并且在以8位颜色索引模式保存时会受到颜色量化的影响。典型的“计算机”图像 - 比如文本编辑器的快照 - 具有相同颜色的大区域可能会非常快速地解压缩。
如果 要使用8位PNG,则不会使用Apple修改版本适用的“优化”。它的主要修改是重新排列RGB(A),大概是为了与iPhone / iPad的显示器对齐。 (它的次要目的似乎是使图像无效为有效的PNG。)