iOS 保存圖片(視頻)到相冊


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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM