首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PhotoKit requestImage返回低分辨率图像?

PhotoKit requestImage返回低分辨率图像?
EN

Stack Overflow用户
提问于 2021-06-24 17:58:36
回答 1查看 342关注 0票数 0

当使用Photo获取图像和视频时,我的图像和视频缩略图在我的LazyVGrid中以低分辨率显示。

当我在更大的图像视图中显示图像时,它们也会显示在larger中。

我所有的图像和视频都存储在iCloud上,所以我在PHImageRequestOptions()中设置了isNetworkAccessAllowed = true和deliveryMode = .highQualityFormat。

我尝试过将requestImage方法中的requestImage更改为不同的值,但这也没有改变质量。

我做错了什么?

代码语言:javascript
复制
   @Published var fetchedMediaArray : [MediaAsset] = []

   // model for Assets
   struct MediaAsset: Identifiable, Hashable {
     var id = UUID()
     var image : UIImage
     var selected: Bool
     var asset: PHAsset
   }

   func requestAuth() {/*auth code*/ }

   func fetchPhotosAndVideos() { 
        let opt = PHFetchOptions()
        opt.includeHiddenAssets = false
        opt.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
        opt.predicate = NSPredicate(format: "mediaType == %d || mediaType == %d",
                                             PHAssetMediaType.image.rawValue,
                                             PHAssetMediaType.video.rawValue)
        let req = PHAsset.fetchAssets(with: opt)
        
        DispatchQueue.main.async {
            let options = PHImageRequestOptions()
            options.isSynchronous = true
            options.deliveryMode = .highQualityFormat
            options.isNetworkAccessAllowed = true
            for j in 0..<req.count {
                
                PHCachingImageManager.default().requestImage(for: req[j], targetSize: CGSize(width: 100, height: 100), contentMode: .default, options: options) { (image, _) in
                    let data1 = MediaAsset(image: image!, selected: false, asset: req[j])
                    self.fetchedMediaArray.append(data1)
                   
                 }
             }
         }
     }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-24 18:15:48

当照片从云中下载时,它可能会多次调用完成处理程序。

PHImageManager.requestImage(用于:资产)文档-

讨论 对于异步请求,Photos可能会多次调用结果处理程序块。照片首先调用块以提供适合于在准备高质量图像时临时显示的低质量图像。(如果低质量的图像数据立即可用,则可能在该方法返回之前进行第一次调用)。当高质量的图像准备好后,Photos再次调用您的结果处理程序来提供它.如果图像管理器已经完全缓存了所请求的图像,Photos只调用您的结果处理程序一次。结果处理程序信息参数中的 PHImageResultIsDegradedKey 键指示Photos何时提供临时的低质量图像.

在你的回调处理程序里你能做什么-

  1. 如果您的资产正在以目标/请求的大小(或大于请求的大小)返回,则可以将其视为已完成。
  2. 如果您的资产返回的大小小于目标/请求的大小,您应该检查info参数中的PHImageResultIsDegradedKey,并等待Photos下次调用您的完成。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68120650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档