iOS开发——系统相册操作
来源:互联网 发布:淘宝客服在线回复话术 编辑:程序博客网 时间:2024/06/01 09:27
在我们的应用中使用图片、视频,尤其是大量的图片、视频的时候。如果存储在沙盒中,会使得该应用的沙盒文件越来越大。所以,一些图片、视频资源可以放到系统相册中保存。这样也有利于用户查看该类资源。
但是,资源存储在了系统相册,我们对其的访问就受到了一定的限制。具体解决办法如下:
1.把视频、图片存储在系统相册:
ALAssetsLibrary *library = [[ALAssetsLibraryalloc]init];
视频存储:- (void)writeVideoAtPathToSavedPhotosAlbum:(NSURL *)videoPathURL completionBlock:(ALAssetsLibraryWriteVideoCompletionBlock)completionBlock;
图片存储:- (void)writeImageDataToSavedPhotosAlbum:(NSData *)imageData metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock
2.把图片、视频文件从相册中读取出来:
- (void)getThumImageAndURLForPhotoAndVideo
{
__weakXYLocalAlbumViewcontroller *weakSelf =self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop) {
if (group !=nil) {
[weakSelf.groupArraysaddObject:group];
NSLog(@"[group valueForProperty:ALAssetsGroupPropertyName]: %@",[group valueForProperty:ALAssetsGroupPropertyName]);
if ([[groupvalueForProperty:ALAssetsGroupPropertyName]isEqualToString:XIAOYIALBUM]) {
self.collectionViewCellCount = group.numberOfAssets;
NSLog(@"self.collectionViewCellCount: %ld",self.collectionViewCellCount);
{
__weakXYLocalAlbumViewcontroller *weakSelf =self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop) {
if (group !=nil) {
[weakSelf.groupArraysaddObject:group];
NSLog(@"[group valueForProperty:ALAssetsGroupPropertyName]: %@",[group valueForProperty:ALAssetsGroupPropertyName]);
if ([[groupvalueForProperty:ALAssetsGroupPropertyName]isEqualToString:XIAOYIALBUM]) {
self.collectionViewCellCount = group.numberOfAssets;
NSLog(@"self.collectionViewCellCount: %ld",self.collectionViewCellCount);
// UI的更新记得放在主线程
dispatch_async(dispatch_get_main_queue(), ^{
[selfcreateCollectionViewForAlbum];
});
}
} else {
[weakSelf.groupArraysenumerateObjectsUsingBlock:^(id obj, NSUInteger idx,BOOL *stop) {
NSLog(@"obj----idx: %@---------%lu",obj, (unsignedlong)idx);
if ([[(ALAssetsGroup *)obj valueForProperty:ALAssetsGroupPropertyName]isEqualToString:XIAOYIALBUM]) {
[obj enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index,BOOL *stop) {
if ([resultthumbnail] !=nil) {
//照片
if ([[resultvalueForProperty:ALAssetPropertyType]isEqualToString:ALAssetTypePhoto]){
NSDate *date= [resultvalueForProperty:ALAssetPropertyDate];
// UIImage *image = [UIImage imageWithCGImage:[result thumbnail]];
NSString *fileName = [[resultdefaultRepresentation]filename];
NSURL *url = [[resultdefaultRepresentation]url];
int64_t fileSize = [[resultdefaultRepresentation]size];
NSLog(@"date = %@",date);
NSLog(@"fileName = %@",fileName);
NSLog(@"url = %@",url);
NSLog(@"fileSize = %lld",fileSize);
// UI的更新记得放在主线程,要不然等子线程排队过来都不知道什么年代了,会很慢的
dispatch_async(dispatch_get_main_queue(), ^{
});
}
//视频
elseif ([[resultvalueForProperty:ALAssetPropertyType]isEqualToString:ALAssetTypeVideo] ){
//和图片方法类似
NSDate *date= [resultvalueForProperty:ALAssetPropertyDate];
// UIImage *image = [UIImage imageWithCGImage:[result thumbnail]];
NSString *fileName = [[resultdefaultRepresentation]filename];
NSURL *url = [[resultdefaultRepresentation]url];
int64_t fileSize = [[resultdefaultRepresentation]size];
NSLog(@"date = %@",date);
NSLog(@"fileName = %@",fileName);
NSLog(@"url = %@",url);
NSLog(@"fileSize = %lld",fileSize);
}
}
}];
}
}];
}
};
ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error)
{
NSString *errorMessage =nil;
switch ([errorcode]) {
caseALAssetsLibraryAccessUserDeniedError:
caseALAssetsLibraryAccessGloballyDeniedError:
errorMessage = @"用户拒绝访问相册,请在<隐私>中开启";
break;
default:
errorMessage = @"Reason unknown.";
break;
}
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView *alertView = [[UIAlertViewalloc]initWithTitle:@"错误,无法访问!"
message:errorMessage
delegate:self
cancelButtonTitle:@"确定"
otherButtonTitles:nil,nil];
[alertView show];
});
};
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibraryalloc] init];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:listGroupBlockfailureBlock:failureBlock];
});
[selfcreateCollectionViewForAlbum];
});
}
} else {
[weakSelf.groupArraysenumerateObjectsUsingBlock:^(id obj, NSUInteger idx,BOOL *stop) {
NSLog(@"obj----idx: %@---------%lu",obj, (unsignedlong)idx);
if ([[(ALAssetsGroup *)obj valueForProperty:ALAssetsGroupPropertyName]isEqualToString:XIAOYIALBUM]) {
[obj enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index,BOOL *stop) {
if ([resultthumbnail] !=nil) {
//照片
if ([[resultvalueForProperty:ALAssetPropertyType]isEqualToString:ALAssetTypePhoto]){
NSDate *date= [resultvalueForProperty:ALAssetPropertyDate];
// UIImage *image = [UIImage imageWithCGImage:[result thumbnail]];
NSString *fileName = [[resultdefaultRepresentation]filename];
NSURL *url = [[resultdefaultRepresentation]url];
int64_t fileSize = [[resultdefaultRepresentation]size];
NSLog(@"date = %@",date);
NSLog(@"fileName = %@",fileName);
NSLog(@"url = %@",url);
NSLog(@"fileSize = %lld",fileSize);
// UI的更新记得放在主线程,要不然等子线程排队过来都不知道什么年代了,会很慢的
dispatch_async(dispatch_get_main_queue(), ^{
});
}
//视频
elseif ([[resultvalueForProperty:ALAssetPropertyType]isEqualToString:ALAssetTypeVideo] ){
//和图片方法类似
NSDate *date= [resultvalueForProperty:ALAssetPropertyDate];
// UIImage *image = [UIImage imageWithCGImage:[result thumbnail]];
NSString *fileName = [[resultdefaultRepresentation]filename];
NSURL *url = [[resultdefaultRepresentation]url];
int64_t fileSize = [[resultdefaultRepresentation]size];
NSLog(@"date = %@",date);
NSLog(@"fileName = %@",fileName);
NSLog(@"url = %@",url);
NSLog(@"fileSize = %lld",fileSize);
}
}
}];
}
}];
}
};
ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error)
{
NSString *errorMessage =nil;
switch ([errorcode]) {
caseALAssetsLibraryAccessUserDeniedError:
caseALAssetsLibraryAccessGloballyDeniedError:
errorMessage = @"用户拒绝访问相册,请在<隐私>中开启";
break;
default:
errorMessage = @"Reason unknown.";
break;
}
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView *alertView = [[UIAlertViewalloc]initWithTitle:@"错误,无法访问!"
message:errorMessage
delegate:self
cancelButtonTitle:@"确定"
otherButtonTitles:nil,nil];
[alertView show];
});
};
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibraryalloc] init];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:listGroupBlockfailureBlock:failureBlock];
});
}
//获取图片、视频的缩略图
- (void)getThumbnail
{
ALAssetsLibrary *assetLibrary = [[ALAssetsLibraryalloc]init];
for (int i = 0 ; i <self.dataArray.count; i++) {
//获取路径
NSString *string =self.dataArray[i];
NSURL *url = [NSURLURLWithString:string];
//根据图片url获取图片
[assetLibrary assetForURL:urlresultBlock:^(ALAsset *asset) {
//获取路径
NSString *string =self.dataArray[i];
NSURL *url = [NSURLURLWithString:string];
//根据图片url获取图片
[assetLibrary assetForURL:urlresultBlock:^(ALAsset *asset) {
if (asset != nil) {
//缩略图img
UIImage *image = [UIImageimageWithCGImage:asset.thumbnail];
//
if (image !=nil) {
[self.imagesArrayaddObject:image];
//大图不需要
//判断文件后缀,是图片还是视频,放到数组中,只有mp4格式被认为是视频
NSRange range = [stringrangeOfString:@"&ext="];
NSInteger loc = range.location + range.length;
NSString *subString = [stringsubstringFromIndex:loc];
NSString *suffix =nil;
if ([subStringisEqualToString:@"mp4"]) {
suffix = @"mp4";
} else {
suffix = @"notMp4";
}
[self.photoOrVideoArrayaddObject:suffix];
[self.imageDictsetObject:imageforKey:string];
//
if (image !=nil) {
[self.imagesArrayaddObject:image];
//大图不需要
//判断文件后缀,是图片还是视频,放到数组中,只有mp4格式被认为是视频
NSRange range = [stringrangeOfString:@"&ext="];
NSInteger loc = range.location + range.length;
NSString *subString = [stringsubstringFromIndex:loc];
NSString *suffix =nil;
if ([subStringisEqualToString:@"mp4"]) {
suffix = @"mp4";
} else {
suffix = @"notMp4";
}
[self.photoOrVideoArrayaddObject:suffix];
[self.imageDictsetObject:imageforKey:string];
[self.typeDictsetObject:suffixforKey:string];
}
}
} failureBlock:^(NSError *error) {
}
} failureBlock:^(NSError *error) {
}];
}
}
除了删除操作,其他的操作基本都有了。
0 0
- iOS开发——系统相册操作
- iOS开发选取系统相册
- IOS开发—自定义多选相册
- iOS开发获取系统相册资源,自定义相册(PhotoKit)
- ios开发调用系统相机相册
- iOS开发 调用系统相机和相册
- iOS开发系统相册的选取
- iOS开发之获取系统相册ALAssetLibrary
- ios开发 使用系统相册和相机
- iOS开发 iOS调用系统相册显示中文标题
- IOS开发——保存图片到相册
- ios 相册操作 ALAssetsLibrary
- iOS 获取系统相册
- iOS 获取系统相册
- iOS开发--调用系统相册、相机显示中文title
- iOS开发学习之保存照片到系统相册
- iOS开发中调用系统相册、相机 显示中文标题
- 【iOS开发】iPad横屏打开系统相册崩溃,解决方案
- 【套题】Codeforces#304(div2)
- 加盟学天--尊享年收益百万
- cocoapods安装前奏篇
- boost的原子操作
- document.execCommand()的用法小记
- iOS开发——系统相册操作
- inline内联函数
- 大数据,从一则新闻想起 ......
- mysql 存储引擎的选择
- JTAG祥细介绍
- FMDB同时支持ARC&MRC 代码
- NetBeans快捷键大全
- sqlserver 随机查询
- Nodejs学习笔记(四)与MySQL交互(felixge/node-mysql)