代码之家  ›  专栏  ›  技术社区  ›  Mick

使用PHPhotoLibrary将下载的图像保存到相机卷

  •  1
  • Mick  · 技术社区  · 7 年前

    我触发了一个图像的后台下载。它成功了-定位是指向实际图像的路径。我没有收到错误消息,但照片应用程序中也没有显示图像。我已经设置了NSPhotoLibraryUsageDescription信息。plist键。该应用程序有权访问这些照片。我知道,这段代码会触发另一个后台线程,但这应该不是问题,因为“didFinishDownloadingTo”完成后,“location”文件仍然存在。在将JPG文件存储到相机卷时,还有什么需要注意的吗?

        func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
    
            PHPhotoLibrary.shared().performChanges({
                print("starting")
                let req = PHAssetCreationRequest.forAsset()
                req.isFavorite = true;
    
                let options = PHAssetResourceCreationOptions();
                options.shouldMoveFile = true;
    
                req.addResource(with: PHAssetResourceType.photo, fileURL: location, options: options)
            })
        }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Dan Beaulieu    7 年前

    您正在使用 addResource 不正确。你拥有的不是资源;这是图像。首先,从URL加载数据并将其转换为图像:

    if let url = location, let d = try? Data(contentsOf:url) {
        let im = UIImage(data:d)
    }
    

    现在只需将图像添加为资产:

         PHPhotoLibrary.shared().performChanges({
             PHAssetChangeRequest.creationRequestForAsset(from: im!)
         })
    

    如果你已经说服自己这是可行的,你就可以开始打扮了。