方法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 = @"保存图片成功" ;     }
}

注意:使用该函数必须实现image:didFinishSavingWithError:contextInfo:代理方法,否则会崩溃。

方法2:使用PHPhotos框架实现

2.1 基本认识

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

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

包括图片/视频相关的改动操作
[PHAsset PHAssetChangeRequest :];
查
[PHAsset fetchAssets...];包括相册相关的所有改动操作
[PHAssetCollection PHAssetCollectionChangeRequest :];
查
[PHAssetCollection fetchAssetCollectionsContainingAsset:...];

注意:改动操作必须在performChanges:或者performChangesAndWait:的block中执行

//异步执行
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ // 这里执行改动操作 } completionHandler:^(BOOL success, NSError * _Nullable error) {if (error) {NSLog(@"%@",@"保存失败");    } else {NSLog(@"%@",@"保存成功");    }
}];
//同步执行
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{ // 这里执行改动操作
} error:&error];
if (error) {NSLog(@"%@",@"保存失败");
} else {NSLog(@"%@",@"保存成功");
}

如果直接使用 [PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image]; 则会出现崩溃

2.2 保存图片到相机胶卷+获取相片

//保存图片到【相机胶卷】// 异步执行修改操作[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{} completionHandler:^(BOOL success, NSError * _Nullable error) {if (error) {NSLog(@"%@",@"保存失败");} else {NSLog(@"%@",@"保存成功");}}];// 同步执行修改操作NSError *error = nil;__block NSString *assertId = nil;// 保存图片到【相机胶卷】[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{//不接收返回参数[PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image];//接收返回参数assertId =  [PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image].placeholderForCreatedAsset.localIdentifier;} error:&error];if (error) {NSLog(@"保存失败");return nil;}// 获取相片PHFetchResult<PHAsset *> *createdAssets = [PHAsset fetchAssetsWithLocalIdentifiers:@[assertId] options:nil];

2.3 创建新的相册+获取相册

【自定义相册】里面的图片来源于【相机胶卷】相册中,即:【相机胶卷】引用【自定义相册】,。

如果用户删掉【相机胶卷】里面的图片, 那么【自定义相册】重的图片也会删掉。

如果用户删掉【自定义相册】里面的图片, 那么【相机胶卷】中依然有该图片。

步骤:

a.先保存图片到【相机胶卷】(不能直接保存到自定义相册中)

b.拥有一个【自定义相册】

c.将刚才保存到【相机胶卷】里面的图片引用到【自定义相册】

//当前对应的app相册没有被创建NSError *error = nil;__block NSString *createCollectionID = nil;[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{//创建一个【自定义相册】(需要这个block执行完,相册才创建成功)//获取app名字 NSString *title = [NSBundle mainBundle].infoDictionary[(__bridge NSString*)kCFBundleNameKey];//创建一个【自定义相册】,不接收返回值 //[PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title]; //创建一个【自定义相册】,接收返回值 createCollectionID = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title].placeholderForCreatedAssetCollection.localIdentifier;} error:&error];if (error) {NSLog(@"创建相册失败");return nil;}// 根据唯一标识,获得刚才创建的相册PHAssetCollection *createCollection = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[createCollectionID] options:nil].firstObject;

2.4 保存图片到自定义相册

我们创建完相册之后,需要将【相机胶卷】中的图片放到【自定义相册】里面去。

核心代码如下:

// 1.先保存图片到【相机胶卷】并获取图片PHFetchResult<PHAsset *> *createdAssets = self.createdAssets;if (createdAssets == nil) {NSLog(@"保存图片失败");}// 2.拥有一个【自定义相册】并获取相册PHAssetCollection * assetCollection = self.createCollection;if (assetCollection == nil) {NSLog(@"创建相册失败");}// 3.将刚才保存到【相机胶卷】里面的图片引用到【自定义相册】NSError *error = nil;[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{PHAssetCollectionChangeRequest *requtes = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection];// [requtes addAssets:@[placeholder]];[requtes insertAssets:createdAssets atIndexes:[NSIndexSet indexSetWithIndex:0]];} error:&error];if (error) {NSLog(@"保存图片失败");} else {NSLog(@"保存图片成功");}

