使用 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!)
})
一旦你说服自己这行得通,你就可以开始装扮它了。
我触发了图片的后台下载。它成功了 - 位置是实际图像的路径。我没有收到任何错误消息,但图像也没有显示在照片应用程序中。我已经设置了 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!)
})
一旦你说服自己这行得通,你就可以开始装扮它了。