使用新的 Photo 框架,我可以使用 requestImageDataForAsset
访问 PHAssets 的 NSData
。我还可以使用返回的 info NSDictionary
的 PHImageFileURLKey
访问文件 URL。
[[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
//imageData contains the correct data for images and videos
NSLog(@"info - %@", info);
NSURL* fileURL = [info objectForKey:@"PHImageFileURLKey"];
}];
这适用于图像和普通视频。
然而,当 Assets 为PHAssetMediaSubtypeVideoHighFrameRate(慢动作视频)时,返回的数据对应包含视频第一帧的JPG文件(NSData、dataUTI和info字典都指向同一个jpg文件) .例如,这是为慢动作视频返回的 URL 和 dataUTI:
PHImageFileURLKey = "file:///var/mobile/Media/PhotoData/Metadata/DCIM/100APPLE/IMG_0642.JPG"; PHImageFileUTIKey = "public.jpeg";
为什么会这样? 如何访问慢动作视频的 NSData/NSURL 而不是此 JPG 预览?
最佳答案
在疯狂测试每一个选项后,我发现了问题所在。
负责为慢动作视频返回 JPG 图像的是 PHImageRequestOptions.version
属性的默认 PHImageRequestOptionsVersionCurrent
值。
只需将版本分配给 PHImageRequestOptionsVersionUnadjusted 或 PHImageRequestOptionsVersionOriginal 即可返回原始慢动作视频。
PHImageRequestOptions * imageRequestOptions = [[PHImageRequestOptions alloc] init];
imageRequestOptions.version = PHImageRequestOptionsVersionUnadjusted;
// or
imageRequestOptions.version = PHImageRequestOptionsVersionOriginal;
我认为这是一种意外行为,因为我不希望慢动作视频的“当前”版本是静止图像(可能是应用了慢动作效果的视频,但不是照片)。
希望这对某人有用。
关于ios - 如何使用 PhotoKit 访问慢动作视频的 NSData/NSURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26152396/