Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iPhone开发中何时使用PNG或JPG?_Iphone_Ios_Png_Jpeg - Fatal编程技术网

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

在iPhone开发中何时使用PNG或JPG?,iphone,ios,png,jpeg,Iphone,Ios,Png,Jpeg,我有一个应用程序,可以在幻灯片中显示一组图像。这些图像将是捆绑包的一部分,因此随应用程序一起分发 所有的图像都是照片或照片等 我已经读到,它更倾向于使用PNG作为图像格式,但鉴于JPG版本将更小,我宁愿使用它 是否有使用哪种格式以及在哪种情况下使用的指导原则?我认为如果您想使用透明,除了PNG,您别无选择。但是,如果你的背景已经是不透明的,那么你可以使用JPG。这是我能看到的唯一区别,PNG是像素完美的(无损耗的),并且只需要很少的额外CPU能量来显示。然而,与压缩图像格式相比,从存储器读取大P

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

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

我已经读到,它更倾向于使用PNG作为图像格式,但鉴于JPG版本将更小,我宁愿使用它


是否有使用哪种格式以及在哪种情况下使用的指导原则?

我认为如果您想使用透明,除了PNG,您别无选择。但是,如果你的背景已经是不透明的,那么你可以使用JPG。这是我能看到的唯一区别,PNG是像素完美的(无损耗的),并且只需要很少的额外CPU能量来显示。然而,与压缩图像格式相比,从存储器读取大PNG可能需要更长的时间,因此显示速度较慢

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


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

苹果优化iPhone应用程序包中包含的PNG图像。事实上,iPhone使用了一种特殊的编码,其中颜色字节针对硬件进行了优化。当您构建项目时,XCode会为您处理这种特殊编码。因此,除了尺寸方面的考虑之外,在iPhone上使用PNG还有其他好处。因此,对于作为界面的一部分(在表视图、标签等中)出现的任何图像,绝对建议使用PNG

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


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

我只是想分享一些解压性能数据

我正在做一个360度查看器的原型——一个旋转木马,用户可以旋转从不同角度拍摄的一系列照片,给人一种能够平稳旋转物体的印象

我已经将图像数据加载到一个NSData数组中,以使文件I/o不在等式中,但动态创建NSImage。在接近最大帧速率(约25 fps)的情况下进行测试,并在仪器中观察,我发现该应用程序明显受到CPU限制,CPU负载增加约10%,显示约275 kb png而不是约75 kb jpg

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


当然,每种情况都是不同的,测试是无可替代的…

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

不同质量级别的JPG和PNG,有无压碎

根据他的结论:

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

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

在展示这一切方面,你需要坚持下去 UIImage实例,因为这些实例具有 缓存文件的未压缩版本。在你不知道的地方 显示在屏幕上的大图像的视觉暂停 提前强制解压缩几个图像。但请忍耐 请注意,这些将需要大量的RAM,如果您是 过度使用可能导致应用程序终止。NSCache是一个 放置常用图像的绝佳位置,因为这会自动 当RAM变得稀少时,负责逐出图像

不幸的是,我们没有任何办法知道 图像是否仍需要解压缩。还有一个图像可能有 在没有通知我们的情况下,逐出了未压缩的版本 效果。这可能是一个很好的雷达提高对苹果的错误报告 地点。但幸运的是,访问上面显示的图像不需要时间 如果图像已解压缩。所以你可以不这样做 不仅“及时”,而且“以防万一”


有一件重要的事情要考虑PNG。如果Xcode构建中包含PNG,它将针对iOS进行优化。这叫做PNG压碎。如果在运行时下载PNG,它将不会被压碎。压碎的PNG与100%JPG运行情况大致相同。质量较低的JPG比质量较高的JPG运行得更好