【发布时间】:2015-12-06 04:04:59
【问题描述】:
这看起来很容易,但缺乏文档使得这个问题无法猜测。
我的应用程序的 icloud 驱动器上有图片和视频,我想创建这些资产的缩略图。我说的是 iCloud Drive 上的资产,而不是相机胶卷内的 iCloud 照片流。我说的是真正的 iCloud Drive 文件夹。
与图像相比,从视频创建缩略图“容易”。您只需要 2 周的时间来弄清楚它是如何工作的,考虑到 Apple 编写的文档很差,但图像中的缩略图似乎是不可能的。
我现在拥有的是一组NSMetadataItems,每个都描述了 iCloud 文件夹中的一个项目。
这些是我迄今为止尝试过的不起作用的方法:
方法一
[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];
}];
error = The requested URL was not found on this server. 和 thumbnail = nil
此方法似乎仅适用于视频。我正在尝试这个以防万一。任何与图像等效的方法?
原始方法
NSData *tempData = [NSData dataWithContentsOfUrl:tempURL];
NOPE - 数据 = 无
方法 4
第四种可能的方法是使用ALAsset,但在 iOS 9 上已弃用。
我认为所有这些方法都失败了,因为如果资源是本地的,它们就可以工作(无论错误与否)。关于如何下载图片以便获取缩略图的任何想法?
还有其他想法吗?
谢谢
编辑:经过几次测试,我发现方法 1 是唯一似乎方向正确的方法。这种方法效果不佳,有时会抓取图标,但大部分时间都不起作用。
还有一点是这个。无论人们向我建议什么,他们总是说要下载整个图像以获取缩略图。我不认为这是要走的路。看看如何获取视频缩略图。您无需下载整个视频以获取其缩略图。
所以这个 问题仍然悬而未决。
【问题讨论】:
-
是的,但本文讨论的是
PHAssets。 PH 表示照片框架,我认为该框架无法从 iCloud Drive 中检索内容。我说的是 iCloud 资产。我不确定这两者之间的关系。我从 iCloud 得到的是一堆NSMetadataItems。如果您知道如何将NSMetadataItem转换为 PHAsset 项目,我已经多年了。
标签: ios thumbnails photosframework phasset icloud-drive