在我的应用程序中,我向服务器发送了一些图像。图片的最大大小是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)怎么回事?
当然我想调整大小,但是太小了!
我做错什么了?“质量”不是%吗?那么我怎么才能得到“接近”的最大尺寸图像呢?
在android文档中,只需说它表示压缩大小...
发布于 2018-02-23 02:30:09
我想是这样的。如果原始图像大小是500kb,我需要300kb。比我设置的质量:60,图像将压缩60%,它成为300kb。
不是的。
在安卓文件中,只要说它的意思是压缩大小...
不是的。对于compress()的quality参数,The documentation具有以下内容
提示空压机,0-100。0表示压缩为小尺寸,100表示压缩为最大质量。某些格式,如无损的PNG格式,将忽略质量设置。
如果对PNG执行compress()操作,则忽略质量值。如果您compress()到JPEG,那么它被用来控制JPEG compression,它通常使用0-100范围来表示所需的质量。但是,这并不意味着值为0会给出不占用空间的照片。
那么我怎么才能得到“接近”的最大尺寸图像?
如果不进行压缩,就无法知道JPEG压缩图像的大小。理想情况下,您不必担心将其“接近”某个特定的压缩比。相反,要么让用户选择质量值,要么选择一些质量值并继续。
https://stackoverflow.com/questions/48934284
复制相似问题