博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 保存图片(视频)到相册
阅读量:4314 次
发布时间:2019-06-06

本文共 3839 字,大约阅读时间需要 12 分钟。

1、C语言函数方式实现

注意:UIImageWriteToSavedPhotosAlbum方法必须实现代理方法,否则会崩溃。

//参数1:图片对象//参数2:成功方法绑定的target//参数3:成功后调用方法//参数4:需要传递信息(成功后调用方法的参数)UIImageWriteToSavedPhotosAlbum(self.imageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);#pragma mark -- 
<保存到相册>
-(void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { NSString *msg = nil ; if(error){ msg = @"保存图片失败" ; }else{ msg = @"保存图片成功" ; }}

方法2:使用Photos框架实现

2.1 Photos01-基本认识

PHAsset : 一个PHAsset对象就代表相册中的一张图片或者一个视频

PHAssetCollection : 一个PHAssetCollection 对象就代表一个相册

如果我们想保存图片到【相机胶卷】,首先要保证添加一个新的PHAsset对象,那么如何操作这些对象呢?无非是对这些对象进行增删改查。

PHAsset 一个PHAsset对象就代表相册中的一张图片或者一个视频

增删改 PHAssetChangeRequest 包括图片/视频相关的改动操作

[PHAsset fetchAssets...];

PHAssetCollection 一个PHAssetCollection 对象就代表一个相册

增删改 PHAssetCollectionChangeRequest 包括相册相关的所有改动操作

[PHAssetCollection fetchAssetCollectionsContainingAsset:...];

2.2 Photos02-保存图片到相机胶卷
//保存图片到【相机胶卷】    /// 异步执行修改操作    [[PHPhotoLibrary sharedPhotoLibrary]performChanges:^{        [PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image];    } completionHandler:^(BOOL success, NSError * _Nullable error) {        if (error) {            NSLog(@"%@",@"保存失败");        } else {            NSLog(@"%@",@"保存成功");        }    }];

2.3 Photos03-创建新的相册

NSError *error = nil;    [[PHPhotoLibrary sharedPhotoLibrary]performChangesAndWait:^{        //获取app名字                NSString *title = [NSBundle mainBundle].infoDictionary[(__bridge NSString*)kCFBundleNameKey];        //创建一个【自定义相册】        [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title];    } error:&error];

2.4 Photos04-查询相册

NSString *title = [NSBundle mainBundle].infoDictionary[(__bridge NSString*)kCFBundleNameKey];    //查询所有【自定义相册】    PHFetchResult
*collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; PHAssetCollection *createCollection = nil; for (PHAssetCollection *collection in collections) { if ([collection.localizedTitle isEqualToString:title]) { createCollection = collection; break; } }if (createCollection == nil) { //当前对应的app相册没有被创建 //创建一个【自定义相册】 NSError *error = nil; __block NSString *createCollectionID = nil; [[PHPhotoLibrary sharedPhotoLibrary]performChangesAndWait:^{ //创建一个【自定义相册】 createCollectionID = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title].placeholderForCreatedAssetCollection.localIdentifier; } error:&error]; createCollection = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[createCollectionID] options:nil].firstObject; } NSLog(@"%@",createCollection);

2.5 Photos05-保存图片到自定义相册

// 1.先保存图片到【相机胶卷】    /// 同步执行修改操作    NSError *error = nil;    __block PHObjectPlaceholder *placeholder = nil;    [[PHPhotoLibrary sharedPhotoLibrary]performChangesAndWait:^{       placeholder =  [PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image].placeholderForCreatedAsset;    } error:&error];    if (error) {        NSLog(@"保存失败");        return;    }    // 2.拥有一个【自定义相册】    PHAssetCollection * assetCollection = self.createCollection;    if (assetCollection == nil) {        NSLog(@"创建相册失败");    }    // 3.将刚才保存到【相机胶卷】里面的图片引用到【自定义相册】    [[PHPhotoLibrary sharedPhotoLibrary]performChangesAndWait:^{        PHAssetCollectionChangeRequest *requtes = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection];        [requtes addAssets:@[placeholder]];    } error:&error];    if (error) {        NSLog(@"保存图片失败");    } else {        NSLog(@"保存图片成功");    }

 

 

转载于:https://www.cnblogs.com/dhui69/p/10974102.html

你可能感兴趣的文章
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>
MongoDB基本语法和操作入门
查看>>
学习笔记_vnpy实战培训day04_作业
查看>>
OCO订单(委托)
查看>>
学习笔记_vnpy实战培训day06
查看>>
回测引擎代码分析流程图
查看>>
Excel 如何制作时间轴
查看>>
matplotlib绘图跳过时间段的处理方案
查看>>
vnpy学习_04回测评价指标的缺陷
查看>>
iOS开发中遇到的问题整理 (一)
查看>>
Linux(SUSE 12)安装jboss4并实现远程访问
查看>>
Neutron在给虚拟机分配网络时,底层是如何实现的?
查看>>
netfilter/iptables全攻略
查看>>
Overlay之VXLAN架构
查看>>
Eclipse : An error occurred while filtering resources(Maven错误提示)
查看>>
在eclipse上用tomcat部署项目404解决方案
查看>>
web.xml 配置中classpath: 与classpath*:的区别
查看>>
suse如何修改ssh端口为2222?
查看>>
详细理解“>/dev/null 2>&1”
查看>>