媒体层图形技术之AssetsLibrary 学习笔记
轉(zhuǎn)載自?? http://m.blog.csdn.net/blog/choudang/28274519
1.ALAsset
ALAsset類代表相冊中的每個資源文件,可以通過它獲取資源文件的相關(guān)信息還能修改和新建資源文件
?
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獲取相對應(yīng)的資源,獲取圖片的等比縮略圖,原圖的等比縮略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"];//修改指定路徑的圖片資源內(nèi)容,替換掉原來的內(nèi)容[asset setImageData:UIImageJPEGRepresentation(ni, 1.0) metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {NSLog(@"new:%@",assetURL);}];?
//根據(jù)給定的圖片內(nèi)容,重新生成一張新圖[asset writeModifiedImageDataToSavedPhotosAlbum:UIImageJPEGRepresentation(ni, 1.0) metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {NSLog(@"new:%@",assetURL);}];
2.ALAssetRepresentation
ALAssetRepresentation類代表相冊中每個資源文件的詳細信息,可以通過它獲取資源的大小,名字,路徑等詳細信息。
?
ALAssetRepresentation
?
---------------------------------------------------------------------------
? ? ? ? ALAssetRepresentation對象封裝了一個給定ALAsset對象的陳述。
? ? ? ? 一個在資源庫中給定的asset可能有不止一個陳述。比如,如果一個相機提供RAW和JPEG格式的圖像版本,asset將有兩個陳述版本,一個是RAW的,一個是JPEG的。
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
3.ALAssetsFilter
過濾器篩選出想要展現(xiàn)的資源:圖片資源、視頻資源
?
// 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的資源)
Adding Assets(添加資源)
- –?addAsset:(添加一個已存在的asset到接收者。返回yes成功;反之,失敗。)
- ??editable??property(指示程序是否可以編輯組,只讀屬性,打印看了一下,系統(tǒng)自帶的是不能編輯的,其它可以編輯)
Filtering(過濾)
- –?numberOfAssets(返回組過濾器條件下的資源個數(shù),若沒有設(shè)置過濾器,則返回組里的資源個數(shù))
- –?setAssetsFilter:(設(shè)置組的過濾器)
Accessing Properties(訪問屬性)
- –?valueForProperty:(通過組屬性名稱,獲取組屬性:組名稱,組類型,組永久性ID,組URL)
- –?posterImage(組的封面)
5.ALAssetsLibrary
代表系統(tǒng)中整個資源庫,使用它可以訪問資源庫中的資源和保存照片,視頻等功能。
?
?
//判斷當(dāng)前應(yīng)用是否能訪問相冊資源/*typedef NS_ENUM(NSInteger, ALAuthorizationStatus) {ALAuthorizationStatusNotDetermined = 0, 用戶尚未做出了選擇這個應(yīng)用程序的問候ALAuthorizationStatusRestricted, 此應(yīng)用程序沒有被授權(quán)訪問的照片數(shù)據(jù)。可能是家長控制權(quán)限。ALAuthorizationStatusDenied, 用戶已經(jīng)明確否認(rèn)了這一照片數(shù)據(jù)的應(yīng)用程序訪問.ALAuthorizationStatusAuthorized 用戶已授權(quán)應(yīng)用訪問照片數(shù)據(jù).}*/int author = [ALAssetsLibrary authorizationStatus];NSLog(@"author type:%d",author);//關(guān)閉監(jiān)聽共享照片流產(chǎn)生的頻繁通知信息[ALAssetsLibrary disableSharedPhotoStreamsSupport];//創(chuàng)建一個相冊到相冊資源中,并通過block返回創(chuàng)建成功的相冊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]);
????????//查看資源的方向,圖片的旋轉(zhuǎn)方向
??????? NSLog(@"ALAssetPropertyOrientation:%@",[asset valueForProperty:ALAssetPropertyOrientation]);
????????//查看資源的創(chuàng)建時間
??????? 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) {
?? ?
??? }];
//根據(jù)選擇的類型遍歷相冊資源中的相對應(yīng)類型的所有相冊,其中stop行參是指針,表示是否停止迭代,當(dāng)賦值為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) {
?????? ?
??? }];
利用資源庫得枚舉函數(shù)把資源組分類,代碼如下:
?
- (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; }????//保存圖片到系統(tǒng)默認(rèn)的相冊中,使用nsdata的形式,并返回照片的url地址
??? [_library writeImageDataToSavedPhotosAlbum:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
?????? ?
??? }];
????//保存圖片到系統(tǒng)默認(rèn)的相冊中,使用cgimageref的形式,并返回照片的url地址
??? [_library writeImageToSavedPhotosAlbum:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
?????? ?
??? }];
?? ?
????//保存圖片到系統(tǒng)默認(rèn)的相冊中,使用cgimageref的形式,并且選擇圖片以什么旋轉(zhuǎn)方向的形式保存,并返回照片的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
轉(zhuǎn)載于:https://www.cnblogs.com/allanliu/p/4213495.html
總結(jié)
以上是生活随笔為你收集整理的媒体层图形技术之AssetsLibrary 学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle免客户端InstantCli
- 下一篇: 桥接模式下的手机-电脑-开发板连接