为什么使用 UIImageJPEGRepresentation 和通过 localpath 获取图像之间相同图像的数据大小/长度不同

liangju
    - (void)imagePickerController:(TZImagePickerController *)picker           
       didFinishPickingPhotoModes:(NSArray<RHPhotoModel *> *)photos  
                     sourceAssets:(NSArray *)assets           
            isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto      
                        infoArray:(NSArray *)infoArray {

            for (RHPhotoModel *model in photos) {
               UIImage *tmpImage = [UIImage imageWithContentsOfFile:model.photoPath];
               NSData *data1  = UIImageJPEGRepresentation(tmpImage,1);

               NSData *data2 = [NSData dataWithContentsOfFile:model.photoPath];

               UIImage *image = [UIImage imageWithData:data2];
               NSData *data3  = UIImageJPEGRepresentation(image,1);

               NSLog(@"data1=%lu, data2=%lu, data3=%lu", (unsigned long)data1.length, (unsigned long)data2.length, (unsigned long)data3.length);
        }

     [self dismissViewControllerAnimated:YES completion:nil];
 }

使用上述方法完成返回包含图像 photoPath 的 PhotoModel;
为什么我使用 [NSData dataWithContentsOfFile:model.photoPath];
data2 是 2497519 字节;
但是,我使用 UIImage *tmpImage = [UIImage imageWithContentsOfFile:model.photoPath]; NSData *data1 = UIImageJPEGRepresentation(tmpImage,1); data1 是 7234468 字节;

NSLog 数据:data1 = 7234468(字节),data2 = 2497519(字节),data3 = 7234468(字节)

在此处输入图片说明

火芒果

这就是JPEG格式的用途——“压缩数据”。有关.jpg格式的信息可以在此处的Wikipedia 上找到然而,这背后的数学可能有点复杂。

基本思想是我们希望以更小的尺寸保存相同的图像数据,因此我们使用不同的压缩算法将图像转换为更小的图像。压缩数据可以是lossylossless例如,PNG是无损的,这意味着质量将保持不变,而JPEG更常用的是有损压缩。

只需将压缩视为ZIP计算机上的文件,它会使文件大小更小。在 Xcode 中,JPEG当压缩质量设置为 1 时文件的大小可能会大于原始文件。但是,使用较低的压缩质量会导致压缩文件变得更加模糊或颜色怪异。

根据我的经验,我意识到将压缩质量设置为 0.4~0.5 可以在文件大小适中的情况下保持更好的质量。希望这可以帮助:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档