AssetsLibrary/AssetsLibrary.h 相册获取

ios8.0以前获取相册有UIImagePicker(但是每次只能选取一张),如果需要选取多张,只能自己来自定义picker

这里用到的框架为AssetsLibrary.framework,资源库,

#import <AssetsLibrary/ALAsset.h> //图片的基本信息

#import <AssetsLibrary/ALAssetsFilter.h> //Group的过滤器,记住,只能生效一个

#import <AssetsLibrary/ALAssetsGroup.h>//获取相册

#import <AssetsLibrary/ALAssetsLibrary.h>//额 整个类库的管理类吧

#import <AssetsLibrary/ALAssetRepresentation.h> //图片的详细信息

我这边简单的封装了一下,大致的流程就是先获取相册,然后再获取相册中的照片,比较简单,直接上代码吧

- (NSMutableDictionary *)detailGroups {

    if (!_detailGroups) {
        _detailGroups = @{}.mutableCopy;
    }

    return _detailGroups;
}

- (ALAssetsLibrary *)library {
    if (!_library) {
        _library = [[ALAssetsLibrary alloc]init];
    }
    return _library;
}

- (NSMutableArray *)assesGroups {

    if (!_assesGroups) {
        _assesGroups = @[].mutableCopy;
    }

    return _assesGroups;
}

+ (LIUAsset *)shareAsset {

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _shareAsset = [[LIUAsset alloc]init];
    });

    return _shareAsset;
}

- (void)releaseObj {
    if (_shareAsset) {
        _shareAsset = nil;
    }
}

///获取所有的分组
- (void)getAssetsGroups:(GetAssetsGroupsBlock)assetsGroup {

    if (self.assesGroups.count != 0) {
        if (assetsGroup) {
            assetsGroup(self.assesGroups.copy);
            return;
        };
    }

    [self.library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

        //只需要photo
        ALAssetsFilter *onlyPhotos = [ALAssetsFilter allPhotos];
        if (group) {

            [group setAssetsFilter:onlyPhotos];
            if ([group numberOfAssets] > 0) {
                [self.assesGroups addObject:group];
            }

        }else {
            //这里本来应该是要按照*stop来判断的,貌似调试的时候发现这个stop一直是no,但是有一个参考的是这里的group当是最后一个的时候 会是nil,就根据这个判断吧
            if (assetsGroup) {
                assetsGroup(self.assesGroups.copy);
                return;
            }
        }

    } failureBlock:^(NSError *error) {

    }];

}

///获取分组所有的alasset
- (void)getAllAssetsByGroup:(ALAssetsGroup *)group Finish:(GetAssetsBlock)finish{

    NSString *groupName = [group valueForProperty:ALAssetsGroupPropertyName];
    __block NSMutableArray *allAssets = [self.detailGroups objectForKey:groupName];

    if (allAssets) {
        //返回数据了
        if (finish) {
            finish(allAssets.copy);
        }
        return;
    }
    //如果没有数据
    allAssets = @[].mutableCopy;

    [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {

        //不知道为什么这里的stop显示不对呀
        if (result) {
            [allAssets addObject:result];
        }else {
            //先把数组保存到字典中
            [self.detailGroups setObject:allAssets forKey:groupName];
            if (finish) {
                finish(allAssets.copy);
            }
            return;
        }

    }];

}

///获取全屏图
- (UIImage *)getFullImageWitAsset:(ALAsset *)asset {
    return [UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]];
}

///获取缩略图
- (UIImage *)getThumbImageWithAsset:(ALAsset *)asset {
    return [UIImage imageWithCGImage:[asset thumbnail]];
}

ios 8以后,苹果就舍弃了这个类库,新建了一个photos类,下次有空再整理一下这个类库的

时间: 2024-10-06 02:28:40

AssetsLibrary/AssetsLibrary.h 相册获取的相关文章

AssetsLibrary 实现访问相册,选取多张照片显示

1 #import "ViewController.h" 2 #import <AssetsLibrary/AssetsLibrary.h> 3 4 5 /** 6 * ALAssetsLibrary.h 代表资源库(所有的视频,照片) 7 ALAssetsGroup.h 代表资源库中的相册 8 ALAsset.h 代表相册中一个视频或者一张照片 9 ALAssetRepresentation.h 代表一个资源的描述,可以获取到原始图片 10 */ 11 12 @inter

iOS 根据图片URL从本地相册获取图片

最近做一个聊天的项目,需要发送图片后读取本地图片显示到列表里.刚开始的时候,天真的认为可以用SDWebImage直接加载,然后并不能行. 于是在网上搜了搜,如何根据从相册获取的UIImagePickerControllerReferenceURL读取图片, 代码如下: #import "ViewController.h" #import <AssetsLibrary/AssetsLibrary.h> @interface ViewController ()<UINav

ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结

相册 iphone的相册包含摄像头胶卷+用户计算机同步的部分照片.用户可以通过UIImagePickerController类提供的交互对话框来从相册中选择图像.但是,注意:相册中的图片机器路径无法直接从应用程序访问,只能通过终端用户去选择和使用相册图片 应用程序包 应用程序包可能会将图像与可执行程序.Info.plist文件和其他资源一同存储.我们可以通过本地文件路径来读取这些基于包的图像并在应用程序中显示它们. 沙盒 借助沙盒,我们可以把图片存储到Documents.Library.tmp文

Android相机、相册获取图片显示(压缩)并保存到SD卡

做过类似需求的同学都知道,在Activity中通过如下代码可以启动相机,然后在重写的onActivityResult方法中可以获取到返回的照片数据: Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(openCameraIntent, TAKE_PICTURE); 在onActivityResult方法里通过Intent的getData方法获取的数据转换成bi

android 从相册获取图片

从相册获取图片 在android应用中是运用得很多的一项技术了 其实很简单 使用intent就可以了 刚敲了一个dome  睡觉之前还是分享一下把 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match

iOS 从相机或相册获取图片并裁剪

/load user image - (void)UesrImageClicked { UIActionSheet *sheet; // 判断是否支持相机 if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { sheet = [[UIActionSheet alloc] initWithTitle:@"选择图像" delegate:self cancel

android 调用系统相机获取图片、调用系统相册获取图片,并对图片进行截取

打开系统相册获取图片并截取,代码相对简单 1 Intent intent = new Intent(Intent.ACTION_GET_CONTENT,null); 2 intent.setType("image/*"); 3 intent.putExtra("crop", "true"); 4 5 //WIDTH 和 HEIGHT指的是截取框的宽高比例,如设WIDTH = 1,HEIGHT = 1,截取框就为正方形 6 intent.putEx

从相册获取图片及调用相机拍照获取图片,最后上传图片到服务器

调用相机拍照获取图片: 跳转到到拍照界面: Intent takeIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //下面这句指定调用相机拍照后的照片存储的路径 mSzImageFileName = Long.toString(System.currentTimeMillis()) + ".png"; takeIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new F

从相机相册获取图片裁剪后用于评论晒图或更换背景图

这是我人生中写的第一篇博客,是否要纪念一下这一刻(2016.09.01 16:52).其实关于写博客,老早就有这种写法,首先觉得他能够帮我总结我学到的和用过的技术,其次还能帮助那些和我有一样需求的人,我也是很开心啊,但是至于为什么现在才写第一篇,首先没有想好写什么,然后前段时间也确实比较忙.是不是那些来观技术的人已经想骂人了啊...啊哦!原谅我第一次写博客的激动心情吧! 废话不多说,开始我们的问题吧,首先因为我做了两次关于调用相机和相册获取图片的功能,觉得很有必要总结一下,下面我将从这两个功能出