这看起来很简单,但缺乏文档使得这个问题无法猜测。
我在应用的iCloud驱动器上有照片和视频,并且想要创建这些资产的缩略图。我谈论的是iCloud驱动器上的资产,而不是相机胶卷中的iCloud照片流。我说的是真正的iCloud驱动器文件夹。
与图像相比,从视频中创建缩略图相对“容易”。你只需要两个星期来弄清它的工作原理,考虑到苹果写的糟糕文档,但似乎无法从图像中创建缩略图。
现在我有一个NSMetadataItem数组,每个元素都描述了iCloud文件夹中的一个项目。
至今为止我尝试过的方法无法实现:
这种方法的效果非常棒。你准备好了吗?我们开始吧:
我在应用的iCloud驱动器上有照片和视频,并且想要创建这些资产的缩略图。我谈论的是iCloud驱动器上的资产,而不是相机胶卷中的iCloud照片流。我说的是真正的iCloud驱动器文件夹。
与图像相比,从视频中创建缩略图相对“容易”。你只需要两个星期来弄清它的工作原理,考虑到苹果写的糟糕文档,但似乎无法从图像中创建缩略图。
现在我有一个NSMetadataItem数组,每个元素都描述了iCloud文件夹中的一个项目。
至今为止我尝试过的方法无法实现:
METHOD 1
[fileURL startAccessingSecurityScopedResource];
NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] init];
__block NSError *error;
[coordinator coordinateReadingItemAtURL:fileURL
options:NSFileCoordinatorReadingImmediatelyAvailableMetadataOnly
error:&error
byAccessor:^(NSURL *newURL) {
NSDictionary *thumb;
BOOL success = [newURL getResourceValue:&thumb forKey:NSURLThumbnailDictionaryKey error:&error];
UIImage *thumbnail = thumb[NSThumbnail1024x1024SizeKey];
}];
[fileURL stopAccessingSecurityScopedResource];
这种方法的效果非常棒。你准备好了吗?我们开始吧:
success = YES
,error = nil
和thumbnail = nil。
另一种方法
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:fileURL
options:nil];
AVAssetImageGenerator *imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
imageGenerator.appliesPreferredTrackTransform = YES;
CMTime time = CMTimeMake(0, 60); // time range in which you want
NSValue *timeValue = [NSValue valueWithCMTime:time];
[imageGenerator generateCGImagesAsynchronouslyForTimes:@[timeValue] completionHandler:^(CMTime requestedTime, CGImageRef image, CMTime actualTime, AVAssetImageGeneratorResult result, NSError * error) {
thumbnail = [[UIImage alloc] initWithCGImage:image];
}];
错误 = 在此服务器上未找到请求的 URL。
和缩略图 = 空
这个方法似乎仅适用于视频。我只是试一下。有没有类似于此方法的图像等效方法?
原始方法
NSData *tempData = [NSData dataWithContentsOfUrl:tempURL];
NOPE - 数据 = 空
方法4
第四种可能的方法是使用ALAsset
,但在iOS 9上已被弃用。
我认为所有这些方法都会失败,因为它们只适用于本地资源(无论是否存在错误)。有什么想法可以下载图像,以便获取缩略图?
还有其他想法吗?
谢谢
编辑:经过几次测试后,我发现方法1似乎是唯一朝着正确方向的方法。这种方法效果不好,有时会抓取图标,但大多数情况下不起作用。
另一个观点是这样的。无论人们建议我什么,他们总是说要下载整个图像才能获得缩略图。我不认为这是正确的做法。只需看看如何获取视频缩略图即可。您不需要下载整个视频即可获取其缩略图。
所以这个问题仍然没有答案。
PHAssets
。PH代表照片框架,我认为该框架无法从iCloud Drive检索内容。我在谈论iCloud资产。我不确定这两者之间的关系。我从iCloud得到的是一堆NSMetadataItem
。如果您知道如何将NSMetadataItem
转换为PHAsset项目,我非常感兴趣。 - Duck