ios JPEG优化

时间:2013-01-30 08:14:03

标签: ios performance optimization jpeg

UITableView中显示了许多图像(600宽度,固定高度),我想对instagram实现类似的视觉效果,如下所示:

  1. 平滑滚动

  2. 图像滚动回屏幕时没有“空白到图像”效果

  3. 内存成本最低

  4. 我正在使用SDWebImage来执行此操作,但是当SDWebImage下载图像时,它会将解压缩的图像数据缓存到内存中,当应用程序收到低内存警告SDImageCache时,这会快速显示但需要大量内存将刷新所有缓存的图像,当显示的图像滚动回到屏幕时,我们得到“空白到图像”。

    我修改了一些代码来实现缓存压缩图像而不是缓存解压缩图像,但新问题出现了:图像解压缩太慢了,这次虽然我们没有得到 “空白到图像”,但只要显示图像,滚动就会延迟。

    最后,我发现滞留是由JPEG解压缩引起的,所以我认为我需要使用GPU解压缩JPEG。但是我不知道怎么做,或者是 以这种方式进行优化是完全错误的。有人可以提供帮助吗?

2 个答案:

答案 0 :(得分:1)

我也不知道你尝试了什么。但根据我以前的项目。我这样做了: 首先使用延迟加载机制(您可以看到LazyTableImages演示:https://github.com/taufikobet/Fast-LazyTableImages)。仅下载或加载可见图像。您必须使用另一个线程下载图像

第二次存储具有合适尺寸的图像,可以处理图像的大小并存储图像使用另一个线程不在主线程中,合适尺寸的图像将为您加载图像节省大量时间,如果存储不合适的大小,则在加载图像时,imageView将处理图像的大小。

存储JPEG时,如果要压缩,可以使用以下方法。

UIKIT_EXTERN NSData *UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality);  // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)

这只是我的经历。

答案 1 :(得分:0)

我最近使用大图像(2000 * 1000)工作很多,所以我做了很多研究。

首先,你可以了解一下这个快速解码jpeg文件的第三部分lib:libjpeg-turbo。使用此库的示例:link Github

以下是解压缩/渲染图像问题的一些信息:查看link1 link2