iOS8之后, 保存图片到本地相册, 避免重复保存同一张

使用Photo Framework 框架中的  PHPhotoLibrary 操作



/**

 * 将网络保存到本地相册, 并存入缓存数组以便使用

 * imageUrl: 网络图片URL

 */

- (void)saveNetworkImageToAlbum:(NSString *)imageUrl{

    //判断本地是否存在相同图片的标识

    NSString *localIdentifier = [[NSUserDefaults standardUserDefaults] objectForKey:imageUrl];

    NSURL *fileURL = [NSURL URLWithString:imageUrl];

    NSData *imageData = [NSData dataWithContentsOfURL:fileURL];

    UIImage *image = [UIImage imageWithData:imageData];

    if (localIdentifier == nil) {

        [self execSavePhoto:image withUrl:imageUrl];

    }else {

        //根据本地图片的唯一标识符(localIdentifier),找到asset

        PHAsset * asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[localIdentifier] options:nil].firstObject;

        if (asset == nil) {

            [self execSavePhoto:image withUrl:imageUrl];

        }else {

            [_selectedPhotos addObject:image];

            [_selectedAssets addObject:asset];

        }

    }

}


/**

 * 调用PHPhotoLibrary库 保存图片

 */

- (void)execSavePhoto:(UIImage *)image withUrl:(NSString *)urlStr{

    if (iOS8Later){

        NSError *err = nil;

        __block PHAsset *phAsset = nil;

        [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{

            //写入图片到相册

            PHAssetChangeRequest *req = [PHAssetChangeRequest creationRequestForAssetFromImage:image];

            NSString *localIdentifier = req.placeholderForCreatedAsset.localIdentifier;

            phAsset = [PHAsset fetchAssetsWithLocalIdentifiers:@[localIdentifier] options:nil].firstObject;

        } error:&err];

        if (err) {

            NSLog(@"保存照片出错:%@",err.localizedDescription);

        }else {

            if (phAsset != nil) {

                //将存在本地的图片的唯一标识符,存入plist,便于判断本地是否存在该图片

                //key: 表示唯一的imageUrl value: 图片的唯一标识符(localIdentifier)

                [[NSUserDefaults standardUserDefaults] setObject:phAsset.localIdentifier forKey:urlStr];

                [[NSUserDefaults standardUserDefaults] synchronize];

                [_selectedPhotos addObject:image];

                [_selectedAssets addObject:phAsset];

            }

        }

    }

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值