gpt4 book ai didi

ios - imageWithData图像大小变大了吗?

转载 作者:行者123 更新时间:2023-12-01 17:51:36 25 4
gpt4 key购买 nike

我使用imageWithData方法创建一个UIimage:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *chosenImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
NSData *data1 = UIImageJPEGRepresentation(chosenImage, 1);
NSData *data2 = UIImageJPEGRepresentation(chosenImage, 0.5);
NSLog(@"data1 = %lu;;;;;;;data2 = %lu",[data1 length],[data2 length]);

UIImage *nimg = [UIImage imageWithData:data2];
NSData *data30 = UIImageJPEGRepresentation(nimg, 1);
NSData *data31 = UIImageJPEGRepresentation(nimg, 0.8);
NSLog(@"data30 = %lu;;;;;;data31 = %lu;;;;;;",[data30 length],[data31 length]);
}

我得到以下输出:
data1 = 1751828;;;;;;;data2 = 254737

data30 = 1368455;;;;;;data31 = 387174;;;;;;

为什么data30比data2大得多?

最佳答案

因为它仍然代表以JPEG允许的最小数据丢失量存储的该分辨率的图像。

这是一个(不完美的)类比。想象一下拿一张CD(高质量音频)并将其翻录到一个非常低质量的MP3文件中。该文件很小,听起来很糟糕。现在,使用iTunes将MP3文件刻录到CD-R上。如果您播放该CD,它仍然听起来很糟糕,但这是可怕声音数据的完整存储。现在将该CD-R撕成最高质量的MP3。您希望它产生与刻录CD的低质量MP3相同的大小吗?不,因为您要让iTunes以很高的质量编码完整尺寸的声音信号。您正在做大量工作来“保留”高质量的音频数据流。

与您的图像相同。您正在以某个X * Y分辨率拍摄原始位图。您正在对其进行非常无损的编码,该编码旨在通过抛出大量信息来占用少量磁盘空间。然后,您将其解码回完整的X * Y大小的位图,该位图现在具有其自己的(不同)复杂性集合,这些复杂性是从其压缩方式出现的。然后,您将以很高的质量对该位图进行编码。这将保留其几乎所有可见的复杂性,但仍然令人费解。

(您确实看到data1data30之间存在实质性差异,这是此处最接近的苹果与苹果之间的比较。data1是当您保留JPEG所允许的尽可能多的信息时发生的事情。data30的大小减小表示您丢失了什么当您首先完成将其编码为data2的步骤时。)

关于ios - imageWithData图像大小变大了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28845838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com