什么时候在iPhone开发中使用PNG或JPG?

我有一个应用程序,将在幻灯片中显示一堆图像。 这些图像将成为捆绑的一部分,从而与应用程序分发。

所有的图像都是照片或照片等

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

是否有任何指导方针使用哪种格式?

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

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

使用JPG的照片和任何大的,PNG的小和/或旨在显示“像素完美”(如小图标)或作为复合透明覆盖层的一部分,等等。

Apple优化包含在iPhone应用程序包中的PNG图像。 事实上,iPhone使用了一种特殊的编码方式,即颜色字节针对硬件进行了优化。 XCode在构build项目时为您处理这种特殊的编码。 所以,除了尺寸的考虑之外,你看到在iPhone上使用PNG的额外好处。 出于这个原因,绝对推荐使用PNG作为界面的一部分出现的图像(在表格视图,标签等)。

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

文件大小当然是一个因素,但在select图像格式时还有其他一些考虑因素。

有一个重要的事情要考虑与PNG。 如果一个PNG包含在你的Xcode版本中,它将会针对iOS进行优化。 这就是所谓的PNG粉碎。 如果您的PNG在运行时被下载,它将不会被破坏。 压缩的PNG与100%的JPG大致相同。 低质量的JPG比高质量的JPG更好。 所以从性能的angular度来看,从最快到最慢的就是低质量的JPG,高质量的JPG,PNG压缩,PNG。

如果您需要下载PNG,您应该考虑在下载之前压缩服务器上的PNG。

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

Cocoanetics博客发布了不同质量级别的JPG 性能基准 ,包括PNG和不压碎。

从他的结论:

如果你绝对需要一个alpha通道,或者必须使用PNG,那么build议在你的web服务器上安装pngcrush工具,让它处理所有的PNG。 在几乎所有其他情况下,高质量的JPEG将较小的文件大小(即更快的传输)与更快的压缩和渲染相结合。

事实certificate,对于用于UI元素的小图像来说,PNG是很好的select,但是对于像目录或杂志这样的全屏应用程序来说,它们是不合理的。 在那里,你会想要select一个60和80%之间的压缩质量取决于你的源材料。

在获得这一切的显示方面,你会想挂在你曾经绘制过的UIImage实例上,因为这些实例中有一个caching的未压缩版本的文件。 而且,如果您不想在屏幕上出现大图像的视觉暂停,则必须事先强制解压几张图像。 但请记住,这些将需要大量的RAM,如果你过度,可能会导致你的应用程序被终止。 NSCache是​​放置经常使用的图像的好地方,因为当RAM变得稀less时,它会自动处理图像。

不幸的是,我们没有办法知道图像是否还需要解压缩。 此外,图像可能会驱逐未压缩的版本,而不会通知我们这种效果。 这可能是一个很好的雷达,在苹果的错误报告网站提出。 但幸运的是,如果图像已经解压缩,那么访问上面的图像将不会花费时间。 所以你不仅可以做到“及时”,还可以做到“以防万一”。

只是以为我会分享一些减压性能数据…

我正在做一个360度观众的原型 – 一个旋转木马,用户可以旋转从不同angular度拍摄的一系列照片,给人一种能够顺利旋转物体的印象。

我已经将图像数据加载到NSData的数组中,以将文件I / O从等式中移出,但是会立即创buildNSImage。 在接近最大帧速率(〜25 fps)下进行testing并观察仪器时,我看到该应用明显受CPU限制,CPU负载增加约10%,显示〜275 kb png与〜75 kb jpg。

我不能肯定地说,但我的猜测是CPU的限制只是从一般的程序执行和移动内存中的所有数据,但这种图像解压缩是在GPU上完成的。 无论哪种方式和JPG与PNG性能争论看起来赞成JPG,特别是当考虑到较小的文件大小(因此,在内存中至less在一些链接部分,因此较小的对象大小)。

当然,每一种情况都是不一样的,没有什么可以替代testing的。

当使用jpeg vs png时,我发现animation性能有很大的差异。 例如,在UIScrollView中并排放置三个屏幕大小的jpeg,并在iPhone4上水平滚动,会导致滞后和彻底不愉快的animation。 使用相同尺寸的非透明PNG,滚动是平滑的。 即使图像很大,我也从不使用jpeg。

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