保存图片到指定相册 支持创建新相册

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_30657013/article/details/51801560

保存图片到指定相册 支持创建新相册

       现在工程中遇到一个问题,在选择页面中需要集成一个相机按钮,拍照后相册中要实时更新,下面贴一下保存图片到相册的代码,做了一个相册判断要不然会有可能出现重名的相册,或者同张照片会重复.

.h

#import 
#import 
@interface CreateAlbumGroup : NSObject
@property(nonatomic)ALAsset *savedImageAlasset;
//当前选中的相册 主要是为了区分是不是系统相册 因为可能会创建出一个与系统相册同名的相册
@property(nonatomic)ALAssetsGroup *selectGroup;
#pragma mark - 在手机相册中创建相册 并保存照片
//groupName 要保存的相册名称 imageData 要保存的图片数据
- (void)createAlbumInPhoneAlbumWithGroupName:(NSString *)groupName andImageData:(NSData *)imageData;
@end

.m
#import "CreateAlbumGroup.h"
#import "AssetHelper.h"
@implementation CreateAlbumGroup


#pragma mark - 在手机相册中创建相册 并保存照片
- (void)createAlbumInPhoneAlbumWithGroupName:(NSString *)groupName andImageData:(NSData *)imageData
{
    ALAssetsLibrary *assetsLibrary = [AssetHelper defaultAssetsLibrary];
    //如果是系统相册 系统相册type 为16
    NSString *groupType = [NSString stringWithFormat:@"%@",[self.selectGroup valueForProperty:ALAssetsGroupPropertyType]];
    if([groupType isEqualToString:@"16"])
    {
        UIImage *returnedImage = [UIImage imageWithData:imageData];
        [assetsLibrary writeImageToSavedPhotosAlbum:returnedImage.CGImage orientation:(ALAssetOrientation)(returnedImage.imageOrientation) completionBlock:^(NSURL *assetURL, NSError *error)
         {
             if(error)
             {
                 NSLog(@"保存失败");
             }
             else
             {
                 NSLog(@"保存成功   %@",assetURL);
                 ALAssetsLibrary *assetLibrary = [AssetHelper defaultAssetsLibrary];
                 [assetLibrary assetForURL:assetURL resultBlock:^(ALAsset *asset) // substitute YOURURL with your url of video
                  {
                      //asset即为保存后的照片对象 发通知照片已经保存
                      [[NSNotificationCenter defaultCenter]postNotificationName:@"saveCameraPhoto" object:nil];
                  }
                              failureBlock:^(NSError *err) {
                                  NSLog(@"Error: %@",[err localizedDescription]);
                              }];
                 
             }
             
         }];
        return;
    }
        NSMutableArray *groups=[[NSMutableArray alloc]init];
        ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop)
        {
            if (group)
            {
                [groups addObject:group];
            }
            else
            {
                BOOL haveHDRGroup = NO;
                for (ALAssetsGroup *gp in groups)
                {
                    NSString *name =[gp valueForProperty:ALAssetsGroupPropertyName];
                    if ([name isEqualToString:groupName])
                    {
                        haveHDRGroup = YES;
                    }
                }
                             
                if (!haveHDRGroup)
                {
                    //do add a group named "XXXX"
                    [assetsLibrary addAssetsGroupAlbumWithName:groupName
                                                   resultBlock:^(ALAssetsGroup *group)
                    {
                        [groups addObject:group];
                    }
                                                  failureBlock:nil];
                    haveHDRGroup = YES;
                }
            }
        };
        //创建相簿
        [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:listGroupBlock failureBlock:nil];
         
        [self saveToAlbumWithMetadata:nil imageData:imageData customAlbumName:groupName completionBlock:^
              {
                      //这里可以创建添加成功的方法
                 
                  }
               failureBlock:^(NSError *error)
              {
                      //处理添加失败的方法显示alert让它回到主线程执行,不然那个框框死活不肯弹出来
                      dispatch_async(dispatch_get_main_queue(), ^{
                               
                              //添加失败一般是由用户不允许应用访问相册造成的,这边可以取出这种情况加以判断一下
                              if([error.localizedDescription rangeOfString:@"User denied access"].location != NSNotFound ||[error.localizedDescription rangeOfString:@"用户拒绝访问"].location!=NSNotFound){
                                      UIAlertView *alert=[[UIAlertView alloc]initWithTitle:error.localizedDescription message:error.localizedFailureReason delegate:nil cancelButtonTitle:NSLocalizedString(@"ok", nil) otherButtonTitles: nil];
                                      [alert show];
                                       }
                          });
                  }];
}

- (void)saveToAlbumWithMetadata:(NSDictionary *)metadata
                      imageData:(NSData *)imageData
                customAlbumName:(NSString *)customAlbumName
                completionBlock:(void (^)(void))completionBlock
                   failureBlock:(void (^)(NSError *error))failureBlock
{
        ALAssetsLibrary *assetsLibrary = [AssetHelper defaultAssetsLibrary];
        void (^AddAsset)(ALAssetsLibrary *, NSURL *) = ^(ALAssetsLibrary *assetsLibrary, NSURL *assetURL) {
                [assetsLibrary assetForURL:assetURL resultBlock:^(ALAsset *asset)
            {
                        [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
                             
                                if ( [[group valueForProperty:ALAssetsGroupPropertyPersistentID] isEqualToString:[self.selectGroup valueForProperty:ALAssetsGroupPropertyPersistentID]])
                                {
                                        [group addAsset:asset];
                                    
                                        if (completionBlock)
                                        {
                                           //asset是新建相册后保存的照片对象 发通知照片已经保存
                                             [[NSNotificationCenter defaultCenter]postNotificationName:@"saveCameraPhoto" object:nil];
                                           
                                                completionBlock();
                                        }
                                    }
                            } failureBlock:^(NSError *error) {
                                    if (failureBlock) {
                                            failureBlock(error);
                                        }
                                }];
                    } failureBlock:^(NSError *error) {
                            if (failureBlock) {
                                    failureBlock(error);
                                }
                        }];
            };
        [assetsLibrary writeImageDataToSavedPhotosAlbum:imageData metadata:metadata completionBlock:^(NSURL *assetURL, NSError *error) {
                if (customAlbumName) {
                        [assetsLibrary addAssetsGroupAlbumWithName:customAlbumName resultBlock:^(ALAssetsGroup *group) {
                                if (group) {
                                        [assetsLibrary assetForURL:assetURL resultBlock:^(ALAsset *asset) {
                                                [group addAsset:asset];
                                                if (completionBlock) {
                                                        completionBlock();
                                                    }
                                            } failureBlock:^(NSError *error) {
                                                    if (failureBlock) {
                                                            failureBlock(error);
                                                        }
                                                }];
                                    } else {
                                            AddAsset(assetsLibrary, assetURL);
                                         NSLog(@"2");
                                        }
                            } failureBlock:^(NSError *error) {
                                    AddAsset(assetsLibrary, assetURL);
                                }];
                    } else {
                            if (completionBlock) {
                                NSLog(@"3");
                                    completionBlock();
                                }
                        }
            }];
}
@end


猜你喜欢

转载自blog.csdn.net/sinat_30657013/article/details/51801560
今日推荐