例如,我有一个10mb的图像;我想转换为300kb。我经历了很多例子 用过
bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);
(此处将100更改为较小的值会减小尺寸但是如何导致尺寸接近300-350kb)
和
BitmapFactory.decodeFile(filePath, options);
我提供的地方
options.inSampleSize = 5 /*sample*/;
但不知怎的,我错过了什么。
更新 转换为11mb到2mb。如果我找到更好的方法,将会更新。
答案 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)
有两个选项