转载自 http://m.blog.csdn.net/blog/choudang/28274519
1.ALAsset
ALAsset类代表相册中的每个资源文件,可以通过它获取资源文件的相关信息还能修改和新建资源文件
Asset Properties
– valueForProperty:
(1.ALAssetPropertyType 资源的类型(照片,视频)
2.ALAssetPropertyLocation 资源地理位置(无位置信息返回null)
3.ALAssetPropertyDuation 播放时长(照片返回ALErorInvalidProperty)
- 4.ALAssetPropertyOrientation 方向(共有8个方向,参见:ALAssetOrientation)
- 5.ALAssetPropertyDate 拍摄时间(包含了年与日时分秒)
- 6.ALAssetPropertyRepresentations 描述(打印看了下,只有带后缀的名称)
- 7.ALAssetPropertyURLs(返回一个字典,键值分别是文件名和文件的url)
- 8.ALAssetPropertyAssetURL 文件的url )
editable
property(指示资源是否可以编辑,只读属性)originalAsset
property(原始资源。若没有保存修改后资源,则原始资源为nil)
Accessing Representations
– defaultRepresentation
– representationForUTI:
– thumbnail(小正方形的缩略图)
– aspectRatioThumbnail(按原始资源长宽比例的缩略图)
Setting New Image and Video Data
– setImageData:metadata:completionBlock:
用给定的image data 替换接收者的image data。
- – setVideoAtPath:completionBlock:
- 用给定的URL的video 替换接收者的video data。
Saving to the Saved Photos Album
– writeModifiedImageDataToSavedPhotosAlbum:metadata:completionBlock:
保存image data到Saved Photos album
– writeModifiedVideoAtPathToSavedPhotosAlbum:completionBlock:
保存video到Saved Photos album的指定路径
//通过ALAsset获取相对应的资源,获取图片的等比缩略图,原图的等比缩略CGImageRef ratioThum = [asset aspectRatioThumbnail];//获取相片的缩略图,该缩略图是相册中每张照片的poster图CGImageRef thum = [asset thumbnail];UIImage* rti = [UIImage imageWithCGImage:ratioThum];UIImage* ti = [UIImage imageWithCGImage:thum];UIImageView* v1 = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 120, 200)];v1.image = rti;v1.contentMode = UIViewContentModeScaleAspectFit;UIImageView* v2 = [[UIImageView alloc]initWithFrame:CGRectMake(180, 100, 120, 200)];v2.image = ti;v2.contentMode = UIViewContentModeScaleAspectFit;[self.view addSubview:v1];[self.view addSubview:v2];
UIImage* ni = [UIImage imageNamed:@"new.png"];//修改指定路径的图片资源内容,替换掉原来的内容[asset setImageData:UIImageJPEGRepresentation(ni, 1.0) metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {NSLog(@"new:%@",assetURL);}];
//根据给定的图片内容,重新生成一张新图[asset writeModifiedImageDataToSavedPhotosAlbum:UIImageJPEGRepresentation(ni, 1.0) metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {NSLog(@"new:%@",assetURL);}];
2.ALAssetRepresentation
ALAssetRepresentation类代表相册中每个资源文件的详细信息,可以通过它获取资源的大小,名字,路径等详细信息。
ALAssetRepresentation
---------------------------------------------------------------------------
ALAssetRepresentation对象封装了一个给定ALAsset对象的陈述。
Getting Image Representations
– CGImageWithOptions:
– fullResolutionImage(完全分辨率的图片)
– fullScreenImage(满屏的图片)
Getting Image Attributes
– orientation(文件方向)
– scale(长宽比例)
– filename(文件名字)
Getting Raw Data
– size(文件尺寸,以byte为单位)
– getBytes:fromOffset:length:error:
Getting Metadata
– UTI
– metadata
- Getting an URL
- – url
//获取资源图片的详细资源信息ALAssetRepresentation* representation = [asset defaultRepresentation];//获取资源图片的长宽CGSize dimension = [representation dimensions];//获取资源图片的高清图[representation fullResolutionImage];//获取资源图片的全屏图[representation fullScreenImage];//获取资源图片的名字NSString* filename = [representation filename];NSLog(@"filename:%@",filename);//缩放倍数[representation scale];//图片资源容量大小[representation size];//图片资源原数据[representation metadata];//旋转方向[representation orientation];//资源图片url地址,该地址和ALAsset通过ALAssetPropertyAssetURL获取的url地址是一样的NSURL* url = [representation url];NSLog(@"url:%@",url);//资源图片uti,唯一标示符NSLog(@"uti:%@",[representation UTI]);
3.ALAssetsFilter
过滤器筛选出想要展现的资源:图片资源、视频资源
// Get all photos assets in the assets group.
+ (ALAssetsFilter *)allPhotos;
// Get all video assets in the assets group.
+ (ALAssetsFilter *)allVideos;
// Get all assets in the group.
+ (ALAssetsFilter *)allAssets;
4.ALAssetsGroup
Enumerating Assets(遍历资源)
– enumerateAssetsUsingBlock:(用一个block来遍历组里的资源)
– enumerateAssetsWithOptions:usingBlock:(在枚举选项的条件下,用一个block来遍历组里的资源)
– enumerateAssetsAtIndexes:options:usingBlock:(在枚举选项的条件下,用一个block来遍历组里特定index的资源)
- (void)setupAssets
{self.title = [self.assetsGroup valueForProperty:ALAssetsGroupPropertyName];if (!self.assets)self.assets = [[NSMutableArray alloc] init];else[self.assets removeAllObjects];ALAssetsGroupEnumerationResultsBlock resultsBlock = ^(ALAsset *asset, NSUInteger index, BOOL *stop) {if (asset){[self.assets addObject:asset];NSString *type = [asset valueForProperty:ALAssetPropertyType];if ([type isEqual:ALAssetTypePhoto])self.numberOfPhotos ++;if ([type isEqual:ALAssetTypeVideo])self.numberOfVideos ++;}else if (self.assets.count > 0){[self.collectionView reloadData];[self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:self.assets.count-1 inSection:0]atScrollPosition:UICollectionViewScrollPositionTopanimated:YES];}};[self.assetsGroup enumerateAssetsUsingBlock:resultsBlock];
}
Adding Assets(添加资源)
– addAsset:(添加一个已存在的asset到接收者。返回yes成功;反之,失败。)
editable
property(指示程序是否可以编辑组,只读属性,打印看了一下,系统自带的是不能编辑的,其它可以编辑)
Filtering(过滤)
– numberOfAssets(返回组过滤器条件下的资源个数,若没有设置过滤器,则返回组里的资源个数)
– setAssetsFilter:(设置组的过滤器)
Accessing Properties(访问属性)
– valueForProperty:(通过组属性名称,获取组属性:组名称,组类型,组永久性ID,组URL)
– posterImage(组的封面)
5.ALAssetsLibrary
代表系统中整个资源库,使用它可以访问资源库中的资源和保存照片,视频等功能。
//判断当前应用是否能访问相册资源/*typedef NS_ENUM(NSInteger, ALAuthorizationStatus) {ALAuthorizationStatusNotDetermined = 0, 用户尚未做出了选择这个应用程序的问候ALAuthorizationStatusRestricted, 此应用程序没有被授权访问的照片数据。可能是家长控制权限。ALAuthorizationStatusDenied, 用户已经明确否认了这一照片数据的应用程序访问.ALAuthorizationStatusAuthorized 用户已授权应用访问照片数据.}*/int author = [ALAssetsLibrary authorizationStatus];NSLog(@"author type:%d",author);//关闭监听共享照片流产生的频繁通知信息[ALAssetsLibrary disableSharedPhotoStreamsSupport];//创建一个相册到相册资源中,并通过block返回创建成功的相册ALAssetsGroup[_library addAssetsGroupAlbumWithName:@"test" resultBlock:^(ALAssetsGroup *group) {//NSString *const ALAssetsGroupPropertyName;//NSString *const ALAssetsGroupPropertyType;//NSString *const ALAssetsGroupPropertyPersistentID;//NSString *const ALAssetsGroupPropertyURL;//查看相册的名字NSLog(@"ALAssetsGroupPropertyName:%@",[group valueForProperty:ALAssetsGroupPropertyName]);//查看相册的类型NSLog(@"ALAssetsGroupPropertyType:%@",[group valueForProperty:ALAssetsGroupPropertyType]);//查看相册的存储idNSLog(@"ALAssetsGroupPropertyPersistentID:%@",[group valueForProperty:ALAssetsGroupPropertyPersistentID]);//查看相册存储的位置地址NSLog(@"ALAssetsGroupPropertyURL:%@",[group valueForProperty:ALAssetsGroupPropertyURL]);groupURL = [group valueForProperty:ALAssetsGroupPropertyURL];} failureBlock:^(NSError *error) {}];
新添加了一个名为test的相册
//通过url地址在相册资源中获取该地址的资源文件ALAsset,有可能是相片或视频
[_library assetForURL:[NSURL URLWithString:@""] resultBlock:^(ALAsset *asset) {
/*
NSString *const ALAssetPropertyType;
NSString *const ALAssetPropertyLocation;
NSString *const ALAssetPropertyDuration;
NSString *const ALAssetPropertyOrientation;
NSString *const ALAssetPropertyDate;
NSString *const ALAssetPropertyRepresentations;
NSString *const ALAssetPropertyURLs;
NSString *const ALAssetPropertyAssetURL;
*/
//查看资源的地理位置信息
NSLog(@"ALAssetPropertyLocation:%@",[asset valueForProperty:ALAssetPropertyLocation]);
//如果资源是视频,查看视频的时长
NSLog(@"ALAssetPropertyDuration:%@",[asset valueForProperty:ALAssetPropertyDuration]);
//查看资源的方向,图片的旋转方向
NSLog(@"ALAssetPropertyOrientation:%@",[asset valueForProperty:ALAssetPropertyOrientation]);
//查看资源的创建时间
NSLog(@"ALAssetPropertyDate:%@",[asset valueForProperty:ALAssetPropertyDate]);
//查看资源的描述信息
NSLog(@"ALAssetPropertyRepresentations:%@",[asset valueForProperty:ALAssetPropertyRepresentations]);
NSLog(@"ALAssetPropertyURLs:%@",[asset valueForProperty:ALAssetPropertyURLs]);
//查看资源的url路径
NSLog(@"ALAssetPropertyAssetURL:%@",[asset valueForProperty:ALAssetPropertyAssetURL]);
} failureBlock:^(NSError *error) {
}];
//通过url地址获取相册资源中的一个相册
[_library groupForURL:groupURL resultBlock:^(ALAssetsGroup *group) {
NSLog(@"ALAssetsGroupPropertyName:%@",[group valueForProperty:ALAssetsGroupPropertyName]);
} failureBlock:^(NSError *error) {
}];
//根据选择的类型遍历相册资源中的相对应类型的所有相册,其中stop行参是指针,表示是否停止迭代,当赋值为false则停止
/*
enum {
ALAssetsGroupLibrary = (1 << 0),
ALAssetsGroupAlbum = (1 << 1),
ALAssetsGroupEvent = (1 << 2),
ALAssetsGroupFaces = (1 << 3),
ALAssetsGroupSavedPhotos = (1 << 4),
ALAssetsGroupPhotoStream = (1 << 5),
ALAssetsGroupAll = 0xFFFFFFFF,
};
*/
[_library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
NSLog(@"group name:%@",[group valueForProperty:ALAssetsGroupPropertyName]);
} failureBlock:^(NSError *error) {
}];
利用资源库得枚举函数把资源组分类,代码如下:
- (void)setupGroup
{if (!self.assetsLibrary)self.assetsLibrary = [self.class defaultAssetsLibrary];if (!self.groups)self.groups = [[NSMutableArray alloc] init];else[self.groups removeAllObjects];CTAssetsPickerController *picker = (CTAssetsPickerController *)self.navigationController;ALAssetsFilter *assetsFilter = picker.assetsFilter;ALAssetsLibraryGroupsEnumerationResultsBlock resultsBlock = ^(ALAssetsGroup *group, BOOL *stop) {if (group){[group setAssetsFilter:assetsFilter];if (group.numberOfAssets > 0)[self.groups addObject:group];}else{[self reloadData];}};ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error) {[self showNotAllowed];};// Enumerate Camera roll first[self.assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotosusingBlock:resultsBlockfailureBlock:failureBlock];// Then all other groupsNSUInteger type =ALAssetsGroupLibrary | ALAssetsGroupAlbum | ALAssetsGroupEvent |ALAssetsGroupFaces | ALAssetsGroupPhotoStream;[self.assetsLibrary enumerateGroupsWithTypes:typeusingBlock:resultsBlockfailureBlock:failureBlock];
}
其中得[self.class defaultAssetsLibrary]为单列形式:
#pragma mark - ALAssetsLibrary+ (ALAssetsLibrary *)defaultAssetsLibrary
{static dispatch_once_t pred = 0;static ALAssetsLibrary *library = nil;dispatch_once(&pred, ^{library = [[ALAssetsLibrary alloc] init];});return library;
}
//保存图片到系统默认的相册中,使用nsdata的形式,并返回照片的url地址
[_library writeImageDataToSavedPhotosAlbum:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
}];
//保存图片到系统默认的相册中,使用cgimageref的形式,并返回照片的url地址
[_library writeImageToSavedPhotosAlbum:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
}];
//保存图片到系统默认的相册中,使用cgimageref的形式,并且选择图片以什么旋转方向的形式保存,并返回照片的url地址
/*
typedef enum {
ALAssetOrientationUp, // default orientation
ALAssetOrientationDown, // 180 deg rotation
ALAssetOrientationLeft, // 90 deg CCW
ALAssetOrientationRight, // 90 deg CW
ALAssetOrientationUpMirrored, // as above but image mirrored along other axis. horizontal flip
ALAssetOrientationDownMirrored, // horizontal flip
ALAssetOrientationLeftMirrored, // vertical flip
ALAssetOrientationRightMirrored, // vertical flip
} ALAssetOrientation;
*/
UIImage* image = [UIImage imageNamed:@"test.png"];
[_library writeImageToSavedPhotosAlbum:[image CGImage] orientation:ALAssetOrientationLeft completionBlock:^(NSURL *assetURL, NSError *error) {
NSLog(@"save image:%@",assetURL);
}];
详情请参考demon:http://download.csdn.net/detail/choudang/7446365