2016-07-13 4 views
0

Есть ли способ, чтобы получить размер файла из PHAsset объекта помимо ниже APIPhAsset получить FileSize IOS

- (PHImageRequestID)requestImageDataForAsset:(PHAsset *)asset options:(nullable PHImageRequestOptions *)options resultHandler:(void(^)(NSData *__nullable imageData, NSString *__nullable dataUTI, UIImageOrientation orientation, NSDictionary *__nullable info))resultHandler; 

Мы могли получить directy FileSize в объекте ALAsset, но я не смог найти его в объекте PHAsset.

Заранее спасибо.

ответ

1

К сожалению, PHASset не содержит такой информации. Также обратите внимание, что файл fileSize от ALAset не работает должным образом, если изображение находится в облаке. Так что, если вам нужен стабильный способ извлечения размера изображения как из облака и локального хранилища просто используйте:

// 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 сделать ALAsset объект от PHAsset и получить fileSize оттуда, но имейте в виду, что ALAssetLibrary устарела и получение размера файла изображения из облака не будет работать должным образом.

+0

Я знаю о requestImageDataForAsset, но это занимает много времени. Есть ли какой-либо иной способ, кроме этого API – Ekra

+0

Пожалуйста, взгляните на обновленный ответ –