需求:选择图片或者拍照之后得到的图片要显示其名称以及大小
实现:
使用PHAsset
如果我们使用TZImagePickerController那么我们会得到装有PHAsset对象的数组,我们可以通过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];
}];
如果我们利用系统相机进行拍照或直接获取系统图片得到的是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,然后再获取到相应的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对象。
说说为什么不使用此方法来获取图片的名称呢? 因为我发现在iphone7上使用此方法有时获取不到图片的名称,就这样。
demo地址:***https://gitee.com/liangsenliangsen/picture_name.git
本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。