UIImage的jpg或png - 效率更高?

Ste*_*lat 9 iphone cocoa-touch objective-c uiimage

我从相机胶卷中抓取一张图像,然后使用它一段时间,并将其作为iPhone上的PNG保存到磁盘上.我得到了奇怪的崩溃,大概是因为内存不足.

如果我将其保存为PNG或JPG(假设我选择注意降低JPG案例的质量)会有所不同吗?特别:

  • 如果我将它保存为PNG,那么当我将其从磁盘重新加载后,UIImage会使用更多的内存吗?
  • 在保存过程中,作为PNG保存的行为是否可能会暂时消耗更多内存?

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

Tom*_*ton 25


我得到了奇怪的崩溃,大概是因为内存不足


然后停止你现在正在做什么,并首先弄清楚这是否真的是崩溃的原因.否则,你很有可能在这里追逐错误的问题,修复一个不存在的内存问题而忽略了崩溃的真正原因.如果你想修复崩溃,首先要弄清楚导致崩溃的原因.跟进"可能"的问题是浪费时间和精力的方法.

  • 不能同意这一点.如果你遇到了崩溃,你不能只是扔掉一堆东西,希望有些东西可以帮助你 (2认同)

Mar*_*sey 10

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

在2.2软件版本的某个时候,Apple引入了对PNG编写代码的更改,因此从某些图像中保存PNG数据需要花费很多倍的时间.我最终不得不改为以JPEG格式保存,因为我的应用程序在尝试退出时保存图像时超时.

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


Ada*_*eld 5

这取决于您正在处理的图像类型.如果你正在处理摄影图像,JPEG几乎总是比PNG小,没有人眼可以看到的明显的细节损失.

相反,如果你处理高度非摄影图像,如GUI元素的图像,或者纯色的大块,然后PNG和JPEG将在尺寸不相上下,但PNG无损地将保存,而JPEG会有损和有非常明显的文物.如果你有一个非常简单的图像(例如非常大的恒定颜色块),那么PNG很可能比JPEG小得多,并且再次没有任何压缩伪像.

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

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