减少UIImage大小不起作用

时间:2014-04-02 14:42:42

标签: ios iphone

我正在尝试将图像大小减少到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);

LOG

  • 图像尺寸(MB):2
  • 图像尺寸(MB):2

我不知道为什么尺寸保持不变..也许我需要使用

[data writeToFile:filePath atomically:YES];

5 个答案:

答案 0 :(得分:1)

由于您只是在循环中更改JPEG压缩,因此文件大小会减少。 但是,当您从JPG数据创建UIImage时,UIImage的大小并不取决于JPG数据的大小。

UIImage的大小基于高度x宽度x 4(以字节为单位)。

答案 1 :(得分:1)

嗯,有一件事是压缩图像的大小,另一件事是打开到内存然后再次保存的图像的大小。
我会试着举个例子:说你要去度假,你需要把很多东西放在一个袋子里,它们不适合它,你必须压缩它们。
要做到这一点,你坐在袋子的顶部,然后关闭它。
之后再次打开它并尝试关闭而不再压缩。
这就是你在做什么 如果要减小图像的大小,则应减小像素区域,如果要保留像素尺寸,可以将压缩值保存在局部变量中。
打开的图片会占用以下内容:H x W x number of channel x number of bit for channel。这意味着具有4通道RGBA 8位(每个1字节)的图像将占用:H x W x 4 字节

答案 2 :(得分:0)

您以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);

答案 3 :(得分:0)

不要从压缩数据创建新图像。如果压缩确实减少了数据长度,那么最终会产生无限循环。只需将三行更改为:

NSLog(@"Size of Image(MB):%u",[imgData length]/1048576);

答案 4 :(得分:0)

当我尝试打印时

NSLog(@"Size of Image(MB):%u",[imgData length]/1048576);

它看起来没问题,但是当我从刚刚创建的NSData再次创建图像时,大小将恢复为2MB。