zoukankan      html  css  js  c++  java
  • 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(@"保存图片成功");
        }
  • 相关阅读:
    HEW MAP文件使用
    UltraEdit 脚本 实现查找替换
    PC软件与PLC串口通信 奇偶检验问题
    Halcon的应用程序 打开后 弹出没有帮助文件错误提示
    STM32f4 ARM Bootloader
    RAM
    知识整理--内存
    CentOS 5.x 多个ISO文件 安装方法(VMware)
    Modbus总结
    【CF1253A】Single Push【模拟】
  • 原文地址:https://www.cnblogs.com/dhui69/p/10974102.html
Copyright © 2011-2022 走看看