获取图片资源

如今,几乎在每一个项目中都会用到获取相册图片,或者通过相机拍照获取照片的功能。如果只是单独的从相册获取一张图片,这个是单的,只需要用到

UIImagePickerController这个类就可以实现需要的功能了。通过它可以获取相册或通过拍照来获取图片,这个类是在AVFoundation框架中的。但是,如果我们要一次性选择多张图片,那这个类就不足以完成我们需要实现的功能了。

那么问题就来了:该如何一次性选取多张图片呢???

答案:通过Photos和AssetsLibrary这两个框架来是实现这个功能,其中Photos iOS8之后才有的框架,而AssetsLibrary框架在ios9被废弃了,因此,为了兼容iOS7~ios9,我们需要做适配,两个框架都需要用到。

 

那么首先是AssetsLibrary。

    /**
     *  失败的回调   如不允许访问媒体库
     *
     */
    ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error) {
        
        switch ([error code]) {
            case ALAssetsLibraryAccessUserDeniedError:
            case ALAssetsLibraryAccessGloballyDeniedError:

                break;
            default:
                break;
        }
    };


    ALAssetsGroupEnumerationResultsBlock assetsEnumerationBlock = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
        
        if (result)
        {
            [self.asetsArr addObject:result];
        }
        
        if (stop != nil)
        {
            dispatch_async(dispatch_get_main_queue(), ^{
                
                [self.imageCollecTionView reloadData];
            });
        }
    };
    
    /**
     *  成功的回调
     *
     */
    ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop) {
        
        ALAssetsFilter *onlyPhotosFilter = [ALAssetsFilter allPhotos];
        [group setAssetsFilter:onlyPhotosFilter];
        [group enumerateAssetsUsingBlock:assetsEnumerationBlock];
    };
    
    
    /**
     *  设置类型
     */
    NSUInteger groupTypes = ALAssetsGroupAlbum | ALAssetsGroupEvent | ALAssetsGroupFaces | ALAssetsGroupSavedPhotos;
    
    /**
     *  访问媒体库
     */
    [self.assetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:listGroupBlock failureBlock:failureBlock];

  其中self.asetsArr中包含的就是你相册中所有的图片数据,但是他是ALAsset类的对象。

 

Photos框架,这个iOS8之后才有的框架,他比AssetsLibrary更强大

    PHFetchOptions *allPhotosOptions = [[PHFetchOptions alloc] init];

    allPhotosOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];

    PHFetchResult *allPhotos = [PHAsset fetchAssetsWithOptions:allPhotosOptions];

    for (PHAsset * asset  in allPhotos)

    {

        [self.imageManager requestImageForAsset:asset targetSize:CGSizeMake([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height) contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info)

         {

             [self.asetsArr addObject:result];

         }];

    }

self.asetsArr中包含的就是你相册中所有的图片数据

这些事最主要的代码,源码下载  

 https://github.com/LuShui/TYPickImage

源码可能需要自己将主要的几个类导入进去

你可能感兴趣的:(获取图片资源)