【问题标题】:Compress image at the time of uploading上传时压缩图片
【发布时间】:2013-11-22 23:15:03
【问题描述】:

我想在服务器上上传图片。 但在上传之前,我想压缩该图像,然后上传到服务器。我不想上传超过 2 mb 的图像。 我已经使用了这个逻辑,但是如果图像大小太大,那么它不会运行。在处理过程中,循环数和占用的内存增加到 1 GB。

 double compressionRatio=1;
 NSData *imgData=UIImagePNGRepresentation(proImage.image,compressionRatio);
   while ([imgData length]>50000) {
    compressionRatio=compressionRatio*50;
    imgData=UIImageJPEGRepresentation(proImage.image,compressionRatio);
   }

【问题讨论】:

  • 为什么在while循环之前使用PNG表示?而compressionRatio 应该介于 0.0(最大压缩)和 1.0(无压缩)之间。文档是你的朋友:developer.apple.com/library/iOS/documentation/UIKit/Reference/…
  • @rokjarc 告诉我在发送到服务器之前如何压缩图像
  • 2MB 等于 2097152 字节而不是 50000 字节。

标签: ios image compression


【解决方案1】:

请看UIImageJPEGRepresentation documentation

NSData * UIImageJPEGRepresentation (
   UIImage *image,
   CGFloat compressionQuality
);

compressionQuality = 0.0; ... max compression
compressionQuality = 1.0; ... min compression

你可以试试这样的:

NSData *imgData=UIImagePNGRepresentation(proImage.image,compressionRatio);

if ([NSData length] > maxSizeThatYouWant) {

    CGFloat compressionNeeded = (CGFloat)[NSData length]/(CGFloat)maxSizeThatYouWant;

    imgData=UIImageJPEGRepresentation(proImage.image,compressionNeeded);
}

【讨论】: