PhAsset 获取文件大小 iOS

PhAsset get fileSize iOS

除了以下 API

之外,还有什么方法可以从 PHAsset 对象获取文件大小
 - (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset options:(nullable PHImageRequestOptions *)options resultHandler:(void(^)(NSData *__nullable imageData, NSString *__nullable dataUTI, UIImageOrientation orientation, NSDictionary *__nullable info))resultHandler;

我们可以在 ALAsset 对象中获取 fileSize 目录,但我无法在 PHAsset 对象中找到它。

提前致谢。

很遗憾,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;
但是,如果您需要更高的性能,您可以 PHAsset 创建一个 ALAsset 对象并从那里获取 fileSize,但请记住,ALAssetLibrary 已被弃用,并且获取的文件大小为来自云的图像将无法正常工作。

Swift 5

PHAsset 获取 file size MB:

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
        }
    }
}