一、C语言函数方式实现app
注意: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框架实现异步
PHAsset : 一个PHAsset对象就表明相册中的一张图片或者一个视频
PHAssetCollection : 一个PHAssetCollection 对象就表明一个相册函数
若是咱们想保存图片到【相机胶卷】,首先要保证添加一个新的PHAsset对象,那么如何操做这些对象呢?无非是对这些对象进行增删改查。fetch
PHAsset
一个PHAsset对象就表明相册中的一张图片或者一个视频
增删改 PHAssetChangeRequest 包括图片/视频相关的改动操做spa查 [PHAsset fetchAssets...];代理
PHAssetCollection
一个PHAssetCollection 对象就表明一个相册
code增删改 PHAssetCollectionChangeRequest 包括相册相关的全部改动操做orm
查
[PHAssetCollection fetchAssetCollectionsContainingAsset:...];
视频
//保存图片到【相机胶卷】 /// 异步执行修改操做 [[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(@"保存图片成功"); }