Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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 UIImage的jpg或png——哪个更有效?_Iphone_Objective C_Cocoa Touch_Uiimage - Fatal编程技术网

Iphone UIImage的jpg或png——哪个更有效?

Iphone UIImage的jpg或png——哪个更有效?,iphone,objective-c,cocoa-touch,uiimage,Iphone,Objective C,Cocoa Touch,Uiimage,我从相机上抓取了一张图像,然后用了一段时间,并在iPhone上以PNG格式保存到磁盘上。我得到了奇怪的崩溃,大概是由于记忆不足 如果我将其保存为PNG或JPG(假设我在JPG的情况下选择note来降低质量),是否会有所不同?具体而言: 如果我将UIImage保存为PNG,那么在我将其从磁盘重新加载后,UIImage是否会使用更多内存 在保存过程中,PNG是否会暂时占用更多内存 我一直认为UIImage是一种格式中立的表示,这不重要,但我想我应该验证一下。我没有任何硬数据,但我认为PNG更可取

我从相机上抓取了一张图像,然后用了一段时间,并在iPhone上以PNG格式保存到磁盘上。我得到了奇怪的崩溃,大概是由于记忆不足

如果我将其保存为PNG或JPG(假设我在JPG的情况下选择note来降低质量),是否会有所不同?具体而言:

  • 如果我将UIImage保存为PNG,那么在我将其从磁盘重新加载后,UIImage是否会使用更多内存
  • 在保存过程中,PNG是否会暂时占用更多内存

我一直认为UIImage是一种格式中立的表示,这不重要,但我想我应该验证一下。

我没有任何硬数据,但我认为PNG更可取,因为苹果似乎在iPhone操作系统中几乎所有地方都使用PNG


但是,如果您已经为编写PNG设置了代码,那么将其更改为编写JPEG应该不会太难,对吗?两种方法都试一下,看看哪一种效果更好。

这取决于你处理的图像类型。如果你处理的是照片图像,JPEG几乎总是比PNG小,没有肉眼可见的细节损失

相反,如果您处理的是高度非摄影图像,如GUI元素或具有大块纯色的图像,则PNG和JPEG的大小将相当,但PNG将无损保存,而JPEG将有损且具有非常明显的瑕疵。如果您有一个非常简单的图像(例如,非常大的恒定颜色块),那么PNG很可能比JPEG小得多,并且也不会有任何压缩瑕疵

将图像保存为PNG或JPEG不应占用太多的瞬时内存。当图像在内存中时,它通常以未压缩的方式存储在内存中,以便可以非常快速地将其绘制到屏幕上,而不是每次渲染时都必须对其进行解压缩。与未压缩图像的大小相比,压缩图像所需的额外临时存储量非常小。如果可以将未压缩的图像放入内存中,则无需担心压缩图像时使用的内存

当然,一旦您将映像写入非易失性存储器中的文件系统并释放内存中的映像,压缩映像的大小就无关紧要了,因为它不再占用主内存。压缩图像的大小只会影响其使用的闪存容量,这可能是一个问题,但不会影响应用程序内存不足的可能性。


我遇到了奇怪的崩溃,可能是因为内存不足



然后停止你现在正在做的事情,首先弄清楚这是否是导致崩溃的真正原因。否则,很有可能您在这里查找错误的问题,修复一个不存在的内存问题,而忽略崩溃的真正原因。如果要修复崩溃,请先找出导致崩溃的原因。跟进“可能”的问题是浪费时间和精力。

尽可能使用PNG。作为编译的一部分,XCode通过一个实用程序(pngcrush)运行所有PNG文件来压缩和优化它们。

我在商店里有一个应用程序,需要在编辑图像时保存图像的中间版本。在原始版本中,我使用PNG格式进行保存,以避免多次加载和保存JPEG造成的质量损失

在2.2软件发布前后的某个时候,苹果对PNG编写代码进行了修改,使得保存某些图像的PNG数据所需的时间延长了很多倍。最后我不得不改为以JPEG格式保存,因为我的应用程序在尝试在退出时保存图像时超时


此外,您还将遇到问题,因为以PNG格式保存不会在UIImage中保留“方向”信息,因此使用内置相机以纵向方向拍摄的照片在保存并重新加载后会出现旋转。

您的崩溃可能是由于UIImagePickerController中的已知内存泄漏造成的

  • 在我将UIImage从中重新加载后,它是否使用了更多内存 如果我将其保存为PNG,则为磁盘? =>否,如果从具有相同分辨率和相同通道数的两个图像导入,则内存大小相同。(如RGBA)
  • 在保存过程中,PNG是否会暂时占用更多内存? =>否,它只影响磁盘内存

  • 这是有道理的。当我保存用iPhone拍摄的照片时,这会导致一个奇怪的问题,但是当使用相对简单的矢量图像的PNG时,即使处理相当大的图像也没有问题。我非常同意这一点。如果你撞车了,你不能只是扔一堆东西然后希望有东西能坚持住