ALAsset Library 减小图像的大小,同时将其保存在照片库中

Posted

技术标签:

【中文标题】ALAsset Library 减小图像的大小,同时将其保存在照片库中【英文标题】:ALAsset Library reduces the size of image while saving it in photo library 【发布时间】:2012-12-10 13:48:02 【问题描述】:

我正在创建一个应用程序,它允许用户使用 UIImagePickerController 从照片库中选择图像,然后使用 ALAssets 库保存图像。 但是我的应用程序保存的图像的质量和大小之间存在差异。与从照片库中挑选的原始图像相比。

我添加了日志记录以检查被拾取的图像的大小以及使用 ALAsset 库保存在照片库中的图像。

-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info

   UIImage *image = [info
                     objectForKey:UIImagePickerControllerOriginalImage];
   NSLog(@"Size of the image picked in bytes: %i",[UIImageJPEGRepresentation(image,1.0f) length]);


-(void)methodToSaveImage:(UIImage*)image metadata:(NSMutableDictionary*)info

    @autoreleasepool 
        NSLog(@"Size of image passed to be saved: %i",[UIImageJPEGRepresentation(image,1.0f) length]);
        [self writeImageToSavedPhotosAlbum:image.CGImage metadata:info
                           completionBlock:^(NSURL* assetURL, NSError* error) 

                               //error handling
                               if (error!=nil) 
                                   return;
                               
                               ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
                               
                                   NSLog(@"Size of image after being saved in photo library : %i",[myasset defaultRepresentation].size);
                               ;

                               //
                               ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
                               
                                   NSLog(@"cant get image - %@",[myerror localizedDescription]);
                               ;

                               [self assetForURL:assetURL
                                    resultBlock:resultblock
                                    failureBlock:failureblock];


        ];
    

图像的大小(以字节为单位)在被选中并传递以保存时是相等的,大约为 4 MB。但保存在照片库中的图像大小只有 2 MB 多一点。请告诉我为什么图像有差异?我该怎么做才能以与原始图像完全相同的大小保存图像?

【问题讨论】:

这将有助于***.com/questions/12355589/… 【参考方案1】:

我也在寻找相同的答案。但是,如果您要生成两个图像的校验和(写入之前和写入之后)。然后使用:

NSData* data =  UIImageJPEGRepresentation(copyOfOriginalImage, 1);
NSLog(@"The Read Image MD5: %@",[data MD5]);

校验和将保持不变。但仍然存在大小差异。

【讨论】:

以上是关于ALAsset Library 减小图像的大小,同时将其保存在照片库中的主要内容,如果未能解决你的问题,请参考以下文章

减小图像大小后如何将图像上传到firebase反应本机

在 UIWebView img 标签中使用 ALAsset 照片

为啥当我减小图像大小时,球体特征大小不会同时减小?

在 PySide 中减小图像的大小

Android - 减小图像文件大小

如何使用 PIL 减小图像文件大小