如何在不影响位图大小的情况下降低其质量?

时间:2018-07-09 08:31:33

标签: android bitmap

如何在不影响位图大小的情况下降低位图质量?

这是我要获取的递归函数:

private String compressIv1(Bitmap b , int quality){

        long size_on_disk = 0;
        ByteArrayOutputStream byteArrayOutputStream1 = new ByteArrayOutputStream();
        b.compress(Bitmap.CompressFormat.PNG, quality, byteArrayOutputStream1);
        byte[] byteArray1 = byteArrayOutputStream1 .toByteArray();
        App.registerBitmapModel.bitmapSize1  = byteArray1.length/1024;

        size_on_disk = byteArray1.length/1024;
        Log.e("size_on_disk","=>"+size_on_disk);
        Bitmap temp_b = BitmapFactory.decodeByteArray(byteArray1, 0, byteArray1.length);

        if(quality <= 0)
            return "";

        if(size_on_disk >= 1000)
        {
            quality = quality - 10;
            compressIv1(temp_b,quality);
        }else{
            encodedImg1 = "data:image/jpeg;base64," + Base64.encodeToString(byteArray1, Base64.DEFAULT);

            return encodedImg1;
        }
        return "";
    }

但我得到相同的尺寸:

  Log.e("size_on_disk","=>"+size_on_disk);

1 个答案:

答案 0 :(得分:1)

由于['A', 'B', 'B', 'A'] 格式是无损的,因此它将忽略质量设置,因此压缩的结果始终相同。这是docs

  

quality-int:提示压缩器,0-100。 0表示小尺寸压缩,100表示​​最大质量压缩。某些格式(例如无损的PNG)会忽略质量设置