美文网首页iosiOS点点滴滴iOS移动开发
IOS 批量导照片的实现方法

IOS 批量导照片的实现方法

作者: caiwenshu | 来源:发表于2015-07-28 10:08 被阅读234次

需求:

可以从相册中导入100+以上的照片到我们的App中,并且导入的时候需要对图片先压缩,后保存

解决方法:

对于大量的图片使用for each 循环,会在导入10张左右的时候出现内存警告。
所以得使用 dispatch_queue_t来实现串行导入

dispatch_queue_t queue = dispatch_queue_create("yunyou.photo", DISPATCH_QUEUE_SERIAL);
dispatch_group_t group = dispatch_group_create();
    
@autoreleasepool {

for (ALAsset *assetBlock in array) {

    dispatch_block_t task = ^(void) {
        
      @autoreleasepool {
        
        DDLogInfo(@"execute 顺序:%d",[array indexOfObject:assetBlock]);

        //获取资源图片的详细资源信息
        ALAssetRepresentation* representation = [assetBlock defaultRepresentation];
        //获取资源图片的高清图
        CGImageRef imageRef = [representation fullResolutionImage];
        //图片资源原数据
        NSMutableDictionary *imageMetadata = [[representation metadata] mutableCopy];

        UIImage *image = [UIImage imageWithCGImage:imageRef 
                                            scale:representation.scale 
                                            orientation:(UIImageOrientation)representation.orientation];
          
        //修复apple跟ios的旋转不一致的问题
        image = [YYUtils fixOrientationOfImage:image];
        [imageMetadata setImageOrientation:image.imageOrientation];
          
        NSData *defaultData = UIImageJPEGRepresentation(image, 1.0);
          
       //压缩图片
        image = [self compressedImageToUpload:defaultData];

          representation = nil;
          imageMetadata = nil;
          image = nil;

        dispatch_async(dispatch_get_main_queue(), ^{
        
            if (processBlock) {
                processBlock([array indexOfObject:assetBlock],[array count],nil);
            }
        
            DDLogInfo(@"dispatch_get_main_queue execute 顺序%d",
                    [array indexOfObject:assetBlock] );
            
        });
      };
        
    };

   //串行的执行导入
    dispatch_group_async(group, queue, task);
}


//等待所有的图片导入完成
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
DDLogInfo(@"dispatch_group_notify execute ");

//执行完成
completeBlock(nil,[tempTravelPicturesArray count]);
});
    ```

相关文章

  • IOS 批量导照片的实现方法

    需求: 可以从相册中导入100+以上的照片到我们的App中,并且导入的时候需要对图片先压缩,后保存 解决方法: 对...

  • App Languages 批量化导入管理iOS多语言文案

      自己最近开发了一款软件 App languages可以实现可视化的形式管理iOS、mac多语言文案,支持批量导...

  • iOS Search API - NSUserActivity

    NSUserActivity类是iOS8用来实现handoff的, iOS9中提供的新方法帮助你索引用户活动, 导...

  • 批量删照片方法

    在iphone里删照片,可以先点右上角“选择”,然后手指从左到右一划,就可以选取一横排照片删掉。 还可以对角线一划...

  • iOS 和 js 交互

    js调用iOS代码 1、iOS定义方法 2、实现方法 3、js端实现方法 js给iOS传参数 1、单个参数 2、多...

  • 移动端图片批量上传问题

    一.操作系统 1.ios ios的操作系统: 实现图片批量上传,可以直接使用input type=file 加上m...

  • 批量重命名照片方法

    因为需要归档照片到网盘和其他存储介质,拍摄时的名字毫无意义,不方便查看。所以需要对照片、视频等拍摄资源进行重命名,...

  • Shell 中利用FIFO实现多进程tar解压的方法

    上文Shell中使用tar命令批量解压缩的实现方法中提到我使用循环的方法批量解压tar文件,但是单进程的解压耗时太...

  • JPA篇

    JPA添加、修改、删除的实现 JpaRepository接口方法: delete 删除或批量删除 findAll ...

  • 点击拍照

    实现pick的代理方法,然后在代理方法中实现照片预览。

网友评论

  • 小凡凡520:一个 pick不就搞定??? 还这么麻烦
    小凡凡520:@caiwenshu 我发现自己搞错了 pickerviewcontroller智能单个的导入。。 :cold_sweat:
    小凡凡520:@caiwenshu pickviewcontroller
    caiwenshu:@小凡凡520 pick是什么

本文标题:IOS 批量导照片的实现方法

本文链接:https://www.haomeiwen.com/subject/sopmqttx.html