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

save downloaded image to camera roll with PHPhotoLibrary

我触发了图片的后台下载。它成功了 - 位置是实际图像的路径。我没有收到任何错误消息,但图像也没有显示在照片应用程序中。我已经设置了 NSPhotoLibraryUsageDescription Info.plist 键。该应用程序有权访问照片。我知道,这段代码会触发另一个后台线程,但这应该不是问题,因为 "location" 文件在 "didFinishDownloadingTo" 完成后仍然存在。将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)
        })
    }

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

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

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

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

一旦你说服自己这行得通,你就可以开始装扮它了。