Answers:
PNG像素完美(无损),并且只需要很少的额外CPU能量即可显示。但是,大型PNG可能需要比更多压缩图像格式更长的时间才能从存储中读取数据,因此显示速度较慢。
JPG的存储量较小,但有损(其量取决于压缩级别),要显示它们,需要更复杂的解码算法。但是典型的压缩和图像质量通常对于照片来说已经足够了。
使用JPG来处理照片和较大的图片,使用PNG来处理较小的图片和/或设计为“像素完美”的显示(例如,小图标)或作为合成的透明叠加层的一部分等。
Apple优化了iPhone应用程序包中包含的PNG图像。实际上,iPhone使用一种特殊的编码,其中颜色字节针对硬件进行了优化。在构建项目时,XCode会为您处理这种特殊的编码。因此,除了尺寸方面的考虑之外,您还会看到在iPhone上使用PNG的其他好处。因此,绝对建议对出现在界面中的任何图像(在表格视图,标签等中)使用PNG。
至于显示全屏图像(例如照片),您仍然可以从PNG中获得好处,因为它们无损,并且视觉质量应该比JPG更好,更不用说解码图像时的资源使用情况了。您可能需要降低JPG的质量,才能看到文件大小的真正好处,但是随后显示的不是最佳图像。
文件大小当然是一个因素,但是选择图像格式时还要考虑其他因素。
对于PNG,有一件重要的事情要考虑。如果您的Xcode版本中包含PNG,则会针对iOS进行优化。这称为PNG压缩。如果您的PNG在运行时下载,它将不会被压缩。压碎的PNG与100%JPG大致相同。质量较低的JPG比质量较高的JPG更好。因此,从性能的角度来看,从最快到最慢,它会变成低质量JPG,高质量JPG,PNG压碎,PNG。
如果需要下载PNG,则应考虑在下载之前将服务器上的PNG压缩。
http://www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/
该Cocoanetics博客上发表了一个很好的iOS业绩比较基准 在不同的质量水平,和PNG格式JPG格式的,有和没有破碎。
从他的结论:
如果您绝对需要Alpha通道或必须使用PNG,则建议在Web服务器上安装pngcrush工具,并使其处理所有PNG。在几乎所有其他情况下,高质量JPEG将较小的文件大小(即,更快的传输速度)与更快的压缩和渲染功能结合在一起。
事实证明,PNG非常适合用于UI元素的小图像,但不适用于任何全屏应用程序(例如目录或杂志)。在那里,您将希望根据原始材料在60%到80%之间选择压缩质量。
就全部显示而言,您将希望挂接到曾经从中绘制过一次的UIImage实例,因为这些实例中包含文件的缓存未压缩版本。如果您没有视觉上的停顿,就不会在屏幕上出现大图像,则必须提前对两张图像进行解压缩。但是请记住,这些将占用大量RAM,如果您使用过多RAM,则可能导致您的应用终止。NSCache是放置常用映像的好地方,因为这会在RAM不足时自动清除映像。
不幸的是,我们没有任何方法可以知道图像是否仍然需要解压缩。同样,图像可能在未通知我们此效果的情况下驱逐了未压缩的版本。在Apple的错误报告站点上,这可能是一个不错的Radar。但是,幸运的是,如果图像已经解压缩,则如上所示访问图像不会花费时间。因此,您不仅可以做到“及时”,而且可以“以防万一”。
只是以为我会分享一些减压性能数据...
我正在做一个360度查看器的原型制作-旋转木马,用户可以在其中旋转从不同角度拍摄的一系列照片,以给人以能够平滑旋转物体的印象。
我已经将图像数据加载到NSData的数组中,以使文件I / O脱离等式,但可以动态创建NSImage。以接近最大帧速率(〜25 fps)进行测试并在Instruments中观看,我看到该应用程序显然受CPU限制,并且CPU负载大约增加了10%,显示〜275 kb png和〜75 kb jpg。
我不能肯定地说,但我的猜测是CPU限制仅来自一般程序的执行以及内存中所有数据的移动,但是图像解压缩是在GPU上完成的。无论哪种方式,JPG与PNG的性能争论似乎都倾向于JPG,尤其是当考虑到较小的文件大小(因此,至少在链的某些部分中,内存中的对象的大小较小)时。
当然,每种情况都不尽相同,测试无可替代...