[英]Reduce UIImage size is not working
我试图将我的图像大小减少到64000字节以下这是我的代码和日志。
NSData *beforeData = UIImageJPEGRepresentation(self.photo, 1.0);
NSLog(@"Size of Image(MB):%u",[beforeData length]/1048576);
float compression = 0.6;
NSData* imgData = UIImageJPEGRepresentation(self.photo, compression);
while ([imgData length] > 400) {
compression -= 0.1;
imgData = UIImageJPEGRepresentation(self.photo, compression);
}
UIImage *result = [[UIImage alloc] initWithData:imgData];
NSData *data = UIImageJPEGRepresentation(result, 1.0);
NSLog(@"Size of Image(MB):%u",[data length]/1048576);
日志 :
我不知道为什么尺寸保持不变..也许我需要使用
[data writeToFile:filePath atomically:YES];
由于您只是在循环中更改JPEG压缩,因此文件大小会减小。 但是,当你创建UIImage
从JPG数据的大小,的UIImage
不depened的JPG数据的大小。
UIImage
的大小基于高度x宽度x 4(以字节为单位)。
好吧,有一件事是压缩图像的大小另一件事是打开到内存然后再次保存的图像的大小。
我会试着举个例子:说你要去度假,你需要把很多东西放在一个袋子里,它们不适合放在里面,你必须压缩它们。
要做到这一点,你坐在袋子的顶部,然后关闭它。
稍后再次打开它并尝试关闭而不再压缩。
这就是你在做什么。
如果要减小图像的大小,则应减小像素区域,如果要保留像素尺寸,可以将压缩值保存在局部变量中。
打开的图像将占用如下内容: H
x W
x number of channel
number of bit for channel
x number of channel
number of bit for channel
。 这意味着具有4通道RGBA 8位(每个1字节)的图像将占用:H x W x 4字节
您正在以1.0压缩率记录图像的大小。 为什么不在最后一行记录[imgData length]
而不是[data length]
?
NSData *beforeData = UIImageJPEGRepresentation(self.photo, 1.0);
NSLog(@"Size of Image(MB):%u",[beforeData length]/1048576);
float compression = 0.6;
NSData* imgData = UIImageJPEGRepresentation(self.photo, compression);
while ([imgData length] > 400) {
compression -= 0.1;
imgData = UIImageJPEGRepresentation(self.photo, compression);
}
UIImage *result = [[UIImage alloc] initWithData:imgData];
NSLog(@"Size of Image after (MB):%u",[imgData length]/1048576);
不要从压缩数据创建新图像。 如果压缩确实减少了数据长度,那么最终会产生无限循环。 只需将三行更改为:
NSLog(@"Size of Image(MB):%u",[imgData length]/1048576);
当我想要打印时
NSLog(@"Size of Image(MB):%u",[imgData length]/1048576);
它看起来没问题,但是当我从刚刚创建的NSData再次创建图像时,大小将恢复为2MB。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.