需求:選擇圖片或者拍照之后得到的圖片要顯示其名稱以及大小
實現(xiàn):
使用PHAsset
如果我們使用TZImagePickerController那么我們會得到裝有PHAsset對象的數(shù)組,我們可以通過PHAsset獲取到圖片的名稱以及大小饥臂。
代碼:
PHAsset * asset = imageArray[i];
PHImageManager * imageManager = [PHImageManager defaultManager];
[imageManager requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
StrongSelf
NSURL *url = [info valueForKey:@"PHImageFileURLKey"];
NSString *str = [url absoluteString]; //url>string
NSArray *arr = [str componentsSeparatedByString:@"/"];
NSString *imgName = [arr lastObject]; // 圖片名字
NSInteger length = imageData.length; // 圖片大小夺刑,單位B
UIImage * image = [UIImage imageWithData:imageData];
}];
如果我們利用系統(tǒng)相機進行拍照或直接獲取系統(tǒng)圖片得到的是UIImage對象愉棱,那么我們就要通過UIImage對象來獲取圖片的名稱和大小了魂莫。
代碼:
UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage];
NSData * imageData = UIImageJPEGRepresentation(image, 0.85);
NSInteger length = imageData.length;
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation)[image imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){
if (error) {
NSLog(@"error:%@", error);
} else {
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithALAssetURLs:@[assetURL] options:nil];
PHAsset *asset = fetchResult.firstObject;
PHImageManager * imageManager = [PHImageManager defaultManager];
[imageManager requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
StrongSelf
NSLog(@"info:==%@", info);
NSURL *url = [info valueForKey:@"PHImageFileURLKey"];
NSString *str = [url absoluteString]; //url>string
NSArray *arr = [str componentsSeparatedByString:@"/"];
NSString *imgName = [arr lastObject];
}];
我們可以先使用ALAssetsLibrary獲取圖片的assertURL透且,然后再獲取到相應(yīng)的PHAsset對象,從而獲取到圖片的名稱豁鲤。
為什么不通過ALAsset對象獲取圖片的名稱呢?
先給大家看代碼
[library assetForURL:assetURL resultBlock:^(ALAsset *asset) {
NSString * fileName = asset.defaultRepresentation.filename;
NSRange range = [fileName rangeOfString:fileName.pathExtension];
NSString * name = [fileName substringToIndex:range.location];
NSString * realName = [NSString stringWithFormat:@"%@png", name];
[self.tableView reloadData];
} failureBlock:^(NSError *error) {
}];
上面代碼的library是ALAssetsLibrary對象鲸沮。
說說為什么不使用此方法來獲取圖片的名稱呢琳骡? 因為我發(fā)現(xiàn)在iphone7上使用此方法有時獲取不到圖片的名稱,就這樣。
demo地址:***https://gitee.com/liangsenliangsen/picture_name.git
本篇文章到這里就結(jié)束了讼溺,愿大家加班不多工資多楣号,男同胞都有女朋友,女同胞都有男朋友怒坯。??