除了下面的API之外,有没有办法从PHAsset对象获取文件大小?
- (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset options:(nullable PHImageRequestOptions *)options resultHandler:(void(^)(NSData *__nullable imageData, NSString *__nullable dataUTI, UIImageOrientation orientation, NSDictionary *__nullable info))resultHandler;
我们可以在fileSize对象中获得ALAsset直接,但我在PHAsset对象中找不到它。
提前谢谢。
发布于 2016-07-13 10:20:00
不幸的是,PHAsset不包含这样的信息。另外,如果图像在云中,请注意ALAsset的fileSize
不能正常工作。因此,如果您需要从云和本地存储中获取图像大小的稳定方法,只需使用以下命令:
// Fetch image data to retrieve file size and path
PHImageRequestOptions * options = [[PHImageRequestOptions alloc] init];
options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
options.resizeMode = PHImageRequestOptionsResizeModeExact;
options.synchronous = YES; //Set this to NO if is needed
[[PHImageManager defaultManager] requestImageDataForAsset:photoAsset
options:options
resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info)
{
//(CGFloat)imageData.length returns size in bytes
NSLog(@"%@",[NSString stringWithFormat:@"%.2lf MB", ((CGFloat)imageData.length)/1024/1024]);
}];
以获得一些性能集options.sunchronous = NO;
。
但是,如果您需要更高的性能,您可以通过try从PHAsset
生成一个ALAsset
对象,并从那里获取fileSize
,但请记住,不推荐使用ALAssetLibrary,从云中获取图像的文件大小将无法正常工作。
发布于 2020-03-02 14:37:27
Swift 5
从file size
获取MB中的PHAsset
extension PHAsset {
var fileSize: Float {
get {
let resource = PHAssetResource.assetResources(for: self)
let imageSizeByte = resource.first?.value(forKey: "fileSize") as? Float ?? 0
let imageSizeMB = imageSizeByte / (1024 * 1024)
return imageSizeMB
}
}
}
https://stackoverflow.com/questions/38348771
复制相似问题