iOS的AssetsLibrary框架訪問所有相片
2014-10-16
該框架下有幾個類,ALAssetsLibrary,ALAssetsGroup,ALAsset,ALAssetsFilter,ALAssetRepresentation。
ALAssetsLibrary類
ALAssetsLibrary類可以實現檢視相簿列表,增加相簿,儲存圖片到相簿等功能。
例如enumerateGroupsWithTypes方法列舉所有相簿。
ALAssetsGroup
ALAssetsGroup就是相簿的類,可以通過valueForProperty方法檢視不同屬性的值,如:ALAssetsGroupPropertyName,相簿名。
ALAssetsGroup類有幾個方法,posterImage方法就是相簿的封面圖片,numberOfAssets方法獲取該相簿的圖片視訊數量,可以通過enumerateAssetsUsingBlock方法列舉出所有照片。
ALAssetsGroup 可以使用setAssetsFilter:(ALAssetsFilter *)filter過濾照片或者視訊等。
首先是獲取所有相簿,通過ALAssetsLibrary的例項方法得到ALAssetsGroup類陣列。
ALAssetsLibrary *assetsLibrary;
NSMutableArray *groupArray;
assetsLibrary = [[ALAssetsLibrary alloc] init];
groupArray=[[NSMutableArray alloc] initWithCapacity:1];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
[groupArray addObject:group];
// 通過這個可以知道相簿的名字,從而也可以知道安裝的部分應用
//例如 Name:柚子相機, Type:Album, Assets count:1
NSLog(@"%@",group);
}
} failureBlock:^(NSError *error) {
NSLog(@"Group not found!\n");
}];
ALAsset類
ALAsset類也可以通過valueForProperty方法檢視不同屬性的值,如:ALAssetPropertyType,asset的型別,有三種ALAssetTypePhoto, ALAssetTypeVideo or ALAssetTypeUnknown。
另外還可以通過該方法獲取ALAssetPropertyLocation(照片位置),ALAssetPropertyDuration(視訊時間),ALAssetPropertyDate(照片拍攝日期)等。
可以通過thumbnail方法就是獲取該照片。
根據相簿獲取該相簿下所有圖片,通過ALAssetsGroup的例項方法得到ALAsset類陣列。
[_group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (result) {
[imageArray addObject:result];
NSLog(@"%@",result);
iv.image=[UIImage imageWithCGImage: result.thumbnail];
NSString *type=[result valueForProperty:ALAssetPropertyType];
}
}];
ALAssetRepresentation類
ALAsset類有一個defaultRepresentation方法,返回值是ALAssetRepresentation類,該類的作用就是獲取該資源圖片的詳細資源資訊。
如
//
//獲取資源圖片的詳細資源資訊
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]);