从图库中获取图像缓慢[重复]

Posted

技术标签:

【中文标题】从图库中获取图像缓慢[重复]【英文标题】:Fetching images from Gallery slow [duplicate] 【发布时间】:2019-05-24 17:51:41 【问题描述】:

当我尝试从我的图库中获取 10 张图片时,我需要很长时间才能得到它。

    为什么图像获取异步? 如果我将 requestOptions.deliveryMode 更改为 .fastFormat,它会变快,但质量会下降

我能做的最好的事情是什么?

func fetchPhotos() 
    let fetchOptions = PHFetchOptions()
    fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
    fetchOptions.fetchLimit = 10

    let fetchResult: PHFetchResult = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: fetchOptions)

    if fetchResult.count > 0 
        let totalImageCountNeeded = 10 // <-- The number of images to fetch
        fetchPhotoAtIndex(0, totalImageCountNeeded, fetchResult)
    


func fetchPhotoAtIndex(_ index:Int, _ totalImageCountNeeded: Int, _ fetchResult: PHFetchResult<PHAsset>) 

    let requestOptions = PHImageRequestOptions()
    requestOptions.deliveryMode = .highQualityFormat

    PHImageManager.default().requestImage(for: fetchResult.object(at: index) as PHAsset, targetSize: view.frame.size, contentMode: PHImageContentMode.aspectFill, options: requestOptions, resultHandler:  (image, _) in
        if let image = image 
            // Add the returned image to your array
            self.images += [image]
        

        if index + 1 < fetchResult.count && self.images.count < totalImageCountNeeded 
            self.fetchPhotoAtIndex(index + 1, totalImageCountNeeded, fetchResult)
         else 
            print("Completed array: \(self.images)")
            self.collectionView.reloadData()
        
    )

【问题讨论】:

您可以在“CollectionViewCell”中请求图像,在完成请求之前,您可以显示演示图像,这样它会更快且响应更快。使用 [PHAsset] 而不是 [UIImage] 我应该在哪里使用 phasset 【参考方案1】:

我刚刚测试了您的代码,加载 50 张图片大约需要一秒钟,请检查您的代码中是否存在其他可能会减慢此过程的内容。 如果您的意图是在呈现视图控制器后立即加载所有图像,请考虑在前一个屏幕上加载图像。

【讨论】:

我不明白为什么这些是异步的。我的意思是,例如在 Twitter 上,当你没有互联网连接时,你仍然可以在他们的应用中访问相机胶卷 async 并不意味着正在使用网络,“一个异步函数根本不会阻止当前执行线程继续执行下一个函数”【参考方案2】:

    请求是异步的,因为它需要使用网络。异步只是意味着它需要时间来执行,在应用程序线程的同步执行之外。同步将是它与运行代码的应用程序线程同步执行代码。在这里,线程必须等待网络请求完成。

    您需要在质量和速度之间进行权衡。显然,质量越好的图片越大,下载的时间就越长。

我建议您下载较小的照片块,或者重新考虑您的 UI,以便在任何时候显示更少的图像。您可以代替 10 显示 3 张图片,并通过分页预加载接下来的 3 张。

【讨论】:

嗯,但为什么它需要从画廊下载。图库是本地的,不在网络上。 我的意思是,例如在 Twitter 上,当您没有互联网连接时,您仍然可以在他们的应用程序中访问相机胶卷

以上是关于从图库中获取图像缓慢[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用从图库中选择的新图像更新列表视图 [重复]

将图像从相机保存到数据库[重复]

开发图库视图时 setAdapter 出错 [重复]

从图库中的选定图像中获取图像名称

从图库中获取图像并在 ImageView 中显示

如何在 IONIC 3 中从图库中获取或选择图像