iOS JPEG 优化

标签 ios performance optimization jpeg

<分区>

UITableView中显示有大量图片(600宽度,固定高度),我想实现类似instagram的视觉效果,如下:

  1. 平滑滚动

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

  3. 内存消耗最少

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

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

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

最佳答案

我也不知道你尝试过什么。但根据我之前的项目。我是这样做的: 首先使用延迟加载机制(您可以查看 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)

这只是我的经验。

关于iOS JPEG 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14599350/

上一篇:ios - 有没有办法使用我的 ios 应用程序将图像发布到 google+ 墙上?

下一篇:ios - Facebook iOS 应用 Newsfeed UITableViewCell,他们是如何实现的?

相关文章:

ios - 无法从服务器下载附件作为响应

ios - 查询 SQLite 数据库以获取 X'3D98F71F3CD9415BA978C010b1CEF941 形式的 GUID

java - 在java中比较一个大列表与另一个小列表的最佳方法?

objective-c - 在 iOS6 中处理通讯簿联系人时的内存泄漏

c# - .NET 最快的 PNG 解码器

javascript - $rootScope.$new 与 $scope.$new 的性能

android - 处理大型位图

c - 我们应该使用宏、内联函数还是只使用普通函数并信任编译器?

python - 如何在 Django 中有效地使用 _set.all()?

objective-c - FetchedResultsController 看不到数据导入后 managedObjectContext 的变化