簡體   English   中英

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; .
但是,如果你需要更多的性能,您可以嘗試做一個ALAsset從對象PHAsset並獲得fileSize從那里,但請記住,ALAssetLibrary已被棄用,並從雲中獲取圖像的文件大小將無法正常工作。

斯威夫特 5

PHAsset獲取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.0*1024.0)
            return imageSizeMB
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM