iOS 获取相册原图

来源:互联网 发布:淘宝旗袍模特周婷资料 编辑:程序博客网 时间:2024/04/28 21:59

因为软件需要,需要上传iOS相册原图,但是网上的资料也找了很多。获取到原图的话,我有两个思路,一个是根据ALAssetsLibrary里的ALAssetRepresentation:

            ALAssetRepresentation *assetRep = [asset defaultRepresentation];

            CGImageRef imgRef = NULL;

             imgRef = [assetRep fullResolutionImage];

              orientation = [assetRep orientation];

            UIImage* image = [UIImage imageWithCGImage:imgRef scale:1.0f                           orientation:orientation];

            data = UIImageJPEGRepresentation(image, 1.0f);

          注意UIImageJPEGRepresentation , 后面的压缩比例,设为1.0是不压缩,但是这样转化过来的NSdata,都会比原图大,翻查了很多资料,因为fullResolutionImage 是高清原图,没经过处理的图片,这一种方法不行了。

 第二个思路,获取到图片的相册原始路径  所以我找到了这个,NSURL *URL=[dict objectForKey:@"UIImagePickerControllerReferenceURL"];  不管我怎么去拼接都无法获取到一个正确的路径,查了很多资料,都说iOS的机制是这样的,获取到的也只是相对路径所以这个思路也不行了


正确方法:

  NSURL *imageAssetUrl = [dict objectForKey:UIImagePickerControllerReferenceURL];

        

        ALAssetsLibrary *assetLibrary=[[ALAssetsLibrary allocinit];

        

        [assetLibrary assetForURL:imageAssetUrl resultBlock:^(ALAsset *asset)  {

            

            ALAssetRepresentation* representation = [asset defaultRepresentation];

            

            // 创建一个buffer保存图片数据

            

            uint8_t *buffer = (Byte*)malloc(representation.size);

            

            NSUInteger length = [representation getBytes:buffer fromOffset0.0  length:representation.size error:nil];

            

            // buffer转换为NSData object,然后释放buffer内存

            //这边获取到的NSdata  转化为图片后,参数信息,和占用内存都是一样了的,

            data = [[NSData allocinitWithBytesNoCopy:buffer length:representation.size freeWhenDone:YES];

            

            

            

            

            

            //对象存储到 NSUserDefaults 中  这边不用看   我是将多张图片写入本地沙盒

            NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

            

            int last = [[user objectForKey:@"i"intValue];

            

            NSLog(@"%d",last);

            

            int now=0;

            if (last==0) {

                last=1;

            }

          

            now=last+1;

            [user setInteger:now forKey:@"i"];

            

            filePath = [NSString stringWithFormat:@"%@/%@%03d.%@", docsPath, CDV_PHOTO_PREFIX, last++, @"jpg"];

            

            NSLog(@"++%@",filePath);

            

            [data writeToFile:filePath  atomically:NO];

            

            

            [resultStrings addObject:filePath]; 

    

            result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OKmessageAsArray:resultStrings];

            if (x==info.count-1) {

                //完成

                [self bbb:result];

               

            }


        } failureBlock:^(NSError *error) {

            

            //失败的处理

            

        }];


写的不明白的问题  可以加我的QQ 讨论 1627737545  (骚扰勿加,谢谢)

 

原创粉丝点击