iOS开发中获取图片、照片的名称以及大小---PHAsset

需求:选择图片或者拍照之后得到的图片要显示其名称以及大小

实现:

使用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

本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。

你可能感兴趣的:(iOS开发中获取图片、照片的名称以及大小---PHAsset)