nic*_*ice 1 uiimage uiimagejpegrepresentation ios
我使用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]);
}
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
data1 = 1751828;;;;;;;data2 = 254737
data30 = 1368455;;;;;;data31 = 387174;;;;;;
Run Code Online (Sandbox Code Playgroud)
为什么data30比data2大得多?
因为它仍然代表以JPEG允许的最小数据丢失量存储的那种分辨率的图像。
这是一个(不完美的)类比。想象一下拿一张CD(高质量音频)并将其翻录到一个非常低质量的MP3文件中。该文件很小,听起来很糟糕。现在,使用iTunes将MP3文件刻录到CD-R上。如果您播放该CD,它仍然听起来很糟糕,但这是可怕声音数据的完整存储。现在将该 CD-R 撕成最高质量的MP3。您是否希望它产生与刻录CD的低质量MP3相同的大小?不,因为您要让iTunes以很高的质量编码完整尺寸的声音信号。你做了很多工作,以高品质是什么“保留” 恰好是一个糟糕的声音数据流。
与您的图像相同。您正在以某个分辨率X * Y拍摄原始位图。您正在对其进行非常无损的编码,该编码被设计为通过抛出大量信息来占用少量磁盘空间。然后,您将其解码回完整的X * Y大小的位图,该位图现在具有它自己的(不同)复杂性集合,这些复杂性是从碰巧被压缩的方式出现的。然后你在编码是在位非常高的质量。这将保留几乎所有其可见的复杂性,但仍然令人费解。
(您看到您之间的重大差异data1和data30,这是这里的最接近苹果对苹果的比较,data1就是当你把尽可能多的信息JPEG允许发生了什么。在尺寸的下降,以data30显示了当你经历了,你失去了什么data2首先将其编码的步骤。)
| 归档时间: |
|
| 查看次数: |
695 次 |
| 最近记录: |