何时在iPhone开发中使用PNG或JPG?

时间:2010-10-14 01:01:18

标签: iphone ios png jpeg

我有一个应用程序,可以在幻灯片中显示一堆图像。这些图像将成为捆绑包的一部分,因此随应用程序一起分发。

所有图像均为照片或摄影等。

我已经读过,最好使用PNG作为图像格式,但是看到JPG版本要小得多,我宁愿使用它。

是否有任何格式可供使用的指南以及在哪种情况下?

8 个答案:

答案 0 :(得分:137)

PNG是像素完美(无损耗),只需要很少的额外CPU能量即可显示。但是,较大的PNG从存储中读取的时间可能比压缩的图像格式要长,因此显示速度较慢。

JPG的存储空间较小,但有损(数量取决于压缩级别),显示它们需要更复杂的解码算法。但是典型的压缩和图像质量通常足以用于照片。

将JPG用于照片和任何大型照片,将PNG用于任何小尺寸和/或设计为“像素完美”(例如小图标)或作为合成透明覆盖图的一部分等等。

答案 1 :(得分:20)

Apple优化了iPhone应用包中包含的PNG图像。实际上,iPhone使用特殊编码,其中颜色字节针对硬件进行了优化。在构建项目时,XCode会为您处理这种特殊编码。因此,您确实看到了在iPhone上使用PNG的其他好处,而不是考虑其尺寸。因此,绝对建议将PNG用于作为界面一部分出现的任何图像(在表格视图,标签等中)。

至于显示全屏图像(如照片),您仍然可以从PNG中获益,因为它们是无损的,视觉质量应该优于JPG,更不用说解码图像时的资源使用情况。您可能需要降低JPG的质量才能看到文件大小的真正好处,但是您显示的是非最佳图像。

文件大小当然是一个因素,但在选择图像格式时还有其他注意事项。

答案 2 :(得分:11)

有一个重要的事情需要考虑PNG。如果您的Xcode版本中包含PNG,它将针对iOS进行优化。这叫做PNG crush。如果您的PNG在运行时下载,它将不会被粉碎。压碎的PNG与100%JPG大致相同。质量较低的JPG比高质量的JPG运行得更好。因此从性能的角度来看,从最快到最慢,它将采用低质量的JPG,高质量的JPG,PNG Crushed,PNG。

如果你需要下载PNG,你应该考虑在下载之前破坏服务器上的PNG。

http://www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/

答案 3 :(得分:8)

各种质量等级的Cocoanetics blog published a nice iOS performance benchmark JPG和PNG,无论有无破碎。

从他的结论出发:

  

如果您绝对需要Alpha通道或必须使用PNG   建议在您的Web服务器上安装pngcrush工具   让它处理你所有的PNG。在几乎所有其他情况下高品质   JPEG将较小的文件大小(即更快的传输)与   更快的压缩和渲染。

     

事实证明,PNG非常适合您使用的小图像   对于UI元素,但它们不适合用于任何完整的元素   屏幕应用程序,如目录或杂志。在那里你会想要的   根据您的要求选择60%到80%的压缩质量   来源材料。

     

在全部显示方面,您需要坚持下去   你曾经绘制过一次的UIImage实例,因为它们有一个   缓存了文件中未压缩的版本。而你不去的地方   您将拥有的大图像显示在屏幕上的视觉暂停   提前强制解压缩几张图像。但忍受   请注意,这些将占用大量RAM,如果你是   过度使用可能会导致您的应用被终止。 NSCache是​​一个   这是自动放置常用图像的好地方   当RAM变得稀缺时,它负责驱逐图像。

     

遗憾的是,我们没有办法知道是否   图像仍然需要解压缩。图像也可能有   在没有通知我们的情况下驱逐未压缩的版本   影响。这可能是一个很好的雷达,在苹果公司的错误报告中提出   现场。但幸运的是,如上所示访问图像不需要时间   如果图像已经解压缩。所以你不能这样做   只是“及时”,但也“以防万一”。

答案 4 :(得分:7)

我以为我会分享一些减压性能数据...

我正在对360度观众进行一些原型制作 - 一个旋转木马,用户可以旋转从不同角度拍摄的一系列照片,给人一种能够平滑旋转物体的印象。

我已将图像数据加载到NSData数组中,以便将文件i / o从等式中取出,但是即时创建NSImage。以接近最大帧速率(~25 fps)进行测试并在Instruments中观看我看到该应用显然是CPU限制的,并且CPU负载增加约10%,显示~275 kb png&〜 75 kb jpg' s。

我无法肯定地说,但我的猜测是CPU限制只是来自一般程序执行并在内存中移动所有数据,但图像解压缩是在GPU上完成的。无论哪种方式,JPG与PNG性能参数都倾向于支持JPG,特别是当考虑较小的文件大小(因此至少在链的某些部分中内存中较小的对象大小)时。

当然,每种情况都不同,测试无法替代...

答案 5 :(得分:5)

使用jpegs vs png时,我发现动画性能存在巨大差异。例如,在UIScrollView中并排放置三个屏幕大小的jpeg并在iPhone4上水平滚动会导致延迟和完全令人不快的生涩动画。对于相同尺寸的非透明png,滚动是平滑的。我从不使用jpeg,即使图像很大。

答案 6 :(得分:1)

我认为如果您想使用透明,除了PNG之外别无选择。但是,如果您的背景已经不透明,那么您可以使用JPG。这是我能看到的唯一区别

答案 7 :(得分:0)

'使用JPEG照片',如{em>以适当的格式制作艺术品<{3}}中所述。