什么意思是bitmap.compress()参数'质量'?

时间:2018-02-22 18:01:01

标签: android

在我的应用程序中,我将一些图像发送到服务器。 图像最大大小为300kb,我将调整文件大小。

这是我的调整大小代码。

public static void resize_filesize(Context context, Uri uri, int maxSize) {
    int filesize;  
    int compressRate;
    try {

        InputStream inputStream = context.getContentResolver().openInputStream(uri);
        filesize = inputStream.available();
        inputStream.close();

        compressRate = ((100*maxSize) / filesize);

        File storageDir = new File(Environment.getExternalStorageDirectory() + context.getString(R.string.photoPath));
        File image = new File(storageDir,"resize.jpg");

        FileOutputStream outputStream = new FileOutputStream(image);
        Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);
        bitmap.compress(Bitmap.CompressFormat.JPEG, compressRate, outputStream);

        outputStream.close();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            uri = FileProvider.getUriForFile(context,
                    BuildConfig.APPLICATION_ID + ".provider", image);
        } else {
            uri = Uri.fromFile(image);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

}
我认为这个。 如果原始图像大小为500kb,我需要300kb。 比我设定的质量:60,图像将60%压缩,它变成300kb。

但我尝试了,这么多压缩工作。 这是我的日志。

original : 831210(811kb)
maxsize : 307200(300kb)
rate :  35
final size : 95053(92kb)

发生了什么???

ofcource我想要调整大小,但它太小了!

我做错了什么? '质量'不是指%?我怎么能接近' maxsize image?

在android文档中,只是说它意味着压缩大小...

1 个答案:

答案 0 :(得分:7)

  我认为这个。如果原始图像大小为500kb,我需要300kb。比我设定的质量:60,图像将60%压缩,它变成300kb。

没有

  

在android文档中,只是说它意味着压缩大小...

没有。对于quality compress() compress()参数,The documentation有{}。{/}

  

提示压缩机,0-100。 0表示压缩小尺寸,100表示​​压缩以获得最高质量。某些格式,如无损的PNG,将忽略质量设置。

如果compress()为PNG,则会忽略质量值。如果你"select * from " + tabelName为JPEG,那么它用于控制JPEG compression,它通常使用0-100范围来表示所需的质量。但是,这并不意味着值为0会为您提供不占空间的照片。

  

我怎么能得到'接近'maxsize图像?

没有压缩它就无法知道JPEG压缩图像的大小。理想情况下,您不必担心它会“接近”一些特定的压缩比。相反,要么让用户选择质量值,要么只选择一些质量值并继续前进。

相关问题