iOS保存图片到相册相关推荐

  1. ios 保存图片到相册 崩溃_iOS保存图片闪退

    问题描述 1.保存图片时调用了 UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)方法 2.个别测试机运行时APP闪退,XCode提示崩溃信息如下 ...

  2. ios 保存图片到相册 崩溃_iOS开发之 保存图片到相册(相机胶卷)

    平时开发APP时难免会遇到保存图片到相册的相关操作,具体我么可以直接保存到系统的相机胶卷, 也可以自定义相册保存图片,下面我们就一起来看一看. 保存图片到系统相册 先看看比较简单的直接保存图片到系统相 ...

  3. iOS - 保存图片至系统相册

    背景 本文而言,保存图片至相册功能相信基本上在开发中都能遇到,但是你在保存你原图大小至系统相册时,系统会主动的进行你图片的缩放和拉伸来适应它图片的展示,好吧,你老大,按你的来,当你按照它屏幕大小设置图 ...

  4. iOS小技能:保存图片到相册( 监听用户的相册授权动作)

    文章目录 引言 I 保存图片 1.1 直接保存图片对象 1.2 保持视图到相册 1.3 视图与保存的图片宽高的关系 II 相册权限处理 2.1 添加权限 2.2 监听第一次授权时,用户点击不允许和允许 ...

  5. Qt之打开IOS相册图片和保存图片到相册

    打开相册图片很简单,这里主要说明的是保存图片到相册的两种情况:1.已知图片路径,保存到相册:2.将QImage直接保存到相册 一.打开相册图片 这里需要设置xcode工程的相册权限Privacy - ...

  6. 【Ios】 Unity for iOS 打开相册、相机及保存图片到相册

    偶然在网上看到一位博主写的 unity 和ios 交互 个人感觉 功能很全 转载地址:http://blog.csdn.net/AnYuanLzh/article/details/50748928 在 ...

  7. iOS摄像头和相册-UIImagePickerController-浅析(转)

    iOS摄像头和相册-UIImagePickerController-浅析(转) 转自: http://blog.sina.com.cn/s/blog_7b9d64af0101cfd9.html 在一些 ...

  8. 保存图片到相册并打开微信扫一扫

    uni.downloadFile({ //保存图片到本地url: this.codeImg, //仅为示例,并非真实的资源success: (res) => {if (res.statusCod ...

  9. vue2.0 webApp保存图片到相册

    ios下a标签不能直接下载图片.为了兼容android和ios找到了h5plus.里面有个保存到相册的功能. 代码很简单,如下: saveImage{if(!window.plus) return;p ...

最新文章

  1. Redis之单线程 Reactor 模型
  2. iphone完整版的http上传请求协议
  3. 转载:python3 安装pycrypto
  4. 包python_Python 包:
  5. Alexnet结构及代码
  6. Spring Security --SecurityConfig的详细配置
  7. 单身狗救星!电子科大校长为理工科男脱单提建议
  8. 【报告分享】2022中国人工智能人才培养报告.pdf(附下载链接)
  9. 启动tomcat控制台日志出现乱码怎么办?
  10. 图形学中常用计算几何总结
  11. (原创)分享一下最近搞的tiny210V2从nand启动支持(K9GAG08U0F).
  12. Steam平台3款2D游戏开发软件对比(转)
  13. SublimeText 3汉化版安装教程和创建第一个HTML网页
  14. vbox android wifi,virtualbox桥接无线网卡实现上网
  15. 安卓手机突然很卡_为什么你的安卓手机越用越卡,真是内存不够?终于找到原因了!...
  16. QQ聊天机器人--基于酷Q写的插件
  17. 通过快递鸟如何接入圆通速递电子面单
  18. 肖秀荣8套卷2018pdf下载|2018肖秀荣冲刺8套卷pdf下载电子版
  19. 东方mmd巨大化_有什么东方mmd非常值得一看?
  20. FTP 文件传输协议

热门文章

  1. 在农业道路上越扎越深,拼多多看到了什么?
  2. 【工具神器】PO VO DTO 转换神器
  3. HTML/设置网页背景图片+背景透明度设置
  4. 方法引用错误:reason: no instance(s) of type variable(s) exist so that String conforms to Person
  5. python列表中的字典如何添加键值对_在Python中将键值对添加到字典中
  6. 24点游戏 计算机编程,关于24点游戏的编程思路与基本算法
  7. Linux命令学习资料总结
  8. 惊心动魄的开源项目“政变”,堪比宫斗...
  9. JSP+JDBC案例代码(数据维护)
  10. fla文件与as文件之间的绑定