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