2009-04-29 58 views
9

我从相机胶卷中抓取图像,然后使用它一段时间,并将其作为iPhone上的PNG保存到磁盘。我正在发生奇怪的事故,大概是由于内存不足。jpg或png用于UIImage - 哪种效率更高?

如果我将它保存为PNG或JPG(假设我选择注释以降低JPG格式的质量),它有什么区别吗?具体来说:

  • 是更多的内存,然后使用UIImage后我重新加载它的磁盘,如果我把它保存为PNG?
  • 是否有可能因为PNG在保存过程中暂时使用更多内存而进行保存?

我一直假设UIImage是一个格式中立表示,它应该没关系,但我认为我应该验证。

回答

10

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

在2.2软件版本发布的某个时候,Apple向PNG写入代码引入了一项更改,使得从某些图像保存PNG数据需要多次。我最终不得不改变为以JPEG格式保存,因为我的应用程序在退出时尝试保存图像时超时。

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

0

我没有任何硬数据,但我认为PNG是可取的,因为苹果似乎几乎在iPhone操作系统中随处使用PNG。

但是,如果您已经设置了用于编写PNG的代码,那么将它改为写入JPEG应该不会太难吗?试试这两种方法,看看哪个更好。

5

这取决于你正在处理的图像类型。如果您正在处理照片图像,JPEG几乎总是会比PNG小,并且没有可察觉的细节损失,如人眼所见。相反,如果您要处理的是高度非照片图像(如GUI元素或具有大块纯色的图像),那么PNG和JPEG的大小可比,但PNG将无损保存,而JPEG将是有损的,并有非常明显的文物。如果你真的有一个真的简单的图像(非常大的恒定颜色块,例如),那么PNG很可能会比JPEG小得多,并且不会有任何压缩伪像。

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

当然,一旦您将图像写入文件系统的非易失性存储并释放内存映像,压缩映像的大小并不重要,因为它不占用内存主要记忆。压缩映像的大小仅影响其使用的闪存存储量,这可能是一个问题,但它不会影响您的应用程序运行内存不足的可能性。

+0

这很有道理。当我保存用iPhone拍摄的照片时,会导致奇怪的问题,但是当使用相对简单的矢量图像的PNG时,即使是非常大的图像也没有问题。 – 2009-04-29 05:25:00

24

我正在奇怪崩溃,这可能是由于内存不足


然后停止自己在做什么,现在和首先要弄清楚,如果这实际上是导致事故的原因。否则,你很有可能在这里追查错误的问题,修复一个不存在的内存问题,而忽略崩溃的真正原因。如果你想修复崩溃,首先确定是什么导致了崩溃。跟进什么“大概”这个问题是浪费时间和精力的秘诀。

+2

不能同意这一点。如果你发生崩溃,你不能只是扔一堆东西,希望有一些东西粘在上面 – rpetrich 2009-04-29 18:15:36

0

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

0
  1. 是更多的内存然后由UIImage的后,我重新加载它关闭 盘的,如果我救它作为一个PNG? =>不,如果您从2张具有相同分辨率和相同通道数的图像导入,则它的内存大小相同。 (如RGBA)
  2. 是否有可能因为PNG在保存过程中暂时使用更多内存而进行保存? =>不,它只影响你的磁盘内存。
相关问题