如何使用资产库加快图像加载速度?

Posted

技术标签:

【中文标题】如何使用资产库加快图像加载速度?【英文标题】:How Do I speed Up Image Loading Using The Assets Library? 【发布时间】:2011-10-22 00:48:54 【问题描述】:

我正在编写一个应用程序,它是 UIImagePicker 的克隆,但使用 Assets 库。当用户选择一张照片时,加载图像需要一点时间。我注意到,当我使用与我正在开发的功能相同的照片应用程序时,图像加载速度会更快一些。我听说该网站上的另一位响应者提到以下内容以模仿照片应用程序的功能:

“首先加载缩略图(最好使用 dispatch_async) - 这应该非常快。完成后,像上面一样加载全屏图像。这是苹果在 Photo App 中为提供流畅的用户体验所做的。”

有没有人有任何代码示例说明如何实现这一点?我不太确定我明白他的意思。

这也是我用来加载图像的代码(我将图像作为参数传递给另一个视图控制器):

myImage = [UIImage imageWithCGImage:[[myAsset defaultRepresentation] fullScreenImage]];

【问题讨论】:

您还没有加载每个图像的缩略图以显示在您的图像选择器克隆中吗? 【参考方案1】:

ALAsset类有两种获取缩略图的方法:

- (CGImageRef)thumbnail
- (CGImageRef)aspectRatioThumbnail

我敢打赌,它们比获取资产的全屏版本要快。

此外,您可以使用异步操作来包装它们。请务必在主线程中更新 UI。大致是这样的:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    /* obtain the image here */
    dispatch_async(dispatch_get_main_queue(), ^
        /* update screen here */
    );
    [pool drain];
);

如果您需要获取视频的缩略图,您应该使用AVAssetImageGenerator。它有一个异步获取它们的方法。

查找 Apple 示例代码(AVEditDemo 以及可能使用资产库的其他代码)。

【讨论】:

谢谢!对您的解决方案有几个问题。 1)如果我使用 aspectRatioThumbnail,然后放大图像,结果是否会像我使用 fullscreenimage 并缩小它一样。 IE,它产生相同的质量吗? 2)为什么说要在线程中加载它,是不是在加载时会发生窗口转换?如何在加载时发生窗口转换,我会以某种方式将该块用作我上面的代码行中的参数并让它以某种方式返回图像吗? 不行,你应该使用屏幕大小来全屏显示,否则看起来质量不好,模糊。关于图像加载,您可以有一个单独的线程在后台加载缩略图和图像,然后,一旦它获取数据,在主线程中更新屏幕。不是三句话就能解释清楚的;在苹果示例或 github 中搜索示例。

以上是关于如何使用资产库加快图像加载速度?的主要内容,如果未能解决你的问题,请参考以下文章

如何加快我在 sql 中的查询

Visual Studio 2010 - 如何加快大型解决方案的加载速度?

如何从智能相册加载资产? (展览媒体库)

如何有效提升WebView的加载速度

如何在 python 中加快这个图像蒙版创建过程?

AssetLibrary - 如何加载方向校正?