日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

媒体层图形技术之AssetsLibrary 学习笔记

發布時間:2023/12/9 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 媒体层图形技术之AssetsLibrary 学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
choudang的專欄

轉載自?? 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對象的陳述。

? ? ? ? 一個在資源庫中給定的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
//獲取資源圖片的詳細資源信息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

轉載于:https://www.cnblogs.com/allanliu/p/4213495.html

總結

以上是生活随笔為你收集整理的媒体层图形技术之AssetsLibrary 学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。