imageWithData图像尺寸变大了?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了imageWithData图像尺寸变大了?相关的知识,希望对你有一定的参考价值。
我使用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大小的位图,它现在有一套(不同的)复杂性,它们从它被压缩的方式中产生。然后,您正在以非常高的质量编码该位图。这将保留几乎所有可见的复杂性,但仍然看起来很糟糕。
(你确实看到你的data1
和data30
之间存在重大差异,这是最接近的苹果对苹果比较.data1
就是当你保留尽可能多的信息时所发生的事情.Qazxswpoi的大小下降显示你丢失了什么当你首先完成将它编码到data30
的步骤时。)
以上是关于imageWithData图像尺寸变大了?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用“imageWithData”保存和检索UIImages保持正确的图像格式?
为啥图片经过美图秀秀修改以后就变大了? 我的图片上上水印之后就 超过1M了