Android压缩具有不同的质量并不起作用

时间:2015-11-05 01:43:33

标签: android bitmap compression

当我在压缩之前和之后具有相同大小之后将质量从100更改为0(任何值)位图大小时。为什么?以及如何真正压缩它?

public static void checkSize(Bitmap tempBitmap, Context context) {
    Log.d("IMAGES_", "SIZE before = " + tempBitmap.getByteCount());
    Bitmap newBit = compress(tempBitmap, Bitmap.CompressFormat.PNG, 3);
    Log.d("IMAGES_", "SIZE after = " + newBit.getByteCount());
}

public static Bitmap compress(Bitmap src, Bitmap.CompressFormat format,
                            int quality) {
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    src.compress(format, quality, os);
    byte[] array = os.toByteArray();
    return BitmapFactory.decodeByteArray(array, 0, array.length);
}

结果:

  • D / IMAGES_:SIZE = 1228800
  • D / IMAGES_:SIZE = 1228800

2 个答案:

答案 0 :(得分:1)

你测量错了。压缩的大小由array.length给出。然后,您将其解码回其完整大小和像素编码。如果您希望占用较小的内存,则需要:

  1. 调整图片大小。
  2. 使用不同的像素格式进行解码。
  3. 以上所有。

答案 1 :(得分:1)

  1. 质量参数不适用于丢失的PNG格式,您需要将其更改为JPG才能生效。

  2. 即使您将其更改为JPG,前后位图仍将具有相同的尺寸,但质量不同。我认为你真正需要的是调用Bitmap.createScaledBitmap()来获得一个较小的位图,然后存储它。