将位图转换为固定大小

时间:2016-01-06 09:01:23

标签: android image bitmap

例如,我有一个10mb的图像;我想转换为300kb。我经历了很多例子 用过

bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);

(此处将100更改为较小的值会减小尺寸但是如何导致尺寸接近300-350kb)

BitmapFactory.decodeFile(filePath, options);

我提供的地方

options.inSampleSize = 5 /*sample*/;

但不知怎的,我错过了什么。

更新 转换为11mb到2mb。如果我找到更好的方法,将会更新。

2 个答案:

答案 0 :(得分:2)

我认为因为PNG是无损的,所以质量参数没有效果。它不会“压缩”你的PNG。然而,这种方法适用于jpg:

使用binary search进行试验和错误会让您很快关闭,3-4次尝试可能取决于可接受范围的大小。

int minQuality = 10;
int maxQuality = 100;
long size = 0;
while(true) {
  int mid = (maxQuality + minQuality)/2;        
  long size = compress(mid);

  if (size > minSize) { //too large
     if (maxQuality == minQuality){
       throw new RuntimeException("Cannot compress this image down in to this size range.");
     }
     maxQuality = mid - 1;
     continue;
  }

  if (size < maxSize) { //too small
     if(maxQuality == 100){
       break; //this means the image is smaller than the acceptable range even at 100
     }
     minQuality = mid + 1;
     continue;
  }

  break;//done, falls in range 
}

答案 1 :(得分:0)

有两个选项

  1. 使用图像处理或Android的某些图像处理api降低图像的对比度或使用图像处理api进行采样
  2. 重复bmp.compress(Bitmap.CompressFormat.PNG,100,stream);通过将图像存储在外面并在每次读取时多次