ALAssetsLibrary获取相册图片

时间:2023-01-12 08:46:24

最近做了一下获取iPhone相册图片的事,看了一些ALAssetsLibrary相关的文章,受了些启发。不过对于其中的一些文章,我们大可善意地去相信作者还是想帮助我们的。

ALAssetsLibrary是一个很有用的家伙,因为它能取各种资源,图片、视频,等等。笔者也是初学者,不敢大放厥词,这里把我实现的代码贴出来,请大家指点。只是取图片。

先创建了一个类,只有一个属性:NSMutableArray *photos; 用来存放取到的图片。然后就可以在.m文件中写下面这个方法。

中间的注释部分,是可以对self.photos进行操作的函数插入点。

 

#pragma mark - 通过ALAssetsLibrary获取相册所有图片

 

-(void)getAllPhotosFromSysAlbum {

    static int counter = 0;

    

    if(!self.photos) _photos = [NSMutableArray array];

    else [self.photos removeAllObjects];

    

    NSMutableArray *assetURLDictionaries = [[NSMutableArray alloc] init];

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

    NSMutableArray *assetGroup = [[NSMutableArray alloc] init];

    

    void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop){

        if (result) {

            if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) {

                [assetURLDictionaries addObject:[result valueForProperty:ALAssetPropertyURLs]];

                NSURL *url = (NSURL *)[[result defaultRepresentation] url];

                

                [library assetForURL:url resultBlock:^(ALAsset *asset){

                    [self.photos addObject:[UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]]];

                                         if (self.photos.count == counter) {

                                              //这个地方就取到了图片,可以打印self.photos验证。

                                              //可以在这里添加对图片的操作,展示或什么的,图片都保存在了self.photos数组里面。

                         }

                }failureBlock:^(NSError *err){

                    NSLog(@"%@",err.description);

                }];

            }

        }

    };

    

    void (^assetGroupEnumerator) (ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop){

        if(group){

            [group enumerateAssetsUsingBlock:assetEnumerator];

            [assetGroup addObject:group];

            counter = [group numberOfAssets];

        }

    };

    

    assetGroup = [[NSMutableArray alloc] init];

    

    [library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:assetGroupEnumerator failureBlock:^(NSError *err){

        NSLog(@"%@",err.description);

    }];

}

最后,本人初学,还请各位大神不吝赐教。谢谢!