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