• IOS图片操作


    PhotoManager.h

    @interface PhotoMeanager : NSObject

    /**获取单列对象 */

    +(instancetype)sharedManager;

    /**读取所有相册的信息,返回数组<albumModel *> */

    -(void)loadAlbumInfoWithConpletionBlock:(void(^)(NSArray *albumModelArray)) completionBlock;

    /**读取某个asset的图片 */

    -(void)getThumbnailWithAsset:(PHAsset *)asset completionBlock:(void(^)(UIImage *thumbnail))completionBlock;

    /**读取预览图片 屏幕的大小 */

    -(void)getPreVIewImageWithAsset:(PHAsset *)asset completionBlock:(void(^)(UIImage *result))completionBlock;

    /**读取原图 */

    -(void)getOriginImageWithAsset:(PHAsset *)asset completionBlock:(void(^)(UIImage *result))completionBlock;

    @end

     PhotoManager.m

    @property (nonatomic,strong) PHCachingImageManager  *cacheImageManager;

    -(void)loadAlbumInfoWithConpletionBlock:(void (^)(NSArray *))completionBlock{

        NSMutableArray *albumModelsArray = [NSMutableArray array];//存放相册信息

        //创建读取那些相册的subType

        PHAssetCollectionSubtype subType = PHAssetCollectionSubtypeSmartAlbumVideos|PHAssetCollectionSubtypeSmartAlbumUserLibrary|PHAssetCollectionSubtypeSmartAlbumScreenshots;

        //获取所有相册的信息PHFetchResult《PHAssetCollection *》

        PHFetchResult *albumsCollection = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum  subtype:subType options:nil];

        //2遍历数组albumCollection 获取每一个相册的具体信息

        [albumsCollection enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

            //将obj转化为某个具体类型 PHAseetCollection 代表一个相册

            PHAssetCollection *collection = (PHAssetCollection *)obj;

            //创建读取相册信息的options

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

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

            

            //读取相册所有信息 PHAssetResult<PHAsset *>

            PHFetchResult *assetsResult = [PHAsset fetchAssetsInAssetCollection:collection options:option];

            

            //创建一个model,封装相册的信息

            AlbumModel *model = [[AlbumModel alloc]init];

            model.albumName = collection.localizedTitle;//相册名

            model.count = assetsResult.count;

            model.result = assetsResult;//保存相册的信息内容

            [albumModelsArray addObject:model]; 

        }];

        //回调

    //    completionBlock ? completionBlock(albumModelsArray):nil;

        if (completionBlock != nil) {

            completionBlock(albumModelsArray);

        }

    }

    -(PHCachingImageManager *)cacheImageManager{

        if (_cacheImageManager == nil) {

            self.cacheImageManager = [[PHCachingImageManager alloc]init];

        }

        return _cacheImageManager;

    }

    -(void)getThumbnailWithAsset:(PHAsset *)asset completionBlock:(void (^)(UIImage *))completionBlock{

        //创建异步读取图片的选项

        PHImageRequestOptions *options = [[PHImageRequestOptions alloc]init];

        options.resizeMode = PHImageRequestOptionsResizeModeFast;

        options.synchronous = YES;

        CGFloat scale = [UIScreen mainScreen].scale;

        [self.cacheImageManager requestImageForAsset:asset targetSize:CGSizeMake(80*scale, 80*scale) contentMode:PHImageContentModeAspectFit options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {

            //回调读取的图片

            completionBlock ? completionBlock(result):nil;

        }];

    }

    -(void)getPreVIewImageWithAsset:(PHAsset *)asset completionBlock:(void (^)(UIImage *))completionBlock{

        //创建异步读取图片的选项

        PHImageRequestOptions *options = [[PHImageRequestOptions alloc]init];

        options.resizeMode = PHImageRequestOptionsResizeModeFast;

        options.synchronous = YES;

        CGFloat scale = [UIScreen mainScreen].scale;

        CGSize screenSize = [UIScreen mainScreen].bounds.size;

        [self.cacheImageManager requestImageForAsset:asset targetSize:CGSizeMake(scale*screenSize.width, screenSize.height*scale) contentMode:PHImageContentModeAspectFit options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {

            //回调读取的图片

            completionBlock ? completionBlock(result):nil;

        }];

    }

    -(void)getOriginImageWithAsset:(PHAsset *)asset completionBlock:(void (^)(UIImage *))completionBlock{

        //创建异步读取图片的选项

        PHImageRequestOptions *options = [[PHImageRequestOptions alloc]init];

        options.resizeMode = PHImageRequestOptionsResizeModeExact;

        options.synchronous = YES;

        

        

        [self.cacheImageManager requestImageForAsset:asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeAspectFit options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {

            //回调读取的图片

            completionBlock ? completionBlock(result):nil;

        }];

    }

    viewDidload.m

    - (void)viewDidLoad {

        [super viewDidLoad];

        

        //首先查看是否授权

        if ([PHPhotoLibrary authorizationStatus]!= PHAuthorizationStatusAuthorized) {

            NSLog(@"mei");

        }

        //PHAsset 可以表示一个图片的信息,相册信息

        //PHFetchResult 就是一个数组,当读取相册信息,那么这个数组保存的是PHAssetCollection对象,一个PHAssetCollection对象表示一个相册,我的照片流,它里面包含了相册的名字,如果需要读取这个相册里面的所有图片信息,使用PHFetchResult,从PHAssetCollertion里面解析此刻的PHFetchResult数组存放的是这个相册的每一个图片的每一个图片的信息PHAsset;

        //读取所有相册的信息

        

        PHFetchResult *collectonResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumMyPhotoStream options:nil];

        //遍历整个相册,对某一个具体相册进行操作

        [collectonResult enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

            //这个相册的信息

            PHAssetCollection *assetCollection = (PHAssetCollection *)obj;

            //按照创建的先后顺序查找

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

            option.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationData" ascending:YES]];

            

            //获取相册信息

            PHFetchResult *albumResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:option];

            //获取相册名字

            NSString *albumName = assetCollection.localizedTitle;

            //这个 相册的相片个数

            NSInteger count = albumResult.count;

            

            NSLog(@"%@ (%ld)",albumName,count);

            

            //读取相册里面的最近一张图片信息PHAsset

            PHAsset *lastAsset = [albumResult lastObject];

            /*targetSize:需要读取的图片大小

             contentMode:图片以什么形式拉伸AspectFit

             resizeMode:

             excat:高清图片 当选择原图,targetSize必须是原图大小

             fast:以最快的速度读取,像素低

             none:不重新设置大小

             

             */

            

            //读取图片的选项

            PHImageRequestOptions *imageOptions = [[PHImageRequestOptions alloc]init];

            imageOptions.resizeMode = PHImageRequestOptionsResizeModeNone;

            

            __weak ViewController *weakSelf = self;

            

            [[PHImageManager defaultManager]requestImageForAsset:lastAsset targetSize:CGSizeMake(80, 80) contentMode:PHImageContentModeAspectFit options:imageOptions  resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {

                weakSelf.imageView.image = result;

            }];

        }];

    }

    @end

  • 相关阅读:
    ArchLinux and LXDE and LXDM
    如何改变X:\Users\XXX的用户名称
    Windows 7 支持4GB以上内存破解工具下载
    Linux & Vim Command Wallpaper
    The easy way to execute sudo command in Python using subprocess.Popen
    C# DateTime 精确到秒/截断毫秒部分
    制约程序员"钱途"的两大最关键因素
    Oracle基本操作
    字符串处理【Delphi版】
    java学习路线的经验之谈
  • 原文地址:https://www.cnblogs.com/yangqinglong/p/5363982.html
Copyright © 2020-2023  润新知