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<PHAssetCollection *> *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(@"保存图片成功");
}

iOS 保存图片(视频)到相册的更多相关文章

  1. IOS 保存图片至相册

    IOS 保存图片至相册   应用中有时我们会有保存图片的需求,如利用UIImagePickerController用IOS设备内置的相机拍照,或是有时我们在应用程序中利用UIKit的 UIGraphi ...

  2. ios获取摄像头与相册图片

    iOS的一些设备上都安装了摄像头.现在绝大多数都有了. 在编程中,我们是用相应的东西来进行照相,录像等功能.   一.UIImagePickerController类 UIImagePickerCon ...

  3. iOS实现视频和图片的上传

    关于iOS如何实现视频和图片的上传, 我们先理清下思路 思路: #1. 如何获取图片? #2. 如何获取视频? #3. 如何把图片存到缓存路径中? #4. 如何把视频存到缓存路径中? #5. 如何上传 ...

  4. 微信小程序点击保存图片到本地相册——踩坑

    在微信小程序中要保存图片到本地相册,需要获取相册权限. 总之整个功能实现下来需要如下几个小程序的API:wx.getSetting,wx.authorize,wx.openSetting,wx.dow ...

  5. ios 音视频实现边播边缓存的思路和解决方案 (转)

    本片为转载内容,主要是以后自己看起来方便一些 原文地址:iOS音视频实现边下载边播放 其实音视频本地缓存的思想都差不多,都需要一个中间对象来连接播放器和服务器. 近段时间制作视频播放社区的功能,期间查 ...

  6. app保存图片到用户相册时闪退解决办法

    在iOS11中,app保存图片到用户相册时必须添加权限使用描述即NSPhotoLibraryAddUsageDescription,否则会闪退. 只需在info.plist—Property List ...

  7. iOS 音频视频图像合成那点事

    代码地址如下:http://www.demodashi.com/demo/13420.html 人而无信不知其可 前言 很久很久没有写点什么了,只因为最近事情太多了,这几天终于闲下来了,趁此机会,记录 ...

  8. 修正iOS从照相机和相册中获取的图片 方向

    修正iOS从照相机和相册中获取的图片 方向   修正iOS从照相机和相册中获取的图片 方向 使用系统相机拍照得到的图片的默认方向有时不是ImageOrientationDown,而是ImageOrie ...

  9. 微信小程序例子-保存图片到手机相册

    微信小程序例子-保存图片到手机相册 1.关键代码 1)WXML文件 2)JS文件 saveImgToPhotosAlbumTap: function(){ // 图片必须是 https 的 var I ...

  10. 腾讯ios内部视频,什么垃圾视频

    前几天朋友在网上花钱买了个,腾讯ios内部视频,我也跟着下载了, 看着这列表,我感觉没什么东西,一看就是基础的东西,完全没有实战的内容,就像培训机构骗学生的东西啊,讲些毛理论,结果一到实战了,问个Sc ...

随机推荐

  1. Vue和React之间关于注册组件和组件间传值的区别

    注册组件 Vue中:1.引入组件:2.在components中注册组件:3.使用组件; React中:1.引入组件:2.使用组件; 子父传值 Vue中: 父组件向子组件传值: 1.在父组件中绑定值:2 ...

  2. 1.URLConnection

    //爬虫://1.请求到某个网站去//2.返回一些HTML代码//3.从HTML代码提取你想要的信息 HTML解析//4.如果这些HTML中又有你感兴趣的内容//5.递归爬取//准备好网址 URL u ...

  3. java表单基础

    一.表单  基本语法:   <form method="表单提交方式(post/get)" action="表单提交地址">       </ ...

  4. greenplum 存储过程

    参考: https://docs.pivotal.io/search?q=function   官网 https://www.cnblogs.com/greenZ/p/8722081.html htt ...

  5. 5G/NR 频带详解

    原文链接:http://www.sharetechnote.com/html/5G/5G_FR_Bandwidth.html 在NR中,3GPP中规定了大约两个大的频率范围.一个是我们通常所说的(su ...

  6. 第3节 sqoop:4、sqoop的数据导入之导入数据到hdfs和导入数据到hive表

    注意: (1)\001 是hive当中默认使用的分隔符,这个玩意儿是一个asc 码值,键盘上面打不出来 (2)linux中一行写不下,可以末尾加上 一些空格和 “ \ ”,换行继续写余下的命令: bi ...

  7. define可变参数,float数据传输

    define可变参数 一般在调试打印Debug信息的时候, 需要可变参数的宏. 从C99开始可以使编译器标准支持可变参数宏(variadic macros), 另外GCC也支持可变参数宏, 但是两种在 ...

  8. dom与jq基础使用

    js有两种运行环境,一个是浏览器,一个是服务器(NodeJS) js的本质是es,因为运行环境的不同,为了操作环境内的api做了升级 在浏览器上js分为es + dom + bom 在服务器上js又有 ...

  9. Service总结

    Service Service的应用场景,以及和Thread区别 开启Service的两种方式以及区别 Service基础 Service是什么? Service(服务)是一个可以在后台长时间运行而没 ...

  10. UVALive - 7752 Free Figurines

    题意:有n个娃娃,如果大娃娃j直接套小娃娃i,则fa[i] = j.若fa[i] = 0,则该娃娃自由.给出每个娃娃初始的父亲,和改变后的父亲,在满足以下合法操作的条件下,问最少需要多少次变换. 1. ...